X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmgs%2Fmgs_fs.c;h=231b6af9675a1589888be1bbeb6eaec52745c354;hp=6bab7137181c8e3537b3d59fb8baba271eb8af0f;hb=b0f08a4e902411a8fbdb660e5b32c5821ca7159f;hpb=a3c6722c8b105ac201e3d3469e396d91159cbf84 diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c index 6bab713..231b6af 100644 --- a/lustre/mgs/mgs_fs.c +++ b/lustre/mgs/mgs_fs.c @@ -27,7 +27,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2012, Whamcloud, Inc. + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -43,17 +43,6 @@ #define DEBUG_SUBSYSTEM S_MGS -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include "mgs_internal.h" @@ -116,134 +105,14 @@ int mgs_client_free(struct obd_export *exp) return 0; } -/* Same as mds_lvfs_fid2dentry */ -/* Look up an entry by inode number. */ -/* this function ONLY returns valid dget'd dentries with an initialized inode - or errors */ -static struct dentry *mgs_lvfs_fid2dentry(__u64 id, __u32 gen, - __u64 gr, void *data) -{ - struct fsfilt_fid fid; - struct obd_device *obd = (struct obd_device *)data; - struct mgs_device *mgs = lu2mgs_dev(obd->obd_lu_dev); - ENTRY; - - CDEBUG(D_DENTRY, "--> mgs_fid2dentry: ino/gen %lu/%u, sb %p\n", - (unsigned long)id, gen, mgs->mgs_sb); - - if (id == 0) - RETURN(ERR_PTR(-ESTALE)); - - fid.ino = id; - fid.gen = gen; - - RETURN(fsfilt_fid2dentry(obd, mgs->mgs_vfsmnt, &fid, 0)); -} - -struct lvfs_callback_ops mgs_lvfs_ops = { - l_fid2dentry: mgs_lvfs_fid2dentry, -}; - -int mgs_fs_setup_old(const struct lu_env *env, struct mgs_device *mgs) -{ - struct obd_device *obd = mgs->mgs_obd; - struct dt_device_param p; - struct vfsmount *mnt; - struct lvfs_run_ctxt saved; - struct dentry *dentry; - int rc; - ENTRY; - - dt_conf_get(env, mgs->mgs_bottom, &p); - mnt = p.ddp_mnt; - if (mnt == NULL) { - CERROR("%s: no proper support for OSD yet\n", obd->obd_name); - RETURN(-ENODEV); - } - - /* 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; - - obd->obd_fsops = fsfilt_get_ops(mt_str(p.ddp_mount_type)); - if (IS_ERR(obd->obd_fsops)) - RETURN(PTR_ERR(obd->obd_fsops)); - - rc = fsfilt_setup(obd, mgs->mgs_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 = mgs_lvfs_ops; - - push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - - /* Setup the configs dir */ - dentry = simple_mkdir(cfs_fs_pwd(current->fs), 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_old = dentry; - - /* create directory to store nid table versions */ - dentry = simple_mkdir(cfs_fs_pwd(current->fs), mnt, MGS_NIDTBL_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); - } else { - dput(dentry); - } - -err_pop: - pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - return rc; -} - -int mgs_fs_cleanup_old(const struct lu_env *env, struct mgs_device *mgs) -{ - struct obd_device *obd = mgs->mgs_obd; - 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_old) { - l_dput(mgs->mgs_configs_dir_old); - mgs->mgs_configs_dir_old = NULL; - } - - shrink_dcache_sb(mgs->mgs_sb); - - pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - - if (obd->obd_fsops) - fsfilt_put_ops(obd->obd_fsops); - - return rc; -} - int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) { - struct lu_fid fid; - struct dt_object *o; - struct lu_fid rfid; - struct dt_object *root; - int rc; + struct lu_fid fid; + struct dt_object *o; + struct lu_fid rfid; + struct dt_object *root; + int rc; + ENTRY; /* FIXME what's this? Do I need it? */ @@ -251,6 +120,9 @@ int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) if (rc) RETURN(rc); + OBD_SET_CTXT_MAGIC(&mgs->mgs_obd->obd_lvfs_ctxt); + mgs->mgs_obd->obd_lvfs_ctxt.dt = mgs->mgs_bottom; + /* XXX: fix when support for N:1 layering is implemented */ LASSERT(mgs->mgs_dt_dev.dd_lu_dev.ld_site); mgs->mgs_dt_dev.dd_lu_dev.ld_site->ls_top_dev = @@ -302,19 +174,11 @@ out_los: out: mgs->mgs_dt_dev.dd_lu_dev.ld_site->ls_top_dev = NULL; - if (rc == 0) { - rc = mgs_fs_setup_old(env, mgs); - if (rc) - mgs_fs_cleanup(env, mgs); - } - return rc; } int mgs_fs_cleanup(const struct lu_env *env, struct mgs_device *mgs) { - mgs_fs_cleanup_old(env, mgs); - class_disconnect_exports(mgs->mgs_obd); /* cleans up client info too */ if (mgs->mgs_configs_dir) {