| From abbec2da13f0e4c5d9b78b7e2c025a3e617228ba Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| Date: Thu, 5 Jun 2014 10:42:37 -0400 |
| Subject: NFS: Use raw_write_seqcount_begin/end int nfs4_reclaim_open_state |
| |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| |
| commit abbec2da13f0e4c5d9b78b7e2c025a3e617228ba upstream. |
| |
| 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. |
| |
| Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/nfs4state.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/fs/nfs/nfs4state.c |
| +++ b/fs/nfs/nfs4state.c |
| @@ -1456,7 +1456,7 @@ static int nfs4_reclaim_open_state(struc |
| * server that doesn't support a grace period. |
| */ |
| spin_lock(&sp->so_lock); |
| - write_seqcount_begin(&sp->so_reclaim_seqcount); |
| + raw_write_seqcount_begin(&sp->so_reclaim_seqcount); |
| restart: |
| list_for_each_entry(state, &sp->so_states, open_states) { |
| if (!test_and_clear_bit(ops->state_flag_bit, &state->flags)) |
| @@ -1519,13 +1519,13 @@ restart: |
| spin_lock(&sp->so_lock); |
| goto restart; |
| } |
| - write_seqcount_end(&sp->so_reclaim_seqcount); |
| + raw_write_seqcount_end(&sp->so_reclaim_seqcount); |
| spin_unlock(&sp->so_lock); |
| return 0; |
| out_err: |
| nfs4_put_open_state(state); |
| spin_lock(&sp->so_lock); |
| - write_seqcount_end(&sp->so_reclaim_seqcount); |
| + raw_write_seqcount_end(&sp->so_reclaim_seqcount); |
| spin_unlock(&sp->so_lock); |
| return status; |
| } |