Ack all 3 patches On Wed, Jan 22, 2025 at 5:56 PM Liu Kui <kui....@virtuozzo.com> wrote: > > Currently if a msg is completed in error, the error is not properly > returned to userspace making userspace unable to process such error > correctly. Thus userspace has to abort the connection whenever there's > a msg completing in error. Even non-fatal error such as the response > timeout error would result in abortion of the connecion, which is just > a wrong behaivor. > > By passing the response timeout error to userspace, it allows userspace > to solely rely on the kill timer in kernel rpc for waiting for response. > Acting this way can remove the possibility that a userpsace request is > completed before its corresponding request completes in kernel space, > thus addressing two issues that could otherwise happen, 1) userspace > receives a stale response from kernel. 2) kernel access buffs that have > been released in userspace. > > Related to #VSTOR-97762 > Signed-off-by: Liu Kui <kui....@virtuozzo.com> > --- > fs/fuse/kio/pcs/pcs_krpc.c | 10 +++------- > fs/fuse/kio/pcs/pcs_krpc_prot.h | 10 +++++++--- > 2 files changed, 10 insertions(+), 10 deletions(-) > > diff --git a/fs/fuse/kio/pcs/pcs_krpc.c b/fs/fuse/kio/pcs/pcs_krpc.c > index 45ec3cb3207c..2ab1450a0005 100644 > --- a/fs/fuse/kio/pcs/pcs_krpc.c > +++ b/fs/fuse/kio/pcs/pcs_krpc.c > @@ -279,21 +279,17 @@ static int pcs_krpc_ioctl_recv_msg(struct pcs_krpc > *krpc, struct pcs_krpc_ioc_re > krpc->nr_completion--; > spin_unlock(&krpc->lock); > > - if (comp->result) { > - res -= comp->result; > - goto out; > - } > - > res = 1; > iocmsg->xid = comp->xid; > - if (comp->xid == 0) { > + if (comp->xid == 0) { /* request */ > BUG_ON(!comp->data_len); > BUG_ON(iocmsg->buf.len < comp->data_len); > if (copy_to_user((void __user *)iocmsg->buf.addr, > comp->_data_buf, comp->data_len)) > res = -EFAULT; > + } else { /* response */ > + iocmsg->result = comp->result; > } > > -out: > krpc_completion_free(comp); > return res; > } > diff --git a/fs/fuse/kio/pcs/pcs_krpc_prot.h b/fs/fuse/kio/pcs/pcs_krpc_prot.h > index 81caa1d53669..812f778a6a06 100644 > --- a/fs/fuse/kio/pcs/pcs_krpc_prot.h > +++ b/fs/fuse/kio/pcs/pcs_krpc_prot.h > @@ -7,8 +7,9 @@ > * kRPC version: > * v1: Initial krpc support > * v2: Support zerocopy read > + * v3: Return error code to userspace > */ > -#define PCS_KRPC_VERSION 2 > +#define PCS_KRPC_VERSION 3 > > /* Device ioctls: */ > #define PCS_KRPC_IOC_MAGIC 255 > @@ -50,14 +51,17 @@ struct pcs_krpc_ioc_sendmsg { > u64 xid; /* context id */ > u32 msg_size; /* total size of the > msg */ > u16 timeout; /* timeout */ > - u8 flags; /* alignment, */ > + u8 flags; /* alignment */ > u8 nr_data_chunks; /* total number of data > chunks */ > struct pcs_krpc_buf_desc hdr_chunk; /* the buf holding msg header > */ > }; > > struct pcs_krpc_ioc_recvmsg { > u64 xid; /* context id */ > - struct pcs_krpc_buf_desc buf; /* for cs congestion notification and > rpc keep waiting msg.*/ > + union { > + u32 result; /* for response msg */ > + struct pcs_krpc_buf_desc buf; /* for request msg */ > + }; > }; > > #endif > -- > 2.39.5 (Apple Git-154)
_______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel