Patch "NFSv4.1: freeze the session table upon receiving NFS4ERR_BADSESSION" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    NFSv4.1: freeze the session table upon receiving NFS4ERR_BADSESSION

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfsv4.1-freeze-the-session-table-upon-receiving-nfs4.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit c75abb197fd47273f1a9756a46daaf04dc03bb9e
Author: Olga Kornievskaia <kolga@xxxxxxxxxx>
Date:   Sun Jun 18 17:32:25 2023 -0400

    NFSv4.1: freeze the session table upon receiving NFS4ERR_BADSESSION
    
    [ Upstream commit c907e72f58ed979a24a9fdcadfbc447c51d5e509 ]
    
    When the client received NFS4ERR_BADSESSION, it schedules recovery
    and start the state manager thread which in turn freezes the
    session table and does not allow for any new requests to use the
    no-longer valid session. However, it is possible that before
    the state manager thread runs, a new operation would use the
    released slot that received BADSESSION and was therefore not
    updated its sequence number. Such re-use of the slot can lead
    the application errors.
    
    Fixes: 5c441544f045 ("NFSv4.x: Handle bad/dead sessions correctly in nfs41_sequence_process()")
    Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx>
    Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index c54dd49c993c5..231da9fadf098 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -915,6 +915,7 @@ static int nfs41_sequence_process(struct rpc_task *task,
 out_noaction:
 	return ret;
 session_recover:
+	set_bit(NFS4_SLOT_TBL_DRAINING, &session->fc_slot_table.slot_tbl_state);
 	nfs4_schedule_session_recovery(session, status);
 	dprintk("%s ERROR: %d Reset session\n", __func__, status);
 	nfs41_sequence_free_slot(res);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux