Whamcloud - gitweb
LU-11375 mdc: use old statfs format 62/33162/7
authorAlex Zhuravlev <bzzz@whamcloud.com>
Thu, 13 Sep 2018 18:07:08 +0000 (21:07 +0300)
committerOleg Drokin <green@whamcloud.com>
Wed, 10 Oct 2018 01:51:05 +0000 (01:51 +0000)
when the client talks to old server with no support
for aggregated statfs

Test-Parameters: clientjob=lustre-b2_10 clientbuildno=136 testgroup=review-ldiskfs

Change-Id: I447b312d46db56da152f62835b3f98401f997cf0
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/33162
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Tested-by: James Nunez <jnunez@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Tested-by: James Simmons <uja.ornl@yahoo.com>
lustre/include/lustre_req_layout.h
lustre/mdc/mdc_request.c
lustre/mdt/mdt_handler.c
lustre/ptlrpc/layout.c
lustre/tests/sanity.sh

index 6a2c154..8895f42 100644 (file)
@@ -145,6 +145,7 @@ extern struct req_format RQF_FLD_READ;
 extern struct req_format RQF_MDS_CONNECT;
 extern struct req_format RQF_MDS_DISCONNECT;
 extern struct req_format RQF_MDS_STATFS;
+extern struct req_format RQF_MDS_STATFS_NEW;
 extern struct req_format RQF_MDS_GET_ROOT;
 extern struct req_format RQF_MDS_SYNC;
 extern struct req_format RQF_MDS_GETXATTR;
index 3de6d18..bd723d4 100644 (file)
@@ -1486,26 +1486,31 @@ static int mdc_statfs(const struct lu_env *env,
                       struct obd_export *exp, struct obd_statfs *osfs,
                      time64_t max_age, __u32 flags)
 {
-        struct obd_device     *obd = class_exp2obd(exp);
-        struct ptlrpc_request *req;
-        struct obd_statfs     *msfs;
-        struct obd_import     *imp = NULL;
-       int                    rc;
-        ENTRY;
+       struct obd_device *obd = class_exp2obd(exp);
+       struct req_format *fmt;
+       struct ptlrpc_request *req;
+       struct obd_statfs *msfs;
+       struct obd_import *imp = NULL;
+       int rc;
+       ENTRY;
 
         /*
          * Since the request might also come from lprocfs, so we need
          * sync this with client_disconnect_export Bug15684
          */
        down_read(&obd->u.cli.cl_sem);
-        if (obd->u.cli.cl_import)
-                imp = class_import_get(obd->u.cli.cl_import);
+       if (obd->u.cli.cl_import)
+               imp = class_import_get(obd->u.cli.cl_import);
        up_read(&obd->u.cli.cl_sem);
-        if (!imp)
-                RETURN(-ENODEV);
-
-       req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_STATFS,
-                                       LUSTRE_MDS_VERSION, MDS_STATFS);
+       if (!imp)
+               RETURN(-ENODEV);
+
+       fmt = &RQF_MDS_STATFS;
+       if ((exp_connect_flags2(exp) & OBD_CONNECT2_SUM_STATFS) &&
+           (flags & OBD_STATFS_SUM))
+               fmt = &RQF_MDS_STATFS_NEW;
+       req = ptlrpc_request_alloc_pack(imp, fmt, LUSTRE_MDS_VERSION,
+                                       MDS_STATFS);
        if (req == NULL)
                GOTO(output, rc = -ENOMEM);
 
index ace6f1f..5bf3306 100644 (file)
@@ -436,8 +436,13 @@ static int mdt_statfs(struct tgt_session_info *tsi)
        if (!osfs)
                GOTO(out, rc = -EPROTO);
 
-       if (mdt_is_sum_statfs_client(req->rq_export))
+       if (mdt_is_sum_statfs_client(req->rq_export) &&
+               lustre_packed_msg_size(req->rq_reqmsg) ==
+               req_capsule_fmt_size(req->rq_reqmsg->lm_magic,
+                                    &RQF_MDS_STATFS_NEW, RCL_CLIENT)) {
+               req_capsule_extend(info->mti_pill, &RQF_MDS_STATFS_NEW);
                reqbody = req_capsule_client_get(info->mti_pill, &RMF_MDT_BODY);
+       }
 
        if (reqbody && reqbody->mbo_valid & OBD_MD_FLAGSTATFS)
                msf = &mdt->mdt_sum_osfs;
index 9edfd18..5d33739 100644 (file)
@@ -719,23 +719,24 @@ static const struct req_msg_field *obd_lfsck_reply[] = {
 };
 
 static struct req_format *req_formats[] = {
-        &RQF_OBD_PING,
-        &RQF_OBD_SET_INFO,
+       &RQF_OBD_PING,
+       &RQF_OBD_SET_INFO,
        &RQF_OBD_IDX_READ,
-        &RQF_SEC_CTX,
-        &RQF_MGS_TARGET_REG,
+       &RQF_SEC_CTX,
+       &RQF_MGS_TARGET_REG,
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 13, 53, 0)
-        &RQF_MGS_SET_INFO,
+       &RQF_MGS_SET_INFO,
 #endif
-        &RQF_MGS_CONFIG_READ,
-        &RQF_SEQ_QUERY,
-        &RQF_FLD_QUERY,
+       &RQF_MGS_CONFIG_READ,
+       &RQF_SEQ_QUERY,
+       &RQF_FLD_QUERY,
        &RQF_FLD_READ,
-        &RQF_MDS_CONNECT,
-        &RQF_MDS_DISCONNECT,
-        &RQF_MDS_GET_INFO,
+       &RQF_MDS_CONNECT,
+       &RQF_MDS_DISCONNECT,
+       &RQF_MDS_GET_INFO,
        &RQF_MDS_GET_ROOT,
        &RQF_MDS_STATFS,
+       &RQF_MDS_STATFS_NEW,
        &RQF_MDS_GETATTR,
        &RQF_MDS_GETATTR_NAME,
        &RQF_MDS_GETXATTR,
@@ -766,21 +767,21 @@ static struct req_format *req_formats[] = {
        &RQF_MDS_HSM_REQUEST,
        &RQF_MDS_SWAP_LAYOUTS,
        &RQF_OUT_UPDATE,
-        &RQF_OST_CONNECT,
-        &RQF_OST_DISCONNECT,
-        &RQF_OST_QUOTACTL,
-        &RQF_OST_GETATTR,
-        &RQF_OST_SETATTR,
-        &RQF_OST_CREATE,
-        &RQF_OST_PUNCH,
-        &RQF_OST_SYNC,
-        &RQF_OST_DESTROY,
-        &RQF_OST_BRW_READ,
-        &RQF_OST_BRW_WRITE,
-        &RQF_OST_STATFS,
-        &RQF_OST_SET_GRANT_INFO,
+       &RQF_OST_CONNECT,
+       &RQF_OST_DISCONNECT,
+       &RQF_OST_QUOTACTL,
+       &RQF_OST_GETATTR,
+       &RQF_OST_SETATTR,
+       &RQF_OST_CREATE,
+       &RQF_OST_PUNCH,
+       &RQF_OST_SYNC,
+       &RQF_OST_DESTROY,
+       &RQF_OST_BRW_READ,
+       &RQF_OST_BRW_WRITE,
+       &RQF_OST_STATFS,
+       &RQF_OST_SET_GRANT_INFO,
        &RQF_OST_GET_INFO,
-        &RQF_OST_GET_INFO_LAST_ID,
+       &RQF_OST_GET_INFO_LAST_ID,
        &RQF_OST_GET_INFO_LAST_FID,
        &RQF_OST_SET_INFO_LAST_FID,
        &RQF_OST_GET_INFO_FIEMAP,
@@ -803,10 +804,10 @@ static struct req_format *req_formats[] = {
        &RQF_LDLM_INTENT_GETXATTR,
        &RQF_LDLM_INTENT_QUOTA,
        &RQF_QUOTA_DQACQ,
-        &RQF_LLOG_ORIGIN_HANDLE_CREATE,
-        &RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK,
-        &RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK,
-        &RQF_LLOG_ORIGIN_HANDLE_READ_HEADER,
+       &RQF_LLOG_ORIGIN_HANDLE_CREATE,
+       &RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK,
+       &RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK,
+       &RQF_LLOG_ORIGIN_HANDLE_READ_HEADER,
        &RQF_CONNECT,
        &RQF_LFSCK_NOTIFY,
        &RQF_LFSCK_QUERY,
@@ -1361,9 +1362,13 @@ struct req_format RQF_MDS_GET_ROOT =
 EXPORT_SYMBOL(RQF_MDS_GET_ROOT);
 
 struct req_format RQF_MDS_STATFS =
-       DEFINE_REQ_FMT0("MDS_STATFS", mdt_body_only, obd_statfs_server);
+       DEFINE_REQ_FMT0("MDS_STATFS", empty, obd_statfs_server);
 EXPORT_SYMBOL(RQF_MDS_STATFS);
 
+struct req_format RQF_MDS_STATFS_NEW =
+       DEFINE_REQ_FMT0("MDS_STATFS_NEW", mdt_body_only, obd_statfs_server);
+EXPORT_SYMBOL(RQF_MDS_STATFS_NEW);
+
 struct req_format RQF_MDS_SYNC =
         DEFINE_REQ_FMT0("MDS_SYNC", mdt_body_capa, mdt_body_only);
 EXPORT_SYMBOL(RQF_MDS_SYNC);
@@ -2320,12 +2325,13 @@ __u32 req_capsule_fmt_size(__u32 magic, const struct req_format *fmt,
        if (size == 0)
                return size;
 
-        for (; i < fmt->rf_fields[loc].nr; ++i)
-                if (fmt->rf_fields[loc].d[i]->rmf_size != -1)
-                        size += cfs_size_round(fmt->rf_fields[loc].d[i]->
-                                               rmf_size);
-        return size;
+       for (; i < fmt->rf_fields[loc].nr; ++i)
+               if (fmt->rf_fields[loc].d[i]->rmf_size != -1)
+                       size += cfs_size_round(fmt->rf_fields[loc].d[i]->
+                                              rmf_size);
+       return size;
 }
+EXPORT_SYMBOL(req_capsule_fmt_size);
 
 /**
  * Changes the format of an RPC.
index 948adca..a74c2ea 100755 (executable)
@@ -10680,7 +10680,6 @@ check_stats() {
                 ;;
        *) error "Wrong facet '$facet'" ;;
        esac
-       echo $res
        [ "$res" ] || error "The counter for $op on $facet was not incremented"
        # if the argument $3 is zero, it means any stat increment is ok.
        if [[ $want -gt 0 ]]; then
@@ -10739,6 +10738,8 @@ test_133a() {
 run_test 133a "Verifying MDT stats ========================================"
 
 test_133b() {
+       local res
+
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        remote_ost_nodsh && skip "remote OST with nodsh"
        remote_mds_nodsh && skip "remote MDS with nodsh"
@@ -10771,9 +10772,25 @@ test_133b() {
        # Sleep to avoid a cached response.
        #define OBD_STATFS_CACHE_SECONDS 1
        sleep 2
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.stats=clear
        $LFS df || error "lfs failed"
        check_stats $SINGLEMDS "statfs" 1
 
+       # check aggregated statfs (LU-10018)
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.54) ] &&
+               return 0
+       [ $(lustre_version_code client) -lt $(version_code 2.11.54) ] &&
+               return 0
+       sleep 2
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.stats=clear
+       df $DIR
+       check_stats $SINGLEMDS "statfs" 1
+       res=$(do_facet ost1 \
+             $LCTL get_param obdfilter.$FSNAME-OST0000.stats | grep "statfs")
+       [ "$res" ] && error "OST got STATFS"
+
        return 0
 }
 run_test 133b "Verifying extra MDT stats =================================="