[Devel] [PATCH VZ9 2/2] fs/fuse kio: introduce pcs_krpc - export kernel RPC to userspace

Vasily Averin vvs at openvz.org
Tue May 21 06:22:46 MSK 2024


On 5/16/24 17:22, Liu Kui wrote:
> --- a/fs/fuse/kio/pcs/pcs_cs.h
> +++ b/fs/fuse/kio/pcs/pcs_cs.h
> @@ -159,7 +159,7 @@ unsigned int cs_get_avg_in_flight(struct pcs_cs *cs);
>  void pcs_csset_init(struct pcs_cs_set *css);
>  void pcs_csset_fini(struct pcs_cs_set *css);
>  
> -struct pcs_cs *pcs_cs_alloc(struct pcs_cs_set *css, struct pcs_cluster_core *cc);
> +// struct pcs_cs *pcs_cs_alloc(struct pcs_cs_set *css, struct pcs_cluster_core *cc);   <<<<<< // comment?
>  
>  void cs_log_io_times(struct pcs_int_request *ireq, struct pcs_msg *resp, unsigned int max_iolat);
>  int pcs_cs_format_io_times(char *buf, int buflen, struct pcs_int_request *ireq, struct pcs_msg *resp);
>  void pcs_csa_cs_detach(struct pcs_cs * cs);

> +	spin_lock(&krpc->lock);
> +	kreq->krpc = pcs_krpc_get(krpc);
> +	list_add_tail(&kreq->link, &krpc->pending_queue);
> +	spin_unlock(&krpc->lock);
> +	// DTRACE to be added                                                            <<<<<< // comment?
> +	pcs_rpc_queue(krpc->rpc, msg);
> +
> +	return 0;
> +

> +struct krpc_completion {
> +	struct list_head	link;		// in krpc->in_queue;                    <<<<<< // comment?
> +
> +	u64			xid;
> +	int			result;
> +
> +	void		*private;
> +	int			data_len;
> +	u8			_data_buf[0];
> +};

> +struct pcs_krpc_buf_desc {
> +	u64  addr;		// buf address in userspace.                            <<<<<< // comment?
> +	u32	 len;		// size of the buf
> +	u32  mr_id;		// mr id
> +};

> diff --git a/fs/fuse/kio/pcs/pcs_req.h b/fs/fuse/kio/pcs/pcs_req.h
> index cdf1c9754803..886400fcaf1b 100644
> --- a/fs/fuse/kio/pcs/pcs_req.h
> +++ b/fs/fuse/kio/pcs/pcs_req.h
> @@ -18,6 +18,8 @@
>  #include "fuse_ktrace_prot.h"
>  #include "fuse_stat.h"
>  #include "../../fuse_i.h"
> +#include "pcs_mr.h"
> +#include "pcs_krpc.h"
>  
>  ///////////////////////////
>  
> @@ -287,6 +289,10 @@ struct pcs_cluster_core
>  ////	struct pcs_ratelimit	rlim;		/* Rate limiter */                   <<<<< old code with // comments?
>  ////	struct pcs_rng		rng;
>  	/* <SKIP */
> +
> +	struct pcs_mr_set	mrs;		/* Table of all MRs*/
> +	struct pcs_krpc_set	krpcs;		/* Table of all KRPCs */
> +

> +void pcs_rpc_clnt_close(struct pcs_rpc *ep)
> +{
> +	mutex_lock(&ep->mutex);
> +	BUG_ON(ep->flags & PCS_RPC_F_DEAD);
> +	BUG_ON(ep->flags & PCS_RPC_F_PASSIVE);
> +
> +	ep->nr_clnts--;
> +	if (!ep->nr_clnts) {
> +		// close the rpc if we're the last rpc client                          <<<<<< // comment?
> +		ep->flags |= PCS_RPC_F_DEAD;
> +		rpc_abort(ep, 1, PCS_ERR_NET_ABORT);
> +		ep->state = PCS_RPC_DESTROY;
> +	}



More information about the Devel mailing list