The commit is pushed to "branch-rh7-3.10.0-957.12.2.vz7.96.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-957.12.2.vz7.96.1 ------> commit 93ab39087c27985c7050ff6ca2140ed15c68d4bd Author: Pavel Butsykin <pbutsy...@virtuozzo.com> Date: Tue May 21 18:47:41 2019 +0300
fs/fuse kio: add retry counter for kio requests This counter will be useful for displaying in requests statistics info. Signed-off-by: Pavel Butsykin <pbutsy...@virtuozzo.com> ===================== Patchset description: Statistics for vstorage kernel fast-path Vstorage provides plenty of statistics information via 'vstorage -c cl mnt-top', but when it comes kernel fast-path, it doesn't work. All because mnt-top command collects information from .vstorage.info directory, where vstorage-mount provides a lot of different statistical information in the form of files, but it was not implemented for for fast-path. This patch-set is aimed to implementation of the support of some statistics inforamtion files from .vstorage.info: cs_stats fstat fstat_lat iostat requests Which will be located at "/sys/fs/fuse/connections/*mnt_id*/kio_stat/". This will be enough to maintain vstorage mnt-top command for fast-path mount points. https://pmc.acronis.com/browse/VSTOR-20979 Pavel Butsykin (15): fs/fuse: add conn_ctl to fuse_conn struct fs/fuse kio: create sysfs stat directory fs/fuse kio: implement iostat fs/fuse kio: make common interface pcs_kio_file_list() for listing kio files fs/fuse kio: make common interface pcs_kio_req_list() for listing kio reqs fs/fuse kio: add retry counter for kio requests fs/fuse kio: implement pcs_strerror() fs/fuse kio: implement requests statistics fs/fuse kio: implement fstat statistics info fs/fuse kio: implement fstat_lat statistics info fs/fuse kio: remove useless pcs_cs initialization fs/fuse kio: implement cs statistics accounting fs/fuse kio: convert rpc state id to string fs/fuse kio: implement cs_stats statistics info fs/fuse kio: add locked cs_get_avg_in_flight() --- fs/fuse/kio/pcs/pcs_cluster.c | 1 + fs/fuse/kio/pcs/pcs_cluster.h | 12 +++++++++++- fs/fuse/kio/pcs/pcs_map.c | 1 + fs/fuse/kio/pcs/pcs_req.c | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/fs/fuse/kio/pcs/pcs_cluster.c b/fs/fuse/kio/pcs/pcs_cluster.c index a73120c97e5e..082acea9affa 100644 --- a/fs/fuse/kio/pcs/pcs_cluster.c +++ b/fs/fuse/kio/pcs/pcs_cluster.c @@ -38,6 +38,7 @@ void pcs_sreq_complete(struct pcs_int_request *sreq) * and, most likely, resubmit request. */ if (ireq_check_redo(sreq)) { + ireq_retry_inc(ireq); if (sreq->type != PCS_IREQ_CUSTOM) { map_notify_soft_error(sreq); diff --git a/fs/fuse/kio/pcs/pcs_cluster.h b/fs/fuse/kio/pcs/pcs_cluster.h index 73af9359706e..8369f9b00cfa 100644 --- a/fs/fuse/kio/pcs/pcs_cluster.h +++ b/fs/fuse/kio/pcs/pcs_cluster.h @@ -18,7 +18,7 @@ struct pcs_fuse_exec_ctx { struct bio_vec inline_bvec[FUSE_MAX_PAGES_PER_REQ]; } io; struct { - unsigned retry_cnt; + atomic_t retry_cnt; pcs_error_t last_err; } ctl; }; @@ -29,6 +29,16 @@ struct pcs_fuse_req { struct pcs_fuse_exec_ctx exec; /* Zero initialized context */ }; +static inline void ireq_retry_inc(struct pcs_int_request *ireq) +{ + if (likely(!ireq->completion_data.parent && ireq->completion_data.priv)) { + struct pcs_fuse_req *r = ireq->completion_data.priv; + atomic_inc(&r->exec.ctl.retry_cnt); + return; + } + WARN_ON_ONCE(1); +} + struct pcs_fuse_cluster { struct pcs_cluster_core cc; struct fuse_conn *fc; diff --git a/fs/fuse/kio/pcs/pcs_map.c b/fs/fuse/kio/pcs/pcs_map.c index b5153e5349ea..59de04be0512 100644 --- a/fs/fuse/kio/pcs/pcs_map.c +++ b/fs/fuse/kio/pcs/pcs_map.c @@ -2881,6 +2881,7 @@ static void pcs_flushreq_complete(struct pcs_int_request * sreq) sreq->flags &= ~IREQ_F_ONCE; spin_unlock(&m->lock); + ireq_retry_inc(ireq); map_notify_error(m, sreq, &ioh->map_version, sreq->flushreq.csl); pcs_deaccount_ireq(sreq, &sreq->error); pcs_clear_error(&sreq->error); diff --git a/fs/fuse/kio/pcs/pcs_req.c b/fs/fuse/kio/pcs/pcs_req.c index 9e4dc5e7b15d..55fb39e91b93 100644 --- a/fs/fuse/kio/pcs/pcs_req.c +++ b/fs/fuse/kio/pcs/pcs_req.c @@ -137,6 +137,7 @@ noinline void pcs_ireq_queue_fail(struct list_head *queue, int error) ireq_on_error(ireq); if (!(ireq->flags & IREQ_F_FATAL)) { + ireq_retry_inc(ireq); pcs_clear_error(&ireq->error); FUSE_KTRACE(ireq->cc->fc, "requeue truncate(%d) %llu@" DENTRY_FMT, ireq->type, _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel