• David M. Grimes's avatar
    [PATCH] knfsd: add nfs-export support to tmpfs · 91828a40
    David M. Grimes authored
    
    
    We need to encode a decode the 'file' part of a handle.  We simply use the
    inode number and generation number to construct the filehandle.
    
    The generation number is the time when the file was created.  As inode numbers
    cycle through the full 32 bits before being reused, there is no real chance of
    the same inum being allocated to different files in the same second so this is
    suitably unique.  Using time-of-day rather than e.g.  jiffies makes it less
    likely that the same filehandle can be created after a reboot.
    
    In order to be able to decode a filehandle we need to be able to lookup by
    inum, which means that the inode needs to be added to the inode hash table
    (tmpfs doesn't currently hash inodes as there is never a need to lookup by
    inum).  To avoid overhead when not exporting, we only hash an inode when it is
    first exported.  This requires a lock to ensure it isn't hashed twice.
    
    This code is separate from the patch posted in June06 from Atal Shargorodsky
    which provided the same functionality, but does borrow slightly from it.
    
    Locking comment: Most filesystems that hash their inodes do so at the point
    where the 'struct inode' is initialised, and that has suitable locking
    (I_NEW).  Here in shmem, we are hashing the inode later, the first time we
    need an NFS file handle for it.  We no longer have I_NEW to ensure only one
    thread tries to add it to the hash table.
    
    Cc: Atal Shargorodsky <atal@codefidence.com>
    Cc: Gilad Ben-Yossef <gilad@codefidence.com>
    Signed-off-by: default avatarDavid M. Grimes <dgrimes@navisite.com>
    Signed-off-by: default avatarNeil Brown <neilb@suse.de>
    Acked-by: default avatarHugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    91828a40
shmem.c 62.9 KB