• J. Bruce Fields's avatar
    knfsd: let nfsd manage timing out its own leases · 0272e1fd
    J. Bruce Fields authored
    Currently there's a race that can cause an oops in generic_setlease.
    
    (In detail: nfsd, when it removes a lease, does so by calling
    vfs_setlease() with F_UNLCK and a pointer to the fl_flock field, which
    in turn points to nfsd's existing lease; but the first thing the
    setlease code does is call time_out_leases().  If the lease happens to
    already be beyond the lease break time, that will free the lease and (in
    nfsd's release_private callback) set fl_flock to NULL, leading to a NULL
    deference soon after in vfs_setlease().)
    
    There are probably other things to fix here too, but it seems inherently
    racy to allow either locks.c or nfsd to time out this lease.  Instead
    just set the fl_break_time to 0 (preventing locks.c from ever timing out
    this lock) and leave it up to nfsd's laundromat thread to deal with it.
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    0272e1fd
nfs4state.c 87.6 KB