Commit 498dde79 authored by Mikhail Pershin's avatar Mikhail Pershin Committed by Greg Kroah-Hartman

staging/lustre/obdclass: remove obsoleted md_local_file.c

This library is not used anymore and is replaced by
local_storage.c. Patch removed last remnants of it.

Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2886
Lustre-change: http://review.whamcloud.com/6107Signed-off-by: default avatarMikhail Pershin <mike.pershin@intel.com>
Reviewed-by: default avatarFan Yong <fan.yong@intel.com>
Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarAlex Zhuravlev <alexey.zhuravlev@intel.com>
Signed-off-by: default avatarPeng Tao <tao.peng@emc.com>
Signed-off-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cad6fafa
......@@ -859,44 +859,6 @@ struct lu_local_obj_desc {
struct list_head llod_linkage;
};
struct md_object *llo_store_resolve(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *path,
struct lu_fid *fid);
struct md_object *llo_store_open(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *dirname,
const char *objname,
struct lu_fid *fid);
struct md_object *llo_store_create_index(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *dirname,
const char *objname,
const struct lu_fid *fid,
const struct dt_index_features *feat);
struct md_object *llo_store_create(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *dirname,
const char *objname,
const struct lu_fid *fid);
void llo_local_obj_register(struct lu_local_obj_desc *);
void llo_local_obj_unregister(struct lu_local_obj_desc *);
int llo_local_objects_setup(const struct lu_env *env,
struct md_device * md,
struct dt_device * dt);
int llo_global_init(void);
void llo_global_fini(void);
int lustre_buf2som(void *buf, int rc, struct md_som_data *msd);
int lustre_buf2hsm(void *buf, int rc, struct md_hsm *mh);
void lustre_hsm2buf(void *buf, struct md_hsm *mh);
......
......@@ -7,7 +7,7 @@ obdclass-y := linux/linux-module.o linux/linux-obdo.o linux/linux-sysctl.o \
local_storage.o statfs_pack.o obdo.o obd_config.o obd_mount.o\
mea.o lu_object.o dt_object.o capa.o cl_object.o \
cl_page.o cl_lock.o cl_io.o lu_ref.o acl.o idmap.o \
md_local_object.o lu_ucred.o
lu_ucred.o
ccflags-y := -I$(src)/../include
/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 only,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is included
* in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
* http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
* GPL HEADER END
*/
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Lustre is a trademark of Sun Microsystems, Inc.
*
* lustre/obdclass/md_local_object.c
*
* Lustre Local Object create APIs
* 'create on first mount' facility. Files registed under llo module will
* be created on first mount.
*
* Author: Pravin Shelar <pravin.shelar@sun.com>
*/
#define DEBUG_SUBSYSTEM S_CLASS
#include <obd_support.h>
#include <lustre_disk.h>
#include <lustre_fid.h>
#include <lu_object.h>
#include <linux/list.h>
#include <md_object.h>
/** List head to hold list of objects to be created. */
static struct list_head llo_lobj_list;
/** Lock to protect list manipulations */
static struct mutex llo_lock;
/**
* Structure used to maintain state of path parsing.
* \see llo_find_entry, llo_store_resolve
*/
struct llo_find_hint {
struct lu_fid *lfh_cfid;
struct md_device *lfh_md;
struct md_object *lfh_pobj;
};
/**
* Thread Local storage for this module.
*/
struct llo_thread_info {
/** buffer to resolve path */
char lti_buf[DT_MAX_PATH];
/** used for path resolve */
struct lu_fid lti_fid;
/** used to pass child object fid */
struct lu_fid lti_cfid;
struct llo_find_hint lti_lfh;
struct md_op_spec lti_spc;
struct md_attr lti_ma;
struct lu_name lti_lname;
};
LU_KEY_INIT(llod_global, struct llo_thread_info);
LU_KEY_FINI(llod_global, struct llo_thread_info);
static struct lu_context_key llod_key = {
.lct_tags = LCT_MD_THREAD,
.lct_init = llod_global_key_init,
.lct_fini = llod_global_key_fini
};
static inline struct llo_thread_info * llo_env_info(const struct lu_env *env)
{
return lu_context_key_get(&env->le_ctx, &llod_key);
}
/**
* Search md object for given fid.
*/
static struct md_object *llo_locate(const struct lu_env *env,
struct md_device *md,
const struct lu_fid *fid)
{
struct lu_object *obj;
struct md_object *mdo;
obj = lu_object_find(env, &md->md_lu_dev, fid, NULL);
if (!IS_ERR(obj)) {
obj = lu_object_locate(obj->lo_header, md->md_lu_dev.ld_type);
LASSERT(obj != NULL);
mdo = (struct md_object *) obj;
} else
mdo = (struct md_object *)obj;
return mdo;
}
/**
* Lookup FID for object named \a name in directory \a pobj.
*/
static int llo_lookup(const struct lu_env *env,
struct md_object *pobj,
const char *name,
struct lu_fid *fid)
{
struct llo_thread_info *info = llo_env_info(env);
struct lu_name *lname = &info->lti_lname;
struct md_op_spec *spec = &info->lti_spc;
spec->sp_feat = NULL;
spec->sp_cr_flags = 0;
spec->sp_cr_lookup = 0;
spec->sp_cr_mode = 0;
lname->ln_name = name;
lname->ln_namelen = strlen(name);
return mdo_lookup(env, pobj, lname, fid, spec);
}
/**
* Function to look up path component, this is passed to parsing
* function. \see llo_store_resolve
*
* \retval rc returns error code for lookup or locate operation
*
* pointer to object is returned in data (lfh->lfh_pobj)
*/
static int llo_find_entry(const struct lu_env *env,
const char *name, void *data)
{
struct llo_find_hint *lfh = data;
struct md_device *md = lfh->lfh_md;
struct lu_fid *fid = lfh->lfh_cfid;
struct md_object *obj = lfh->lfh_pobj;
int result;
/* lookup fid for object */
result = llo_lookup(env, obj, name, fid);
lu_object_put(env, &obj->mo_lu);
if (result == 0) {
/* get md object for fid that we got in lookup */
obj = llo_locate(env, md, fid);
if (IS_ERR(obj))
result = PTR_ERR(obj);
}
lfh->lfh_pobj = obj;
return result;
}
static struct md_object *llo_reg_open(const struct lu_env *env,
struct md_device *md,
struct md_object *p,
const char *name,
struct lu_fid *fid)
{
struct md_object *o;
int result;
result = llo_lookup(env, p, name, fid);
if (result == 0)
o = llo_locate(env, md, fid);
else
o = ERR_PTR(result);
return o;
}
/**
* Resolve given \a path, on success function returns
* md object for last directory and \a fid points to
* its fid.
*/
struct md_object *llo_store_resolve(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *path,
struct lu_fid *fid)
{
struct llo_thread_info *info = llo_env_info(env);
struct llo_find_hint *lfh = &info->lti_lfh;
char *local = info->lti_buf;
struct md_object *obj;
int result;
strncpy(local, path, DT_MAX_PATH);
local[DT_MAX_PATH - 1] = '\0';
lfh->lfh_md = md;
lfh->lfh_cfid = fid;
/* start path resolution from backend fs root. */
result = dt->dd_ops->dt_root_get(env, dt, fid);
if (result == 0) {
/* get md object for root */
obj = llo_locate(env, md, fid);
if (!IS_ERR(obj)) {
/* start path parser from root md */
lfh->lfh_pobj = obj;
result = dt_path_parser(env, local, llo_find_entry, lfh);
if (result != 0)
obj = ERR_PTR(result);
else
obj = lfh->lfh_pobj;
}
} else {
obj = ERR_PTR(result);
}
return obj;
}
EXPORT_SYMBOL(llo_store_resolve);
/**
* Returns md object for \a objname in given \a dirname.
*/
struct md_object *llo_store_open(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *dirname,
const char *objname,
struct lu_fid *fid)
{
struct md_object *obj;
struct md_object *dir;
/* search md object for parent dir */
dir = llo_store_resolve(env, md, dt, dirname, fid);
if (!IS_ERR(dir)) {
obj = llo_reg_open(env, md, dir, objname, fid);
lu_object_put(env, &dir->mo_lu);
} else
obj = dir;
return obj;
}
EXPORT_SYMBOL(llo_store_open);
static struct md_object *llo_create_obj(const struct lu_env *env,
struct md_device *md,
struct md_object *dir,
const char *objname,
const struct lu_fid *fid,
const struct dt_index_features *feat)
{
struct llo_thread_info *info = llo_env_info(env);
struct md_object *mdo;
struct md_attr *ma = &info->lti_ma;
struct md_op_spec *spec = &info->lti_spc;
struct lu_name *lname = &info->lti_lname;
struct lu_attr *la = &ma->ma_attr;
int rc;
mdo = llo_locate(env, md, fid);
if (IS_ERR(mdo))
return mdo;
lname->ln_name = objname;
lname->ln_namelen = strlen(objname);
spec->sp_feat = feat;
spec->sp_cr_flags = 0;
spec->sp_cr_lookup = 1;
spec->sp_cr_mode = 0;
if (feat == &dt_directory_features)
la->la_mode = S_IFDIR | S_IXUGO;
else
la->la_mode = S_IFREG;
la->la_mode |= S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
la->la_uid = la->la_gid = 0;
la->la_valid = LA_MODE | LA_UID | LA_GID;
ma->ma_valid = 0;
ma->ma_need = 0;
rc = mdo_create(env, dir, lname, mdo, spec, ma);
if (rc) {
lu_object_put(env, &mdo->mo_lu);
mdo = ERR_PTR(rc);
}
return mdo;
}
/**
* Create md object, object could be diretcory or
* special index defined by \a feat in \a directory.
*
* \param md device
* \param dirname parent directory
* \param objname file name
* \param fid object fid
* \param feat index features required for directory create
*/
struct md_object *llo_store_create_index(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *dirname,
const char *objname,
const struct lu_fid *fid,
const struct dt_index_features *feat)
{
struct llo_thread_info *info = llo_env_info(env);
struct md_object *obj;
struct md_object *dir;
struct lu_fid *ignore = &info->lti_fid;
dir = llo_store_resolve(env, md, dt, dirname, ignore);
if (!IS_ERR(dir)) {
obj = llo_create_obj(env, md, dir, objname, fid, feat);
lu_object_put(env, &dir->mo_lu);
} else {
obj = dir;
}
return obj;
}
EXPORT_SYMBOL(llo_store_create_index);
/**
* Create md object for regular file in \a directory.
*
* \param md device
* \param dirname parent directory
* \param objname file name
* \param fid object fid.
*/
struct md_object *llo_store_create(const struct lu_env *env,
struct md_device *md,
struct dt_device *dt,
const char *dirname,
const char *objname,
const struct lu_fid *fid)
{
return llo_store_create_index(env, md, dt, dirname,
objname, fid, NULL);
}
EXPORT_SYMBOL(llo_store_create);
/**
* Register object for 'create on first mount' facility.
* objects are created in order of registration.
*/
void llo_local_obj_register(struct lu_local_obj_desc *llod)
{
mutex_lock(&llo_lock);
list_add_tail(&llod->llod_linkage, &llo_lobj_list);
mutex_unlock(&llo_lock);
}
EXPORT_SYMBOL(llo_local_obj_register);
void llo_local_obj_unregister(struct lu_local_obj_desc *llod)
{
mutex_lock(&llo_lock);
list_del(&llod->llod_linkage);
mutex_unlock(&llo_lock);
}
EXPORT_SYMBOL(llo_local_obj_unregister);
/**
* Created registed objects.
*/
int llo_local_objects_setup(const struct lu_env *env,
struct md_device * md,
struct dt_device *dt)
{
struct llo_thread_info *info = llo_env_info(env);
struct lu_fid *fid;
struct lu_local_obj_desc *scan;
struct md_object *mdo;
const char *dir;
int rc = 0;
fid = &info->lti_cfid;
mutex_lock(&llo_lock);
list_for_each_entry(scan, &llo_lobj_list, llod_linkage) {
lu_local_obj_fid(fid, scan->llod_oid);
dir = "";
if (scan->llod_dir)
dir = scan->llod_dir;
if (scan->llod_is_index)
mdo = llo_store_create_index(env, md, dt ,
dir, scan->llod_name,
fid,
scan->llod_feat);
else
mdo = llo_store_create(env, md, dt,
dir, scan->llod_name,
fid);
if (IS_ERR(mdo) && PTR_ERR(mdo) != -EEXIST) {
rc = PTR_ERR(mdo);
CERROR("creating obj [%s] fid = "DFID" rc = %d\n",
scan->llod_name, PFID(fid), rc);
goto out;
}
if (!IS_ERR(mdo))
lu_object_put(env, &mdo->mo_lu);
}
out:
mutex_unlock(&llo_lock);
return rc;
}
EXPORT_SYMBOL(llo_local_objects_setup);
int llo_global_init(void)
{
int result;
INIT_LIST_HEAD(&llo_lobj_list);
mutex_init(&llo_lock);
LU_CONTEXT_KEY_INIT(&llod_key);
result = lu_context_key_register(&llod_key);
return result;
}
void llo_global_fini(void)
{
lu_context_key_degister(&llod_key);
LASSERT(list_empty(&llo_lobj_list));
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment