+ case LL_IOC_GETOBDCOUNT: {
+ int count;
+
+ if (cfs_copy_from_user(&count, (int *)arg, sizeof(int)))
+ RETURN(-EFAULT);
+
+ if (!count) {
+ /* get ost count */
+ struct lov_obd *lov = &sbi->ll_dt_exp->exp_obd->u.lov;
+ count = lov->desc.ld_tgt_count;
+ } else {
+ /* get mdt count */
+ struct lmv_obd *lmv = &sbi->ll_md_exp->exp_obd->u.lmv;
+ count = lmv->desc.ld_tgt_count;
+ }
+
+ if (cfs_copy_to_user((int *)arg, &count, sizeof(int)))
+ RETURN(-EFAULT);
+
+ RETURN(0);
+ }
+ case LL_IOC_PATH2FID:
+ if (cfs_copy_to_user((void *)arg, ll_inode2fid(inode),
+ sizeof(struct lu_fid)))
+ RETURN(-EFAULT);
+ RETURN(0);
+ case OBD_IOC_CHANGELOG_SEND:
+ case OBD_IOC_CHANGELOG_CLEAR:
+ rc = copy_and_ioctl(cmd, sbi->ll_md_exp, (void *)arg,
+ sizeof(struct ioc_changelog));
+ RETURN(rc);
+ case OBD_IOC_FID2PATH:
+ RETURN(ll_fid2path(ll_i2mdexp(inode), (void *)arg));
+ case LL_IOC_HSM_CT_START:
+ rc = copy_and_ioctl(cmd, sbi->ll_md_exp, (void *)arg,
+ sizeof(struct lustre_kernelcomm));
+ RETURN(rc);
+