diff options
author | Andrew Elble <aweits@rit.edu> | 2015-11-06 04:42:43 +0300 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2015-11-10 17:29:45 +0300 |
commit | 7fc0564e3a8d16df096f48c9c6425ba84d945c6e (patch) | |
tree | 1470204738456cc407010bf070efc134e0490141 /include/linux/sunrpc | |
parent | 34ed9872e745fa56f10e9bef2cf3d2336c6c8816 (diff) | |
download | linux-7fc0564e3a8d16df096f48c9c6425ba84d945c6e.tar.xz |
nfsd: fix race with open / open upgrade stateids
We observed multiple open stateids on the server for files that
seemingly should have been closed.
nfsd4_process_open2() tests for the existence of a preexisting
stateid. If one is not found, the locks are dropped and a new
one is created. The problem is that init_open_stateid(), which
is also responsible for hashing the newly initialized stateid,
doesn't check to see if another open has raced in and created
a matching stateid. This fix is to enable init_open_stateid() to
return the matching stateid and have nfsd4_process_open2()
swap to that stateid and switch to the open upgrade path.
In testing this patch, coverage to the newly created
path indicates that the race was indeed happening.
Signed-off-by: Andrew Elble <aweits@rit.edu>
Reviewed-by: Jeff Layton <jlayton@poochiereds.net>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'include/linux/sunrpc')
0 files changed, 0 insertions, 0 deletions