• J
    cifs: don't use vfsmount to pin superblock for oplock breaks · d7c86ff8
    Jeff Layton 提交于
    Filesystems aren't really supposed to do anything with a vfsmount. It's
    considered a layering violation since vfsmounts are entirely managed at
    the VFS layer.
    
    CIFS currently keeps an active reference to a vfsmount in order to
    prevent the superblock vanishing before an oplock break has completed.
    What we really want to do instead is to keep sb->s_active high until the
    oplock break has completed. This patch borrows the scheme that NFS uses
    for handling sillyrenames.
    
    An atomic_t is added to the cifs_sb_info. When it transitions from 0 to
    1, an extra reference to the superblock is taken (by bumping the
    s_active value). When it transitions from 1 to 0, that reference is
    dropped and a the superblock teardown may proceed if there are no more
    references to it.
    
    Also, the vfsmount pointer is removed from cifsFileInfo and from
    cifs_new_fileinfo, and some bogus forward declarations are removed from
    cifsfs.h.
    Signed-off-by: NJeff Layton <jlayton@redhat.com>
    Reviewed-by: NSuresh Jayaraman <sjayaraman@suse.de>
    Acked-by: NDave Kleikamp <shaggy@linux.vnet.ibm.com>
    Signed-off-by: NSteve French <sfrench@us.ibm.com>
    d7c86ff8
cifsproto.h 17.7 KB