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;
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);
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;
};
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,
&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,
&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,
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);
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.
;;
*) 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
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"
# 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 =================================="