On Mon, Aug 21, 2023 at 05:09:44AM +0100, Matthew Wilcox wrote: > On Mon, Aug 21, 2023 at 12:46:20PM +0900, Byungchul Park wrote: > > @@ -1219,6 +1220,9 @@ static inline bool folio_trylock_flag(struct folio *folio, int bit_nr, > > /* How many times do we accept lock stealing from under a waiter? */ > > int sysctl_page_lock_unfairness = 5; > > > > +static struct dept_map __maybe_unused PG_locked_map = DEPT_MAP_INITIALIZER(PG_locked_map, NULL); > > +static struct dept_map __maybe_unused PG_writeback_map = DEPT_MAP_INITIALIZER(PG_writeback_map, NULL); > > Hmm, why are these "maybe unused"? *digs*. Ah. Because > sdt_might_sleep_start() becomes a no-op macro if DEPT is disabled. > > OK, the right way to handle this is > > #ifdef CONFIG_DEPT > #define DEPT_MAP(name) static struct dept_map name = \ > DEPT_MAP_INITIALIZER(name, NULL) > #else > #define DEPT_MAP(name) /* */ > #endif > > And now DEPT takes up no space if disabled. Currently: #if !defined(CONFIG_DEPT) struct dept_map { }; #endif So I think it doesn't take space at all. Do you think I still need to introduce e.g. DEPT_MAP()? Then I will. Thank you! Byungchul > /* */; is a somewhat unusual thing to see, but since this must work at > top level, we can't use "do { } while (0)" like we usually do. Given > where else this is likely to be used, i don't think it's going to be > a problem ...