• Steve French's avatar
    [CIFS] Reduce chance of list corruption in find_writable_file · 9b22b0b7
    Steve French authored
    When find_writable_file is racing with close and the session
    to the server goes down, Shaggy noticed that there was a
    chance that an open file in the list of files off the inode
    could have been freed by close since cifs_reconnect can
    block (the spinlock thus not held). This means that
    we have to start over at the beginning of the list in some
    cases.
    
    There is a 2nd change that needs to be made later
    (pointed out by Jeremy Allison and Shaggy) in order to
    prevent cifs_close ever freeing the cifs per file info
    when a write is pending.  Although we delay close from
    freeing this memory for sufficiently long for all known
    cases, ultimately on a very, very slow write
    overlapping a close pending we need to allow close to return
    (without freeing the cifs file info) and defer freeing the
    memory to be the responsibility of the (sloooow) write
    thread (presumably have to look at every place wrtPending
    is decremented - and add a flag for deferred free for
    after wrtPending goes to zero).
    Acked-by: default avatarShaggy <shaggy@us.ibm.com>
    Acked-by: default avatarShirish Pargaonkar <shirishp@us.ibm.com>
    Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
    9b22b0b7
file.c 55.7 KB