The commit is pushed to "branch-rh9-5.14.0-425.vz9.60.x-ovz" and will appear at 
https://src.openvz.org/scm/ovz/vzkernel.git
after rh9-5.14.0-425.el9
------>
commit 48373aae01e17432948b3c66647b688b6d84258d
Author: Konstantin Khorenko <khore...@virtuozzo.com>
Date:   Thu Mar 7 17:35:35 2024 +0300

    fs/fuse kio: use iov_iter_get_pages2() + iov_iter_revert() scheme in 
do_recv_one_seg()
    
    Mainstream has deprecated iov_iter_get_pages() + iov_iter_advance()
    scheme in favour of iov_iter_get_pages2() + iov_iter_revert(), so we
    have to use the new scheme as well.
    
    Fixes: 75259bc81b21 ("fs/fuse kio: remove iov_iter_for_each_range()
    usage")
    
    The problem has appeared on rebasing to RHEL9.4 BETA 5.14.0-425.el9
    kernel:
    https://virtuozzo.atlassian.net/browse/PSBM-154941
    
    Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com>
---
 fs/fuse/kio/pcs/pcs_sock_io.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/fs/fuse/kio/pcs/pcs_sock_io.c b/fs/fuse/kio/pcs/pcs_sock_io.c
index 46de1023c876..189cf5c98c7d 100644
--- a/fs/fuse/kio/pcs/pcs_sock_io.c
+++ b/fs/fuse/kio/pcs/pcs_sock_io.c
@@ -226,10 +226,15 @@ static int do_recv_one_seg(struct socket *sock, struct 
iov_iter *it, size_t left
                ssize_t len;
                struct page* page;
 
-               len = iov_iter_get_pages(it, &page, size, 1, &offset);
+               len = iov_iter_get_pages2(it, &page, size, 1, &offset);
                BUG_ON(len <=0);
 
                ret = do_sock_recv(sock, kmap(page) + offset, len);
+               if (ret <= 0)
+                       iov_iter_revert(it, len);
+               else if (ret < len)
+                       iov_iter_revert(it, len - ret);
+
                kunmap(page);
                put_page(page);
        }
@@ -313,7 +318,6 @@ static void pcs_sockio_recv(struct pcs_sockio *sio)
                                n = do_recv_one_seg(sio->socket, it, 
(size_t)(msg_size - sio->read_offset));
                                if (n > 0) {
                                        sio->read_offset += n;
-                                       iov_iter_advance(it, n);
                                } else {
                                        if (n == -EAGAIN || n == 0)
                                                return;
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to