• S
    kernfs: implement i_generation · 4a3ef68a
    Shaohua Li 提交于
    Set i_generation for kernfs inode. This is required to implement
    exportfs operations. The generation is 32-bit, so it's possible the
    generation wraps up and we find stale files. To reduce the posssibility,
    we don't reuse inode numer immediately. When the inode number allocation
    wraps, we increase generation number. In this way generation/inode
    number consist of a 64-bit number which is unlikely duplicated. This
    does make the idr tree more sparse and waste some memory. Since idr
    manages 32-bit keys, idr uses a 6-level radix tree, each level covers 6
    bits of the key. In a 100k inode kernfs, the worst case will have around
    300k radix tree node. Each node is 576bytes, so the tree will use about
    ~150M memory. Sounds not too bad, if this really is a problem, we should
    find better data structure.
    Acked-by: NTejun Heo <tj@kernel.org>
    Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NShaohua Li <shli@fb.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    4a3ef68a
kernfs.h 16.0 KB