Re: [PATCH 1/2] NFSv4.0: Fix the wake up of the next waiter in nfs_release_seqid()

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

 



You need cc stable.

在 2024/12/25 10:50, Li Lingfeng 写道:
Hi, I noticed that [PATCH 2] has been applied to the stable, but [PATCH 1]
has not.
Based on 6.6 where [PATCH 2] was merged, I can still reproduce the
original issue, and [PATCH 1] needs to be applied as well to resolve it.
It may be better to push [PATCH 1] to the stable as well.
Thanks.

在 2024/11/9 6:13, trondmy@xxxxxxxxxx 写道:
From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>

There is no need to wake up another waiter on the seqid list unless the
seqid being removed is at the head of the list, and so is relinquishing
control of the sequence counter to the next entry.

Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
---
  fs/nfs/nfs4state.c | 10 ++++------
  1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index dafd61186557..9a9f60a2291b 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -1083,14 +1083,12 @@ void nfs_release_seqid(struct nfs_seqid *seqid)
          return;
      sequence = seqid->sequence;
      spin_lock(&sequence->lock);
-    list_del_init(&seqid->list);
-    if (!list_empty(&sequence->list)) {
-        struct nfs_seqid *next;
-
-        next = list_first_entry(&sequence->list,
-                struct nfs_seqid, list);
+    if (list_is_first(&seqid->list, &sequence->list) &&
+        !list_is_singular(&sequence->list)) {
+        struct nfs_seqid *next = list_next_entry(seqid, list);
          rpc_wake_up_queued_task(&sequence->wait, next->task);
      }
+    list_del_init(&seqid->list);
      spin_unlock(&sequence->lock);
  }





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux