Re: [RFC] mm/shrinker: define INIT_SHRINKER macro

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On (07/10/15 18:33), Andrew Morton wrote:
> > > > I was thinking of a trivial INIT_SHRINKER macro to init `struct shrinker'
> > > > internal members (composed in email client, not tested)
> > > > 
> > > > include/linux/shrinker.h
> > > > 
> > > > #define INIT_SHRINKER(s)			\
> > > > 	do {					\
> > > > 		(s)->nr_deferred = NULL;	\
> > > > 		INIT_LIST_HEAD(&(s)->list);	\
> > > > 	} while (0)
> > > 
> > > Spose so.  Although it would be simpler to change unregister_shrinker()
> > > to bale out if list.next==NULL and then say "all zeroes is the
> > > initialized state".
> > 
> > Yes, or '->nr_deferred == NULL' -- we can't have NULL ->nr_deferred
> > in a properly registered shrinker (as of now)
> 
> list.next seems safer because that will always be non-zero.  But
> whatever - we can change it later.
>  
> > But that will not work if someone has accidentally passed not zeroed
> > out pointer to unregister.
> 
> I wouldn't worry about that really.  If you pass a pointer to
> uninitialized memory, the kernel will explode.  That's true of just
> about every pointer-accepting function in the kernel.
>

True. But with shrinker it's hard to say whether we have a properly
initialized shrinker embedded in our `struct foo' or we don't (unless
we treat register_shrinker() errors as a show stopper) by simply looking at
shrinker struct (w/o touching it's private members). In zsmalloc, for
instance, we don't consider failed register_shrinker() to be critical
enough to forbid zs_pool creation and usage. It makes things harder later
in zs_destroy_pool(), because we need to carry some sort of flag for that
purpose. But `list.next' check in unregister_shrinker() would suffice in
zsmalloc case, I must admit, because we kzalloc() the entire zs_pool
struct.

	-ss

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]