diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-04-16 18:14:13 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-04-16 18:14:13 -0700 |
commit | 7a56db0299f9d43b4fe076838150c5cc293df131 (patch) | |
tree | b8c0507100ff2f65a88ec867e142c3196f4ca574 /fs | |
parent | 2fcd80144b93ff90836a44f2054b4d82133d3a85 (diff) | |
parent | fbf4bcc9a8373122881909331f2f9566a128126e (diff) |
Merge tag 'nfs-for-5.7-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client bugfix from Trond Myklebust:
"Fix an ABBA spinlock issue in pnfs_update_layout()"
* tag 'nfs-for-5.7-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
NFS: Fix an ABBA spinlock issue in pnfs_update_layout()
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/pnfs.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index f2dc35c22964..b8d78f393365 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -2023,6 +2023,7 @@ lookup_again: goto lookup_again; } + spin_unlock(&ino->i_lock); first = true; status = nfs4_select_rw_stateid(ctx->state, iomode == IOMODE_RW ? FMODE_WRITE : FMODE_READ, @@ -2032,12 +2033,12 @@ lookup_again: trace_pnfs_update_layout(ino, pos, count, iomode, lo, lseg, PNFS_UPDATE_LAYOUT_INVALID_OPEN); - spin_unlock(&ino->i_lock); nfs4_schedule_stateid_recovery(server, ctx->state); pnfs_clear_first_layoutget(lo); pnfs_put_layout_hdr(lo); goto lookup_again; } + spin_lock(&ino->i_lock); } else { nfs4_stateid_copy(&stateid, &lo->plh_stateid); } |