Re: [PATCH] fs: inode: Reduce volatile inode wraparound risk when ino_t is 64 bit

From: Matthew Wilcox
Date: Fri Dec 20 2019 - 11:46:37 EST


On Fri, Dec 20, 2019 at 03:41:11PM +0200, Amir Goldstein wrote:
> Suggestion:
> 1. Extend the kmem_cache API to let the ctor() know if it is
> initializing an object
> for the first time (new page) or recycling an object.

Uh, what? The ctor is _only_ called when new pages are allocated.
Part of the contract with the slab user is that objects are returned to
the slab in an initialised state.

> 2. Let shmem_init_inode retain the value of i_ino of recycled shmem_inode_info
> objects
> 3. i_ino is initialized with get_next_ino() only in case it it zero
>
> Alternatively to 1., if simpler to implement and acceptable by slab developers:
> 1.b. remove the assertion from cache_grow_begin()/new_slab_objects():
> WARN_ON_ONCE(s->ctor && (flags & __GFP_ZERO));
> and pass __GFP_ZERO in shmem_alloc_inode()

WTF would that _mean_? I want this object to contain zeroes and whatever
the constructor sets it to. WHich one wins?