X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmds%2Fhandler.c;h=2163dcd6f26493dad84a42c3e8f607cf0facd29f;hb=32a4e45e0e5ce912b7a03c703f42a70fe5781084;hp=35af1a9b9cf50f8f65e88768252afc13a1491516;hpb=737da0331e8407a704cd11c04f18c2cd3d437800;p=fs%2Flustre-release.git diff --git a/lustre/mds/handler.c b/lustre/mds/handler.c index 35af1a9..2163dcd 100644 --- a/lustre/mds/handler.c +++ b/lustre/mds/handler.c @@ -262,22 +262,25 @@ struct lvfs_callback_ops mds_lvfs_ops = { l_fid2dentry: mds_lvfs_fid2dentry, }; -static void mds_init_ctxt(struct obd_device *obd, struct vfsmount *mnt) +static int mds_init_ctxt(struct obd_device *obd, struct vfsmount *mnt) { struct mds_obd *mds = &obd->u.mds; + int rc; mds->mds_obt.obt_vfsmnt = mnt; /* why not mnt->mnt_sb instead of mnt->mnt_root->d_inode->i_sb? */ obd->u.obt.obt_sb = mnt->mnt_root->d_inode->i_sb; obd->u.obt.obt_magic = OBT_MAGIC; - fsfilt_setup(obd, obd->u.obt.obt_sb); + rc = fsfilt_setup(obd, obd->u.obt.obt_sb); + if (rc) + return rc; 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 = mds_lvfs_ops; - return; + return 0; } /*mds still need lov setup here*/ @@ -316,14 +319,16 @@ static int mds_cmd_setup(struct obd_device *obd, struct lustre_cfg *lcfg) cfs_init_rwsem(&mds->mds_notify_lock); obd->obd_fsops = fsfilt_get_ops(MT_STR(lsi->lsi_ldd)); - mds_init_ctxt(obd, mnt); + rc = mds_init_ctxt(obd, mnt); + if (rc) + GOTO(err_putfs, rc); push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); dentry = simple_mkdir(cfs_fs_pwd(current->fs), mnt, "OBJECTS", 0777, 1); if (IS_ERR(dentry)) { rc = PTR_ERR(dentry); CERROR("cannot create OBJECTS directory: rc = %d\n", rc); - GOTO(err_putfs, rc); + GOTO(err_pop, rc); } mds->mds_objects_dir = dentry; @@ -348,14 +353,16 @@ static int mds_cmd_setup(struct obd_device *obd, struct lustre_cfg *lcfg) if (rc) GOTO(err_objects, rc); -err_pop: pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - RETURN(rc); + RETURN(0); + err_objects: dput(mds->mds_objects_dir); +err_pop: + pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); err_putfs: fsfilt_put_ops(obd->obd_fsops); - goto err_pop; + return rc; } static int mds_cmd_cleanup(struct obd_device *obd)