The commit is pushed to "branch-rh9-5.14.0-427.55.1.vz9.82.x-ovz" and will 
appear at g...@bitbucket.org:openvz/vzkernel.git
after rh9-5.14.0-427.55.1.vz9.82.4
------>
commit 7176e5bda1c6891b6e05a3f88d70f6ae34b12634
Author: Konstantin Khorenko <khore...@virtuozzo.com>
Date:   Tue Jul 8 16:20:15 2025 +0200

    Revert "fs/fuse/kio: tidy up RPC_AFFINITY_RSS"
    
    This reverts commit 3f286d2b5f406c2d5325d14d3d4a4204e7fd010e.
    
    We'll have another and better commit solving the problem:
      [PATCH VZ9 v2] fs/fuse kio: do not set RPC affinity from a workequeue 
worker
    
    https://virtuozzo.atlassian.net/browse/VSTOR-109481
    
    Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com>
    
    Feature: vStorage
---
 fs/fuse/kio/pcs/pcs_rdma_io.c |  1 -
 fs/fuse/kio/pcs/pcs_rpc.c     | 25 +++++++++----------------
 fs/fuse/kio/pcs/pcs_rpc.h     |  1 -
 fs/fuse/kio/pcs/pcs_sock_io.c |  5 +++--
 4 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/fs/fuse/kio/pcs/pcs_rdma_io.c b/fs/fuse/kio/pcs/pcs_rdma_io.c
index 1c464e0e60f3e..582504e054e19 100644
--- a/fs/fuse/kio/pcs/pcs_rdma_io.c
+++ b/fs/fuse/kio/pcs/pcs_rdma_io.c
@@ -1110,7 +1110,6 @@ static void pcs_rdma_cq_comp_handler(struct ib_cq *cq, 
void *private)
 
        set_bit(PCS_RDMA_IO_CQE, &rio->io_flags);
        wake_up(&rio->waitq);
-       ep->rx_cpu = smp_processor_id();
        pcs_rpc_kick_queue(ep);
 }
 
diff --git a/fs/fuse/kio/pcs/pcs_rpc.c b/fs/fuse/kio/pcs/pcs_rpc.c
index f15d0c3fb7cd5..4ab38b3989148 100644
--- a/fs/fuse/kio/pcs/pcs_rpc.c
+++ b/fs/fuse/kio/pcs/pcs_rpc.c
@@ -339,7 +339,6 @@ void pcs_rpc_attach_new_ep(struct pcs_rpc * ep, struct 
pcs_rpc_engine * eng)
        atomic_set(&ep->netlat_cnt, 0);
        atomic64_set(&ep->netlat_avg, 0);
        ep->cpu = WORK_CPU_UNBOUND;
-       ep->rx_cpu = WORK_CPU_UNBOUND;
 
        ep->gc = NULL;
        if (eng->max_gc_index)
@@ -864,33 +863,27 @@ static void pcs_rpc_affinity(struct pcs_rpc *ep, bool 
was_idle)
                                ep->cpu = WORK_CPU_UNBOUND;
                        }
                        break;
-               case RPC_AFFINITY_RSS: {
-                       int rx_cpu = READ_ONCE(ep->rx_cpu);
-
-                       if (rx_cpu != WORK_CPU_UNBOUND && ep->cpu != rx_cpu)
-                               ep->cpu = rx_cpu;
+               case RPC_AFFINITY_RSS:
+                       if (!(ep->flags & PCS_RPC_F_LOCAL) && ep->addr.type != 
PCS_ADDRTYPE_RDMA)
+                               break;
                        fallthrough;
-               }
-               case RPC_AFFINITY_FAIR_SPREAD:
-                       if (ep->cpu == WORK_CPU_UNBOUND ||
-                           (time_is_before_jiffies(ep->cpu_stamp) && was_idle))
-                               pcs_rpc_cpu_select(ep);
-                       break;
                case RPC_AFFINITY_RETENT:
                        /* Naive socket-to-cpu binding approach */
-                       if (ep->cpu == WORK_CPU_UNBOUND ||
-                           (time_is_before_jiffies(ep->cpu_stamp) && 
was_idle)) {
+                       if (time_is_before_jiffies(ep->cpu_stamp) && was_idle) {
                                ep->cpu_stamp = jiffies + rpc_cpu_time_slice;
                                ep->cpu = smp_processor_id();
                        }
                        break;
                case RPC_AFFINITY_SPREAD:
-                       if (ep->cpu == WORK_CPU_UNBOUND ||
-                           (time_is_before_jiffies(ep->cpu_stamp) && 
was_idle)) {
+                       if (time_is_before_jiffies(ep->cpu_stamp) && was_idle) {
                                ep->cpu_stamp = jiffies + rpc_cpu_time_slice;
                                ep->cpu = pcs_rpc_cpu_next();
                        }
                        break;
+               case RPC_AFFINITY_FAIR_SPREAD:
+                       if (time_is_before_jiffies(ep->cpu_stamp) && was_idle)
+                               pcs_rpc_cpu_select(ep);
+                       break;
                default:
                        pr_err("Unknown affinity mode: %u\n", 
rpc_affinity_mode);
        }
diff --git a/fs/fuse/kio/pcs/pcs_rpc.h b/fs/fuse/kio/pcs/pcs_rpc.h
index 0bafc8a742636..cb18557a3da5e 100644
--- a/fs/fuse/kio/pcs/pcs_rpc.h
+++ b/fs/fuse/kio/pcs/pcs_rpc.h
@@ -142,7 +142,6 @@ struct pcs_rpc
        int                     cpu;
        unsigned long           cpu_stamp;
        struct delayed_work     cpu_timer_work; /* reset cpu affinity after 
being idle */
-       int                     rx_cpu;
 
        struct mutex            mutex;
        u64                     accounted;
diff --git a/fs/fuse/kio/pcs/pcs_sock_io.c b/fs/fuse/kio/pcs/pcs_sock_io.c
index 7eb231b7260d2..ac8a6ecfdb374 100644
--- a/fs/fuse/kio/pcs/pcs_sock_io.c
+++ b/fs/fuse/kio/pcs/pcs_sock_io.c
@@ -593,8 +593,9 @@ static void pcs_sk_kick_queue(struct sock *sk)
        sio = rcu_dereference_sk_user_data(sk);
        if (sio) {
                struct pcs_rpc *ep = sio->netio.parent;
-               DTRACE(PEER_FMT" queue cpu=%d\n", PEER_ARGS(ep), 
smp_processor_id());
-               ep->rx_cpu = smp_processor_id();
+               TRACE(PEER_FMT" queue cpu=%d\n", PEER_ARGS(ep), 
smp_processor_id());
+               if (rpc_affinity_mode == RPC_AFFINITY_RSS && !(ep->flags & 
PCS_RPC_F_LOCAL))
+                       ep->cpu = smp_processor_id();
                pcs_rpc_kick_queue(ep);
        }
        rcu_read_unlock();
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to