Acknowledged On Mon, Dec 9, 2024 at 4:56 PM Liu Kui <kui....@virtuozzo.com> wrote: > > All kRPCs must be aborted first to remove all potential lingering > references to pages belong to fuse read requests that will be > completed during fuse connection abort. > > Related to #VSTOR-95997 > > Signed-off-by: Liu Kui <kui....@virtuozzo.com> > --- > fs/fuse/dev.c | 5 +++-- > fs/fuse/kio/pcs/pcs_fuse_kdirect.c | 9 +++++++-- > fs/fuse/kio/pcs/pcs_krpc.c | 8 ++++++++ > fs/fuse/kio/pcs/pcs_krpc.h | 1 + > 4 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c > index f5594e49bc2f..3193590eb642 100644 > --- a/fs/fuse/dev.c > +++ b/fs/fuse/dev.c > @@ -2615,8 +2615,6 @@ void fuse_abort_conn(struct fuse_conn *fc) > &to_end); > spin_unlock(&fpq->lock); > } > - if (fc->kio.op) > - fc->kio.op->conn_abort(fc); > > spin_lock(&fc->bg_lock); > fc->blocked = 0; > @@ -2633,6 +2631,9 @@ void fuse_abort_conn(struct fuse_conn *fc) > wake_up_all(&fc->qhash[cpu].waitq); > spin_unlock(&fc->lock); > > + if (fc->kio.op) > + fc->kio.op->conn_abort(fc); > + > end_requests(&to_end); > } else { > spin_unlock(&fc->lock); > diff --git a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c > b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c > index 5b141fe5bbd4..7e5d3d4fb403 100644 > --- a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c > +++ b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c > @@ -313,11 +313,16 @@ static void kpcs_conn_fini(struct fuse_mount *fm) > > static void kpcs_conn_abort(struct fuse_conn *fc) > { > - /* XXX: Implement abort pending kio */ > + struct pcs_fuse_cluster *pfc = (struct pcs_fuse_cluster *) > fc->kio.ctx; > + > + /* we need to abort krpcs */ > + if (!pfc) > + return; > + > + pcs_krpcset_abort(&pfc->cc.krpcs); > } > > static int kpcs_probe(struct fuse_conn *fc, char *name) > - > { > return 1; > } > diff --git a/fs/fuse/kio/pcs/pcs_krpc.c b/fs/fuse/kio/pcs/pcs_krpc.c > index ab2534f7a952..45ec3cb3207c 100644 > --- a/fs/fuse/kio/pcs/pcs_krpc.c > +++ b/fs/fuse/kio/pcs/pcs_krpc.c > @@ -957,6 +957,14 @@ void pcs_krpcset_init(struct pcs_krpc_set *krpcs) > spin_lock_init(&krpcs->lock); > } > > +void pcs_krpcset_abort(struct pcs_krpc_set *krpcs) > +{ > + struct pcs_krpc *krpc; > + > + list_for_each_entry(krpc, &krpcs->list, link) > + pcs_krpc_abort(krpc); > +} > + > void pcs_krpcset_fini(struct pcs_krpc_set *krpcs) > { > spin_lock(&krpcs->lock); > diff --git a/fs/fuse/kio/pcs/pcs_krpc.h b/fs/fuse/kio/pcs/pcs_krpc.h > index 556021b1d1f5..85ddbe1b713c 100644 > --- a/fs/fuse/kio/pcs/pcs_krpc.h > +++ b/fs/fuse/kio/pcs/pcs_krpc.h > @@ -138,6 +138,7 @@ void pcs_krpc_fini(void); > > void pcs_krpcset_init(struct pcs_krpc_set *krpcs); > void pcs_krpcset_fini(struct pcs_krpc_set *krpcs); > +void pcs_krpcset_abort(struct pcs_krpc_set *krpcs); > > struct pcs_krpc *pcs_krpc_lookup(struct pcs_krpc_set *krpcs, PCS_NODE_ID_T > *id); > int pcs_krpc_create(struct pcs_krpc_set *krpcs, PCS_NODE_ID_T *id, > -- > 2.39.5 (Apple Git-154)
_______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel