tmp->lum_stripe_count = 0;
tmp->lum_stripe_offset = mdt_index;
for (i = 0; i < stripe_count; i++) {
- struct lu_fid *fid;
+ struct lu_fid fid;
- fid = &lmm->lmv_md_v1.lmv_stripe_fids[i];
- mdt_index = ll_get_mdt_idx_by_fid(sbi, fid);
+ fid_le_to_cpu(&fid, &lmm->lmv_md_v1.lmv_stripe_fids[i]);
+ mdt_index = ll_get_mdt_idx_by_fid(sbi, &fid);
if (mdt_index < 0)
GOTO(out_tmp, rc = mdt_index);
tmp->lum_objects[i].lum_mds = mdt_index;
- tmp->lum_objects[i].lum_fid = *fid;
+ tmp->lum_objects[i].lum_fid = fid;
tmp->lum_stripe_count++;
}
rc = copy_and_ioctl(cmd, sbi->ll_md_exp, (void *)arg,
sizeof(struct ioc_changelog));
RETURN(rc);
- case OBD_IOC_FID2PATH:
+ case OBD_IOC_FID2PATH:
RETURN(ll_fid2path(inode, (void *)arg));
+ case LL_IOC_FID2MDTIDX: {
+ struct obd_export *exp = ll_i2mdexp(inode);
+ struct lu_fid fid;
+ __u32 index;
+
+ if (copy_from_user(&fid, (const struct lu_fid __user *)arg,
+ sizeof(fid)))
+ RETURN(-EFAULT);
+
+ /* Call mdc_iocontrol */
+ rc = obd_iocontrol(LL_IOC_FID2MDTIDX, exp, sizeof(fid), &fid,
+ &index);
+ if (rc != 0)
+ RETURN(rc);
+
+ RETURN(index);
+ }
case LL_IOC_HSM_REQUEST: {
struct hsm_user_request *hur;
ssize_t totalsize;