]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
9p: Track 9P RPC waiting time as IO
authorRemi Pommarel <repk@triplefau.lt>
Fri, 23 Jan 2026 14:48:08 +0000 (15:48 +0100)
committerDominique Martinet <asmadeus@codewreck.org>
Thu, 29 Jan 2026 07:33:36 +0000 (07:33 +0000)
Use io_wait_event_killable() to ensure that time spent waiting for 9P
RPC transactions is accounted as IO wait time.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
Message-ID: <b8601271263011203fa34eada2e8ac21d9f679e5.1769179462.git.repk@triplefau.lt>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
net/9p/client.c
net/9p/trans_virtio.c
net/9p/trans_xen.c

index f60d1d041adbe8e4695949ae97f1ec35bd3d9b1d..1b475525ac5bc35ffc15496e105adb2191366dd1 100644 (file)
@@ -590,8 +590,8 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
        }
 again:
        /* Wait for the response */
-       err = wait_event_killable(req->wq,
-                                 READ_ONCE(req->status) >= REQ_STATUS_RCVD);
+       err = io_wait_event_killable(req->wq,
+                                    READ_ONCE(req->status) >= REQ_STATUS_RCVD);
 
        /* Make sure our req is coherent with regard to updates in other
         * threads - echoes to wmb() in the callback
index 10c2dd48643818907f4370243eb971fceba4d40b..370f4f37dcec96dcc7b20c1db85153eea3061cfe 100644 (file)
@@ -284,8 +284,8 @@ req_retry:
                if (err == -ENOSPC) {
                        chan->ring_bufs_avail = 0;
                        spin_unlock_irqrestore(&chan->lock, flags);
-                       err = wait_event_killable(*chan->vc_wq,
-                                                 chan->ring_bufs_avail);
+                       err = io_wait_event_killable(*chan->vc_wq,
+                                                    chan->ring_bufs_avail);
                        if (err  == -ERESTARTSYS)
                                return err;
 
@@ -325,7 +325,7 @@ static int p9_get_mapped_pages(struct virtio_chan *chan,
                 * Other zc request to finish here
                 */
                if (atomic_read(&vp_pinned) >= chan->p9_max_pages) {
-                       err = wait_event_killable(vp_wq,
+                       err = io_wait_event_killable(vp_wq,
                              (atomic_read(&vp_pinned) < chan->p9_max_pages));
                        if (err == -ERESTARTSYS)
                                return err;
@@ -512,8 +512,8 @@ req_retry_pinned:
                if (err == -ENOSPC) {
                        chan->ring_bufs_avail = 0;
                        spin_unlock_irqrestore(&chan->lock, flags);
-                       err = wait_event_killable(*chan->vc_wq,
-                                                 chan->ring_bufs_avail);
+                       err = io_wait_event_killable(*chan->vc_wq,
+                                                    chan->ring_bufs_avail);
                        if (err  == -ERESTARTSYS)
                                goto err_out;
 
@@ -531,8 +531,8 @@ req_retry_pinned:
        spin_unlock_irqrestore(&chan->lock, flags);
        kicked = 1;
        p9_debug(P9_DEBUG_TRANS, "virtio request kicked\n");
-       err = wait_event_killable(req->wq,
-                                 READ_ONCE(req->status) >= REQ_STATUS_RCVD);
+       err = io_wait_event_killable(req->wq,
+                                    READ_ONCE(req->status) >= REQ_STATUS_RCVD);
        // RERROR needs reply (== error string) in static data
        if (READ_ONCE(req->status) == REQ_STATUS_RCVD &&
            unlikely(req->rc.sdata[4] == P9_RERROR))
index 12f752a923324532d578f44de507d65d91e12d40..d57965e6aab056e848859deb08901d5be8022735 100644 (file)
@@ -136,8 +136,8 @@ static int p9_xen_request(struct p9_client *client, struct p9_req_t *p9_req)
        ring = &priv->rings[num];
 
 again:
-       while (wait_event_killable(ring->wq,
-                                  p9_xen_write_todo(ring, size)) != 0)
+       while (io_wait_event_killable(ring->wq,
+                                     p9_xen_write_todo(ring, size)) != 0)
                ;
 
        spin_lock_irqsave(&ring->lock, flags);