From: John L. Hammond Date: Mon, 15 Sep 2014 20:50:33 +0000 (-0500) Subject: LU-5557 mdt: track reint operations in MDS service stats X-Git-Tag: 2.6.54~23 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=f347b3cd6168c291d90565f8cd8505ed69a927f8 LU-5557 mdt: track reint operations in MDS service stats In mdt_reint_rec() tally the appropriate ptlrpc service stat (MDS_REINT_{CREATE,SETATTR,...}) for the requested operation. Signed-off-by: John L. Hammond Change-Id: Idda44baa5720b1b3d7d38402c9abe322f3645b7f Reviewed-on: http://review.whamcloud.com/11924 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Jian Yu Reviewed-by: Oleg Drokin --- diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h index 44e4da2..4e992e6 100644 --- a/lustre/include/lprocfs_status.h +++ b/lustre/include/lprocfs_status.h @@ -351,7 +351,7 @@ enum { #define PTLRPC_FIRST_CNTR PTLRPC_REQWAIT_CNTR -enum { +enum lprocfs_extra_opc { LDLM_GLIMPSE_ENQUEUE = 0, LDLM_PLAIN_ENQUEUE, LDLM_EXTENT_ENQUEUE, diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 0b508d6..5a762e1 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -46,6 +46,7 @@ #define DEBUG_SUBSYSTEM S_MDS +#include #include "mdt_internal.h" #include @@ -2022,28 +2023,68 @@ static int mdt_reint_migrate(struct mdt_thread_info *info, return mdt_reint_rename_or_migrate(info, lhc, MRL_MIGRATE); } -typedef int (*mdt_reinter)(struct mdt_thread_info *info, - struct mdt_lock_handle *lhc); - -static mdt_reinter reinters[REINT_MAX] = { - [REINT_SETATTR] = mdt_reint_setattr, - [REINT_CREATE] = mdt_reint_create, - [REINT_LINK] = mdt_reint_link, - [REINT_UNLINK] = mdt_reint_unlink, - [REINT_RENAME] = mdt_reint_rename, - [REINT_OPEN] = mdt_reint_open, - [REINT_SETXATTR] = mdt_reint_setxattr, - [REINT_RMENTRY] = mdt_reint_unlink, - [REINT_MIGRATE] = mdt_reint_migrate, +struct mdt_reinter { + int (*mr_handler)(struct mdt_thread_info *, struct mdt_lock_handle *); + enum lprocfs_extra_opc mr_extra_opc; +}; + +static const struct mdt_reinter mdt_reinters[] = { + [REINT_SETATTR] = { + .mr_handler = &mdt_reint_setattr, + .mr_extra_opc = MDS_REINT_SETATTR, + }, + [REINT_CREATE] = { + .mr_handler = &mdt_reint_create, + .mr_extra_opc = MDS_REINT_CREATE, + }, + [REINT_LINK] = { + .mr_handler = &mdt_reint_link, + .mr_extra_opc = MDS_REINT_LINK, + }, + [REINT_UNLINK] = { + .mr_handler = &mdt_reint_unlink, + .mr_extra_opc = MDS_REINT_UNLINK, + }, + [REINT_RENAME] = { + .mr_handler = &mdt_reint_rename, + .mr_extra_opc = MDS_REINT_RENAME, + }, + [REINT_OPEN] = { + .mr_handler = &mdt_reint_open, + .mr_extra_opc = MDS_REINT_OPEN, + }, + [REINT_SETXATTR] = { + .mr_handler = &mdt_reint_setxattr, + .mr_extra_opc = MDS_REINT_SETXATTR, + }, + [REINT_RMENTRY] = { + .mr_handler = &mdt_reint_unlink, + .mr_extra_opc = MDS_REINT_UNLINK, + }, + [REINT_MIGRATE] = { + .mr_handler = &mdt_reint_migrate, + .mr_extra_opc = MDS_REINT_RENAME, + }, }; int mdt_reint_rec(struct mdt_thread_info *info, - struct mdt_lock_handle *lhc) + struct mdt_lock_handle *lhc) { - int rc; - ENTRY; + const struct mdt_reinter *mr; + int rc; + ENTRY; - rc = reinters[info->mti_rr.rr_opcode](info, lhc); + if (!(info->mti_rr.rr_opcode < ARRAY_SIZE(mdt_reinters))) + RETURN(-EPROTO); - RETURN(rc); + mr = &mdt_reinters[info->mti_rr.rr_opcode]; + if (mr->mr_handler == NULL) + RETURN(-EPROTO); + + rc = (*mr->mr_handler)(info, lhc); + + lprocfs_counter_incr(ptlrpc_req2svc(mdt_info_req(info))->srv_stats, + PTLRPC_LAST_CNTR + mr->mr_extra_opc); + + RETURN(rc); }