i=adilger
i=shadow
add lsm argument to obd_get_info. For some get_info calls the lsm was being sent as part of the key which was a hack. Now lsm can be sent as an argument.
14 files changed:
int (*o_iocontrol)(unsigned int cmd, struct obd_export *exp, int len,
void *karg, void *uarg);
int (*o_get_info)(struct obd_export *, __u32 keylen, void *key,
int (*o_iocontrol)(unsigned int cmd, struct obd_export *exp, int len,
void *karg, void *uarg);
int (*o_get_info)(struct obd_export *, __u32 keylen, void *key,
- __u32 *vallen, void *val);
+ __u32 *vallen, void *val, struct lov_stripe_md *lsm);
int (*o_set_info_async)(struct obd_export *, __u32 keylen, void *key,
__u32 vallen, void *val,
struct ptlrpc_request_set *set);
int (*o_set_info_async)(struct obd_export *, __u32 keylen, void *key,
__u32 vallen, void *val,
struct ptlrpc_request_set *set);
}
static inline int obd_get_info(struct obd_export *exp, __u32 keylen,
}
static inline int obd_get_info(struct obd_export *exp, __u32 keylen,
- void *key, __u32 *vallen, void *val)
+ void *key, __u32 *vallen, void *val,
+ struct lov_stripe_md *lsm)
EXP_CHECK_DT_OP(exp, get_info);
EXP_COUNTER_INCREMENT(exp, get_info);
EXP_CHECK_DT_OP(exp, get_info);
EXP_COUNTER_INCREMENT(exp, get_info);
- rc = OBP(exp->exp_obd, get_info)(exp, keylen, key, vallen, val);
+ rc = OBP(exp->exp_obd, get_info)(exp, keylen, key, vallen, val, lsm);
struct {
char name[16];
struct ldlm_lock *lock;
struct {
char name[16];
struct ldlm_lock *lock;
- struct lov_stripe_md *lsm;
- } key = { .name = KEY_LOCK_TO_STRIPE, .lock = lock, .lsm = lsm };
+ } key = { .name = KEY_LOCK_TO_STRIPE, .lock = lock };
__u32 stripe, vallen = sizeof(stripe);
int rc;
ENTRY;
__u32 stripe, vallen = sizeof(stripe);
int rc;
ENTRY;
RETURN(0);
/* get our offset in the lov */
RETURN(0);
/* get our offset in the lov */
- rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe);
+ rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe, lsm);
if (rc != 0) {
CERROR("obd_get_info: rc = %d\n", rc);
LBUG();
if (rc != 0) {
CERROR("obd_get_info: rc = %d\n", rc);
LBUG();
ENTRY;
rc = obd_get_info(dt_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC,
ENTRY;
rc = obd_get_info(dt_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC,
+ &valsize, &desc, NULL);
struct {
char name[16];
struct ldlm_lock *lock;
struct {
char name[16];
struct ldlm_lock *lock;
- struct lov_stripe_md *lsm;
- } key = { .name = KEY_LOCK_TO_STRIPE, .lock = lock, .lsm = lsm };
+ } key = { .name = KEY_LOCK_TO_STRIPE, .lock = lock };
__u32 stripe, vallen = sizeof(stripe);
struct lov_oinfo *loinfo;
int rc;
__u32 stripe, vallen = sizeof(stripe);
struct lov_oinfo *loinfo;
int rc;
GOTO(check, stripe = 0);
/* get our offset in the lov */
GOTO(check, stripe = 0);
/* get our offset in the lov */
- rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe);
+ rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe, lsm);
if (rc != 0) {
CERROR("obd_get_info: rc = %d\n", rc);
RETURN(rc);
if (rc != 0) {
CERROR("obd_get_info: rc = %d\n", rc);
RETURN(rc);
ENTRY;
rc = obd_get_info(dt_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC,
ENTRY;
rc = obd_get_info(dt_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC,
+ &valsize, &desc, NULL);
size = sizeof(*data);
err = obd_get_info(sbi->ll_md_exp, sizeof(KEY_CONN_DATA),
size = sizeof(*data);
err = obd_get_info(sbi->ll_md_exp, sizeof(KEY_CONN_DATA),
- KEY_CONN_DATA, &size, data);
+ KEY_CONN_DATA, &size, data, NULL);
if (err) {
CERROR("Get connect data failed: %d \n", err);
GOTO(out_md, err);
if (err) {
CERROR("Get connect data failed: %d \n", err);
GOTO(out_md, err);
*lmmsize = obd_size_diskmd(sbi->ll_dt_exp, NULL);
size = sizeof(int);
rc = obd_get_info(sbi->ll_md_exp, sizeof(KEY_MAX_EASIZE),
*lmmsize = obd_size_diskmd(sbi->ll_dt_exp, NULL);
size = sizeof(int);
rc = obd_get_info(sbi->ll_md_exp, sizeof(KEY_MAX_EASIZE),
- KEY_MAX_EASIZE, &size, lmmsize);
+ KEY_MAX_EASIZE, &size, lmmsize, NULL);
if (rc)
CERROR("Get max mdsize error rc %d \n", rc);
if (rc)
CERROR("Get max mdsize error rc %d \n", rc);
}
static int lmv_get_info(struct obd_export *exp, __u32 keylen,
}
static int lmv_get_info(struct obd_export *exp, __u32 keylen,
- void *key, __u32 *vallen, void *val)
+ void *key, __u32 *vallen, void *val, struct lov_stripe_md *lsm)
{
struct obd_device *obd;
struct lmv_obd *lmv;
{
struct obd_device *obd;
struct lmv_obd *lmv;
}
if (!obd_get_info(tgts->ltd_exp, keylen, key,
}
if (!obd_get_info(tgts->ltd_exp, keylen, key,
RETURN(0);
}
RETURN(-EINVAL);
RETURN(0);
}
RETURN(-EINVAL);
/* forwarding this request to first MDS, it should know LOV
* desc. */
rc = obd_get_info(lmv->tgts[0].ltd_exp, keylen, key,
/* forwarding this request to first MDS, it should know LOV
* desc. */
rc = obd_get_info(lmv->tgts[0].ltd_exp, keylen, key,
if (!rc && KEY_IS(KEY_CONN_DATA)) {
exp->exp_connect_flags =
((struct obd_connect_data *)val)->ocd_connect_flags;
if (!rc && KEY_IS(KEY_CONN_DATA)) {
exp->exp_connect_flags =
((struct obd_connect_data *)val)->ocd_connect_flags;
}
static int lov_get_info(struct obd_export *exp, __u32 keylen,
}
static int lov_get_info(struct obd_export *exp, __u32 keylen,
- void *key, __u32 *vallen, void *val)
+ void *key, __u32 *vallen, void *val,
+ struct lov_stripe_md *lsm)
{
struct obd_device *obddev = class_exp2obd(exp);
struct lov_obd *lov = &obddev->u.lov;
{
struct obd_device *obddev = class_exp2obd(exp);
struct lov_obd *lov = &obddev->u.lov;
struct {
char name[16];
struct ldlm_lock *lock;
struct {
char name[16];
struct ldlm_lock *lock;
- struct lov_stripe_md *lsm;
} *data = key;
struct ldlm_res_id *res_id = &data->lock->l_resource->lr_name;
struct lov_oinfo *loi;
} *data = key;
struct ldlm_res_id *res_id = &data->lock->l_resource->lr_name;
struct lov_oinfo *loi;
/* XXX - it's assumed all the locks for deleted OSTs have
* been cancelled. Also, the export for deleted OSTs will
* be NULL and won't match the lock's export. */
/* XXX - it's assumed all the locks for deleted OSTs have
* been cancelled. Also, the export for deleted OSTs will
* be NULL and won't match the lock's export. */
- for (i = 0; i < data->lsm->lsm_stripe_count; i++) {
- loi = data->lsm->lsm_oinfo[i];
+ for (i = 0; i < lsm->lsm_stripe_count; i++) {
+ loi = lsm->lsm_oinfo[i];
if (!lov->lov_tgts[loi->loi_ost_idx])
continue;
if (lov->lov_tgts[loi->loi_ost_idx]->ltd_exp ==
if (!lov->lov_tgts[loi->loi_ost_idx])
continue;
if (lov->lov_tgts[loi->loi_ost_idx]->ltd_exp ==
}
}
LDLM_ERROR(data->lock, "lock on inode without such object");
}
}
LDLM_ERROR(data->lock, "lock on inode without such object");
- dump_lsm(D_ERROR, data->lsm);
+ dump_lsm(D_ERROR, lsm);
GOTO(out, rc = -ENXIO);
} else if (KEY_IS(KEY_LAST_ID)) {
struct obd_id_info *info = val;
GOTO(out, rc = -ENXIO);
} else if (KEY_IS(KEY_LAST_ID)) {
struct obd_id_info *info = val;
if (!tgt || !tgt->ltd_active)
GOTO(out, rc = -ESRCH);
if (!tgt || !tgt->ltd_active)
GOTO(out, rc = -ESRCH);
- rc = obd_get_info(tgt->ltd_exp, keylen, key, &size, info->data);
+ rc = obd_get_info(tgt->ltd_exp, keylen, key, &size, info->data, NULL);
GOTO(out, rc = 0);
} else if (KEY_IS(KEY_LOVDESC)) {
struct lov_desc *desc_ret = val;
GOTO(out, rc = 0);
} else if (KEY_IS(KEY_LOVDESC)) {
struct lov_desc *desc_ret = val;
__u32 len = sizeof(last_id);
oexp = lov->lov_tgts[lump->lmm_objects[i].l_ost_idx]->ltd_exp;
rc = obd_get_info(oexp, sizeof(KEY_LAST_ID), KEY_LAST_ID,
__u32 len = sizeof(last_id);
oexp = lov->lov_tgts[lump->lmm_objects[i].l_ost_idx]->ltd_exp;
rc = obd_get_info(oexp, sizeof(KEY_LAST_ID), KEY_LAST_ID,
if (rc)
RETURN(rc);
if (lump->lmm_objects[i].l_object_id > last_id) {
if (rc)
RETURN(rc);
if (lump->lmm_objects[i].l_object_id > last_id) {
}
int mdc_get_info(struct obd_export *exp, __u32 keylen, void *key,
}
int mdc_get_info(struct obd_export *exp, __u32 keylen, void *key,
- __u32 *vallen, void *val)
+ __u32 *vallen, void *val, struct lov_stripe_md *lsm)
lastid.idx = idx;
lastid.data = &data[off];
rc = obd_get_info(mds->mds_osc_exp, sizeof(KEY_LAST_ID),
lastid.idx = idx;
lastid.data = &data[off];
rc = obd_get_info(mds->mds_osc_exp, sizeof(KEY_LAST_ID),
- KEY_LAST_ID, &size, &lastid);
+ KEY_LAST_ID, &size, &lastid, NULL);
int valsize = sizeof(ost_uuid);
rc = obd_get_info(lov, sizeof(KEY_LOV_IDX), KEY_LOV_IDX,
int valsize = sizeof(ost_uuid);
rc = obd_get_info(lov, sizeof(KEY_LOV_IDX), KEY_LOV_IDX,
+ &valsize, ost_uuid, NULL);
LASSERT(rc >= 0);
RETURN(rc);
LASSERT(rc >= 0);
RETURN(rc);
RETURN(-ENOMEM);
rc = obd_get_info(lov, sizeof(KEY_LOVDESC), KEY_LOVDESC,
RETURN(-ENOMEM);
rc = obd_get_info(lov, sizeof(KEY_LOVDESC), KEY_LOVDESC,
}
static int filter_get_info(struct obd_export *exp, __u32 keylen,
}
static int filter_get_info(struct obd_export *exp, __u32 keylen,
- void *key, __u32 *vallen, void *val)
+ void *key, __u32 *vallen, void *val,
+ struct lov_stripe_md *lsm)
{
struct obd_device *obd;
ENTRY;
{
struct obd_device *obd;
ENTRY;
}
static int osc_get_info(struct obd_export *exp, obd_count keylen,
}
static int osc_get_info(struct obd_export *exp, obd_count keylen,
- void *key, __u32 *vallen, void *val)
+ void *key, __u32 *vallen, void *val, struct lov_stripe_md *lsm)
{
ENTRY;
if (!vallen || !val)
{
ENTRY;
if (!vallen || !val)
}
keylen = req_capsule_get_size(pill, &RMF_SETINFO_KEY, RCL_CLIENT);
}
keylen = req_capsule_get_size(pill, &RMF_SETINFO_KEY, RCL_CLIENT);
- rc = obd_get_info(exp, keylen, key, &replylen, NULL);
+ rc = obd_get_info(exp, keylen, key, &replylen, NULL, NULL);
RETURN(-ENOMEM);
/* call again to fill in the reply buffer */
RETURN(-ENOMEM);
/* call again to fill in the reply buffer */
- rc = obd_get_info(exp, keylen, key, &replylen, reply);
+ rc = obd_get_info(exp, keylen, key, &replylen, reply, NULL);
lustre_msg_set_status(req->rq_repmsg, 0);
RETURN(rc);
lustre_msg_set_status(req->rq_repmsg, 0);
RETURN(rc);