📄 obd_class.h
字号:
if (obd == NULL) RETURN(-EINVAL); OBD_CHECK_OP(obd, statfs, -EOPNOTSUPP); OBD_COUNTER_INCREMENT(obd, statfs); CDEBUG(D_SUPER, "%s: osfs %p age "LPU64", max_age "LPU64"\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs_age, max_age); if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { rc = OBP(obd, statfs_async)(obd, oinfo, max_age, rqset); } else { CDEBUG(D_SUPER,"%s: use %p cache blocks "LPU64"/"LPU64 " objects "LPU64"/"LPU64"\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); spin_lock(&obd->obd_osfs_lock); memcpy(oinfo->oi_osfs, &obd->obd_osfs, sizeof(*oinfo->oi_osfs)); spin_unlock(&obd->obd_osfs_lock); if (oinfo->oi_cb_up) oinfo->oi_cb_up(oinfo, 0); } RETURN(rc);}static inline int obd_statfs_rqset(struct obd_device *obd, struct obd_statfs *osfs, __u64 max_age, __u32 flags){ struct ptlrpc_request_set *set = NULL; struct obd_info oinfo = { { { 0 } } }; int rc = 0; ENTRY; set = ptlrpc_prep_set(); if (set == NULL) RETURN(-ENOMEM); oinfo.oi_osfs = osfs; oinfo.oi_flags = flags; rc = obd_statfs_async(obd, &oinfo, max_age, set); if (rc == 0) rc = ptlrpc_set_wait(set); ptlrpc_set_destroy(set); RETURN(rc);}/* @max_age is the oldest time in jiffies that we accept using a cached data. * If the cache is older than @max_age we will get a new value from the * target. Use a value of "cfs_time_current() + HZ" to guarantee freshness. */static inline int obd_statfs(struct obd_device *obd, struct obd_statfs *osfs, __u64 max_age, __u32 flags){ int rc = 0; ENTRY; if (obd == NULL) RETURN(-EINVAL); OBD_CHECK_OP(obd, statfs, -EOPNOTSUPP); OBD_COUNTER_INCREMENT(obd, statfs); CDEBUG(D_SUPER, "osfs "LPU64", max_age "LPU64"\n", obd->obd_osfs_age, max_age); if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { rc = OBP(obd, statfs)(obd, osfs, max_age, flags); if (rc == 0) { spin_lock(&obd->obd_osfs_lock); memcpy(&obd->obd_osfs, osfs, sizeof(obd->obd_osfs)); obd->obd_osfs_age = cfs_time_current_64(); spin_unlock(&obd->obd_osfs_lock); } } else { CDEBUG(D_SUPER,"%s: use %p cache blocks "LPU64"/"LPU64 " objects "LPU64"/"LPU64"\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); spin_lock(&obd->obd_osfs_lock); memcpy(osfs, &obd->obd_osfs, sizeof(*osfs)); spin_unlock(&obd->obd_osfs_lock); } RETURN(rc);}static inline int obd_sync(struct obd_export *exp, struct obdo *oa, struct lov_stripe_md *ea, obd_size start, obd_size end){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, sync, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, sync); rc = OBP(exp->exp_obd, sync)(exp, oa, ea, start, end); RETURN(rc);}static inline int obd_punch_rqset(struct obd_export *exp, struct obd_info *oinfo, struct obd_trans_info *oti){ struct ptlrpc_request_set *set = NULL; int rc; ENTRY; EXP_CHECK_OP(exp, punch); EXP_COUNTER_INCREMENT(exp, punch); set = ptlrpc_prep_set(); if (set == NULL) RETURN(-ENOMEM); rc = OBP(exp->exp_obd, punch)(exp, oinfo, oti, set); if (rc == 0) rc = ptlrpc_set_wait(set); ptlrpc_set_destroy(set); RETURN(rc);}static inline int obd_punch(struct obd_export *exp, struct obd_info *oinfo, struct obd_trans_info *oti, struct ptlrpc_request_set *rqset){ int rc; ENTRY; EXP_CHECK_OP(exp, punch); EXP_COUNTER_INCREMENT(exp, punch); rc = OBP(exp->exp_obd, punch)(exp, oinfo, oti, rqset); RETURN(rc);}static inline int obd_brw(int cmd, struct obd_export *exp, struct obd_info *oinfo, obd_count oa_bufs, struct brw_page *pg, struct obd_trans_info *oti){ int rc; ENTRY; EXP_CHECK_OP(exp, brw); EXP_COUNTER_INCREMENT(exp, brw); if (!(cmd & (OBD_BRW_RWMASK | OBD_BRW_CHECK))) { CERROR("obd_brw: cmd must be OBD_BRW_READ, OBD_BRW_WRITE, " "or OBD_BRW_CHECK\n"); LBUG(); } rc = OBP(exp->exp_obd, brw)(cmd, exp, oinfo, oa_bufs, pg, oti); RETURN(rc);}static inline int obd_brw_async(int cmd, struct obd_export *exp, struct obd_info *oinfo, obd_count oa_bufs, struct brw_page *pg, struct obd_trans_info *oti, struct ptlrpc_request_set *set){ int rc; ENTRY; EXP_CHECK_OP(exp, brw_async); EXP_COUNTER_INCREMENT(exp, brw_async); if (!(cmd & OBD_BRW_RWMASK)) { CERROR("obd_brw: cmd must be OBD_BRW_READ or OBD_BRW_WRITE\n"); LBUG(); } rc = OBP(exp->exp_obd, brw_async)(cmd, exp, oinfo, oa_bufs, pg,oti,set); RETURN(rc);}static inline int obd_brw_rqset(int cmd, struct obd_export *exp, struct obdo *oa, struct lov_stripe_md *lsm, obd_count oa_bufs, struct brw_page *pg, struct obd_trans_info *oti){ struct ptlrpc_request_set *set = NULL; struct obd_info oinfo = { { { 0 } } }; int rc = 0; ENTRY; set = ptlrpc_prep_set(); if (set == NULL) RETURN(-ENOMEM); oinfo.oi_oa = oa; oinfo.oi_md = lsm; rc = obd_brw_async(cmd, exp, &oinfo, oa_bufs, pg, oti, set); if (rc == 0) { rc = ptlrpc_set_wait(set); if (rc) CERROR("error from callback: rc = %d\n", rc); } else { CDEBUG(rc == -ENOSPC ? D_INODE : D_ERROR, "error from obd_brw_async: rc = %d\n", rc); } ptlrpc_set_destroy(set); RETURN(rc);}static inline int obd_prep_async_page(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, cfs_page_t *page, obd_off offset, struct obd_async_page_ops *ops, void *data, void **res, int nocache, struct lustre_handle *lockh){ int ret; ENTRY; OBD_CHECK_OP(exp->exp_obd, prep_async_page, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, prep_async_page); ret = OBP(exp->exp_obd, prep_async_page)(exp, lsm, loi, page, offset, ops, data, res, nocache, lockh); RETURN(ret);}static inline int obd_queue_async_io(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, void *cookie, int cmd, obd_off off, int count, obd_flag brw_flags, obd_flag async_flags){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, queue_async_io, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, queue_async_io); LASSERT(cmd & OBD_BRW_RWMASK); rc = OBP(exp->exp_obd, queue_async_io)(exp, lsm, loi, cookie, cmd, off, count, brw_flags, async_flags); RETURN(rc);}static inline int obd_set_async_flags(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, void *cookie, obd_flag async_flags){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, set_async_flags, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, set_async_flags); rc = OBP(exp->exp_obd, set_async_flags)(exp, lsm, loi, cookie, async_flags); RETURN(rc);}static inline int obd_queue_group_io(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, struct obd_io_group *oig, void *cookie, int cmd, obd_off off, int count, obd_flag brw_flags, obd_flag async_flags){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, queue_group_io, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, queue_group_io); LASSERT(cmd & OBD_BRW_RWMASK); rc = OBP(exp->exp_obd, queue_group_io)(exp, lsm, loi, oig, cookie, cmd, off, count, brw_flags, async_flags); RETURN(rc);}static inline int obd_trigger_group_io(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, struct obd_io_group *oig){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, trigger_group_io, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, trigger_group_io); rc = OBP(exp->exp_obd, trigger_group_io)(exp, lsm, loi, oig); RETURN(rc);}static inline int obd_teardown_async_page(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, void *cookie){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, teardown_async_page, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, teardown_async_page); rc = OBP(exp->exp_obd, teardown_async_page)(exp, lsm, loi, cookie); RETURN(rc);}static inline int obd_preprw(int cmd, struct obd_export *exp, struct obdo *oa, int objcount, struct obd_ioobj *obj, int niocount, struct niobuf_remote *remote, struct niobuf_local *local, struct obd_trans_info *oti){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, preprw, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, preprw); rc = OBP(exp->exp_obd, preprw)(cmd, exp, oa, objcount, obj, niocount, remote, local, oti); RETURN(rc);}static inline int obd_commitrw(int cmd, struct obd_export *exp, struct obdo *oa, int objcount, struct obd_ioobj *obj, int niocount, struct niobuf_local *local, struct obd_trans_info *oti, int rc){ ENTRY; OBD_CHECK_OP(exp->exp_obd, commitrw, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, commitrw); rc = OBP(exp->exp_obd, commitrw)(cmd, exp, oa, objcount, obj, niocount, local, oti, rc); RETURN(rc);}static inline int obd_merge_lvb(struct obd_export *exp, struct lov_stripe_md *lsm, struct ost_lvb *lvb, int kms_only){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, merge_lvb, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, merge_lvb); rc = OBP(exp->exp_obd, merge_lvb)(exp, lsm, lvb, kms_only); RETURN(rc);}static inline int obd_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm, obd_off size, int shrink){ int rc; ENTRY; OBD_CHECK_OP(exp->exp_obd, adjust_kms, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, adjust_kms); rc = OBP(exp->exp_obd, adjust_kms)(exp, lsm, size, shrink); RETURN(rc);}static inline int obd_iocontrol(unsigned int cmd, struct obd_export *exp, int len, void *karg, void *uarg){ int rc; ENTRY; EXP_CHECK_OP(exp, iocontrol); EXP_COUNTER_INCREMENT(exp, iocontrol);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -