diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-06-05 10:42:37 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-06-05 13:02:47 -0400 |
commit | abbec2da13f0e4c5d9b78b7e2c025a3e617228ba (patch) | |
tree | 7f21e994a1e99775d320a4d8c8972ca4460b62da | |
parent | 7b160cfd19e0a3691043d1ac9f4523ed7675cc4d (diff) |
NFS: Use raw_write_seqcount_begin/end int nfs4_reclaim_open_state
The addition of lockdep code to write_seqcount_begin/end has lead to
a bunch of false positive claims of ABBA deadlocks with the so_lock
spinlock. Audits show that this simply cannot happen because the
read side code does not spin while holding so_lock.
Cc: <stable@vger.kernel.org> # 3.13.x
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
-rw-r--r-- | fs/nfs/nfs4state.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 2349518eef2c..21275148fc13 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -1456,7 +1456,7 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs | |||
1456 | * server that doesn't support a grace period. | 1456 | * server that doesn't support a grace period. |
1457 | */ | 1457 | */ |
1458 | spin_lock(&sp->so_lock); | 1458 | spin_lock(&sp->so_lock); |
1459 | write_seqcount_begin(&sp->so_reclaim_seqcount); | 1459 | raw_write_seqcount_begin(&sp->so_reclaim_seqcount); |
1460 | restart: | 1460 | restart: |
1461 | list_for_each_entry(state, &sp->so_states, open_states) { | 1461 | list_for_each_entry(state, &sp->so_states, open_states) { |
1462 | if (!test_and_clear_bit(ops->state_flag_bit, &state->flags)) | 1462 | if (!test_and_clear_bit(ops->state_flag_bit, &state->flags)) |
@@ -1519,13 +1519,13 @@ restart: | |||
1519 | spin_lock(&sp->so_lock); | 1519 | spin_lock(&sp->so_lock); |
1520 | goto restart; | 1520 | goto restart; |
1521 | } | 1521 | } |
1522 | write_seqcount_end(&sp->so_reclaim_seqcount); | 1522 | raw_write_seqcount_end(&sp->so_reclaim_seqcount); |
1523 | spin_unlock(&sp->so_lock); | 1523 | spin_unlock(&sp->so_lock); |
1524 | return 0; | 1524 | return 0; |
1525 | out_err: | 1525 | out_err: |
1526 | nfs4_put_open_state(state); | 1526 | nfs4_put_open_state(state); |
1527 | spin_lock(&sp->so_lock); | 1527 | spin_lock(&sp->so_lock); |
1528 | write_seqcount_end(&sp->so_reclaim_seqcount); | 1528 | raw_write_seqcount_end(&sp->so_reclaim_seqcount); |
1529 | spin_unlock(&sp->so_lock); | 1529 | spin_unlock(&sp->so_lock); |
1530 | return status; | 1530 | return status; |
1531 | } | 1531 | } |