• Steve French's avatar
    SMB3: force unmount was failing to close deferred close files · 2cb6f968
    Steve French authored
    In investigating a failure with xfstest generic/392 it
    was noticed that mounts were reusing a superblock that should
    already have been freed. This turned out to be related to
    deferred close files keeping a reference count until the
    closetimeo expired.
    
    Currently the only way an fs knows that mount is beginning is
    when force unmount is called, but when this, ie umount_begin(),
    is called all deferred close files on the share (tree
    connection) should be closed immediately (unless shared by
    another mount) to avoid using excess resources on the server
    and to avoid reusing a superblock which should already be freed.
    
    In umount_begin, close all deferred close handles for that
    share if this is the last mount using that share on this
    client (ie send the SMB3 close request over the wire for those
    that have been already closed by the app but that we have
    kept a handle lease open for and have not sent closes to the
    server for yet).
    Reported-by: default avatarDavid Howells <dhowells@redhat.com>
    Acked-by: default avatarBharath SM <bharathsm@microsoft.com>
    Cc: <stable@vger.kernel.org>
    Fixes: 78c09634 ("Cifs: Fix kernel oops caused by deferred close for files.")
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    2cb6f968
cifsfs.c 49.4 KB