- struct obd_device *obd = data;
- return mgs_fid2dentry(&obd->u.mgs, id, gen);
-}
-
-struct lvfs_callback_ops mgs_lvfs_ops = {
- l_fid2dentry: mgs_lvfs_fid2dentry,
-};
-
-int mgs_fs_setup(struct obd_device *obd, struct vfsmount *mnt)
-{
- struct mgs_obd *mgs = &obd->u.mgs;
- struct lvfs_run_ctxt saved;
- struct dentry *dentry;
- int rc;
- ENTRY;
-
- /* FIXME what's this? Do I need it? */
- rc = cfs_cleanup_group_info();
- if (rc)
- RETURN(rc);
-
- mgs->mgs_vfsmnt = mnt;
- mgs->mgs_sb = mnt->mnt_root->d_inode->i_sb;
-
- fsfilt_setup(obd, mgs->mgs_sb);
-
- OBD_SET_CTXT_MAGIC(&obd->obd_lvfs_ctxt);
- obd->obd_lvfs_ctxt.pwdmnt = mnt;
- obd->obd_lvfs_ctxt.pwd = mnt->mnt_root;
- obd->obd_lvfs_ctxt.fs = get_ds();
- obd->obd_lvfs_ctxt.cb_ops = mgs_lvfs_ops;
-
- push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-
- /* Setup the configs dir */
- dentry = simple_mkdir(current->fs->pwd, mnt, MOUNT_CONFIGS_DIR, 0777, 1);
- if (IS_ERR(dentry)) {
- rc = PTR_ERR(dentry);
- CERROR("cannot create %s directory: rc = %d\n",
- MOUNT_CONFIGS_DIR, rc);
- GOTO(err_pop, rc);
- }
- mgs->mgs_configs_dir = dentry;
-
- /* Need the iopen dir for fid2dentry, required by
- LLOG_ORIGIN_HANDLE_READ_HEADER */
- dentry = lookup_one_len("__iopen__", current->fs->pwd,
- strlen("__iopen__"));
- if (IS_ERR(dentry)) {
- rc = PTR_ERR(dentry);
- CERROR("cannot lookup __iopen__ directory: rc = %d\n", rc);
- GOTO(err_configs, rc);
- }
- mgs->mgs_fid_de = dentry;
- if (!dentry->d_inode || is_bad_inode(dentry->d_inode)) {
- rc = -ENOENT;
- CERROR("__iopen__ directory has no inode? rc = %d\n", rc);
- GOTO(err_fid, rc);
- }
-
-err_pop:
- pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
- return rc;
-err_fid:
- dput(mgs->mgs_fid_de);
-err_configs:
- dput(mgs->mgs_configs_dir);
- goto err_pop;
-}
-
-int mgs_fs_cleanup(struct obd_device *obd)
-{
- struct mgs_obd *mgs = &obd->u.mgs;
- struct lvfs_run_ctxt saved;
- int rc = 0;
-
- class_disconnect_exports(obd); /* cleans up client info too */
-
- push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-
- if (mgs->mgs_configs_dir) {
- l_dput(mgs->mgs_configs_dir);
- mgs->mgs_configs_dir = NULL;
- }
-
- dput(mgs->mgs_fid_de);
- shrink_dcache_sb(mgs->mgs_sb);
-
- pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-
- return rc;
+ class_disconnect_exports(mgs->mgs_obd); /* cleans up client info too */
+
+ if (mgs->mgs_configs_dir) {
+ lu_object_put(env, &mgs->mgs_configs_dir->do_lu);
+ mgs->mgs_configs_dir = NULL;
+ }
+ if (mgs->mgs_nidtbl_dir) {
+ lu_object_put(env, &mgs->mgs_nidtbl_dir->do_lu);
+ mgs->mgs_nidtbl_dir = NULL;
+ }
+ if (mgs->mgs_los) {
+ local_oid_storage_fini(env, mgs->mgs_los);
+ mgs->mgs_los = NULL;
+ }
+
+ return 0;