lkml.org 
[lkml]   [2015]   [Sep]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 2.6.32 42/62] fixing infinite OPEN loop in 4.0 stateid recovery
    Date
    Hi Willy,

    I believe the patch introduced another problem and needs to be corrected.

    > On Sep 12, 2015, at 6:56 PM, Willy Tarreau <w@1wt.eu> wrote:
    >
    > 2.6.32-longterm review patch. If anyone has any objections, please let me know.
    >
    > ------------------
    >
    > From: Olga Kornievskaia <kolga@netapp.com>
    >
    > commit e8d975e73e5fa05f983fbf2723120edcf68e0b38 upstream.
    >
    > Problem: When an operation like WRITE receives a BAD_STATEID, even though
    > recovery code clears the RECLAIM_NOGRACE recovery flag before recovering
    > the open state, because of clearing delegation state for the associated
    > inode, nfs_inode_find_state_and_recover() gets called and it makes the
    > same state with RECLAIM_NOGRACE flag again. As a results, when we restart
    > looking over the open states, we end up in the infinite loop instead of
    > breaking out in the next test of state flags.
    >
    > Solution: unset the RECLAIM_NOGRACE set because of
    > calling of nfs_inode_find_state_and_recover() after returning from calling
    > recover_open() function.
    >
    > Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
    > Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
    > [bwh: Backported to 3.2: adjust context]
    > Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    > (cherry picked from commit ef8500b18fc4bb03286a93b6032d56ec7bcbfd15)
    >
    > Signed-off-by: Willy Tarreau <w@1wt.eu>
    > ---
    > fs/nfs/nfs4state.c | 2 ++
    > 1 file changed, 2 insertions(+)
    >
    > diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
    > index 2a7f163..71ee6f6 100644
    > --- a/fs/nfs/nfs4state.c
    > +++ b/fs/nfs/nfs4state.c
    > @@ -929,6 +929,8 @@ restart:
    > __func__);
    > }
    > nfs4_put_open_state(state);
    > + clear_bit(NFS4CLNT_RECLAIM_NOGRACE,
    > + &state->flags);
    > goto restart;
    > }
    > }
    > --
    > 1.7.12.2.21.g234cd45.dirty
    >
    >
    >



    \
     
     \ /
      Last update: 2015-09-15 02:01    [W:4.045 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site