Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-930 misc: limit CDEBUG console message frequency
[fs/lustre-release.git]
/
lustre
/
mdt
/
mdt_handler.c
diff --git
a/lustre/mdt/mdt_handler.c
b/lustre/mdt/mdt_handler.c
index
598aec3
..
bf1d0d7
100644
(file)
--- a/
lustre/mdt/mdt_handler.c
+++ b/
lustre/mdt/mdt_handler.c
@@
-276,6
+276,7
@@
static int mdt_lookup_fileset(struct mdt_thread_info *info, const char *fileset,
{
struct mdt_device *mdt = info->mti_mdt;
struct lu_name *lname = &info->mti_name;
+ const char *start = fileset;
char *filename = info->mti_filename;
struct mdt_object *parent;
u32 mode;
@@
-290,8
+291,8
@@
static int mdt_lookup_fileset(struct mdt_thread_info *info, const char *fileset,
*/
*fid = mdt->mdt_md_root_fid;
- while (rc == 0 &&
fileset != NULL && *filese
t != '\0') {
- const char *s1 =
filese
t;
+ while (rc == 0 &&
start != NULL && *star
t != '\0') {
+ const char *s1 =
star
t;
const char *s2;
while (*++s1 == '/')
@@
-303,7
+304,7
@@
static int mdt_lookup_fileset(struct mdt_thread_info *info, const char *fileset,
if (s2 == s1)
break;
-
filese
t = s2;
+
star
t = s2;
lname->ln_namelen = s2 - s1;
if (lname->ln_namelen > NAME_MAX) {
@@
-339,9
+340,21
@@
static int mdt_lookup_fileset(struct mdt_thread_info *info, const char *fileset,
rc = PTR_ERR(parent);
else {
mode = lu_object_attr(&parent->mot_obj);
- mdt_object_put(info->mti_env, parent);
- if (!S_ISDIR(mode))
+ if (!S_ISDIR(mode)) {
rc = -ENOTDIR;
+ } else if (mdt_is_remote_object(info, parent, parent)) {
+ if (!mdt->mdt_enable_remote_subdir_mount) {
+ rc = -EREMOTE;
+ LCONSOLE_WARN("%s: subdir mount '%s' refused because 'enable_remote_subdir_mount=0': rc = %d\n",
+ mdt_obd_name(mdt),
+ fileset, rc);
+ } else {
+ LCONSOLE_INFO("%s: subdir mount '%s' is remote and may be slow\n",
+ mdt_obd_name(mdt),
+ fileset);
+ }
+ }
+ mdt_object_put(info->mti_env, parent);
}
}
@@
-1403,10
+1416,10
@@
static int mdt_getattr_internal(struct mdt_thread_info *info,
rc = mdt_attr_get_complex(info, o, ma);
if (unlikely(rc)) {
- CDEBUG(rc == -ENOENT ? D_OTHER : D_ERROR,
- "%s: getattr error for "DFID": rc = %d\n",
- mdt_obd_name(info->mti_mdt),
- PFID(mdt_object_fid(o)), rc);
+ CDEBUG
_LIMIT
(rc == -ENOENT ? D_OTHER : D_ERROR,
+
"%s: getattr error for "DFID": rc = %d\n",
+
mdt_obd_name(info->mti_mdt),
+
PFID(mdt_object_fid(o)), rc);
RETURN(rc);
}
@@
-2522,7
+2535,7
@@
static int mdt_readpage(struct tgt_session_info *tsi)
exp_max_brw_size(tsi->tsi_exp));
rdpg->rp_npages = (rdpg->rp_count + PAGE_SIZE - 1) >>
PAGE_SHIFT;
- OBD_ALLOC_PTR_ARRAY(rdpg->rp_pages, rdpg->rp_npages);
+ OBD_ALLOC_PTR_ARRAY
_LARGE
(rdpg->rp_pages, rdpg->rp_npages);
if (rdpg->rp_pages == NULL)
RETURN(-ENOMEM);
@@
-2546,7
+2559,7
@@
free_rdpg:
for (i = 0; i < rdpg->rp_npages; i++)
if (rdpg->rp_pages[i] != NULL)
__free_page(rdpg->rp_pages[i]);
- OBD_FREE_PTR_ARRAY(rdpg->rp_pages, rdpg->rp_npages);
+ OBD_FREE_PTR_ARRAY
_LARGE
(rdpg->rp_pages, rdpg->rp_npages);
if (OBD_FAIL_CHECK(OBD_FAIL_MDS_SENDPAGE))
RETURN(0);
@@
-5700,6
+5713,7
@@
static int mdt_init0(const struct lu_env *env, struct mdt_device *m,
m->mdt_enable_chprojid_gid = 0;
m->mdt_enable_remote_rename = 1;
m->mdt_dir_restripe_nsonly = 1;
+ m->mdt_enable_remote_subdir_mount = 1;
atomic_set(&m->mdt_mds_mds_conns, 0);
atomic_set(&m->mdt_async_commit_count, 0);
@@
-6727,18
+6741,20
@@
static int mdt_path_current(struct mdt_thread_info *info,
struct getinfo_fid2path *fp,
struct lu_fid *root_fid)
{
- struct mdt_device *mdt = info->mti_mdt;
- struct mdt_object *mdt_obj;
- struct link_ea_header *leh;
- struct link_ea_entry *lee;
- struct lu_name *tmpname = &info->mti_name;
- struct lu_fid *tmpfid = &info->mti_tmp_fid1;
- struct lu_buf *buf = &info->mti_big_buf;
- char *ptr;
- int reclen;
- struct linkea_data ldata = { NULL };
- int rc = 0;
- bool first = true;
+ struct mdt_device *mdt = info->mti_mdt;
+ struct lu_name *tmpname = &info->mti_name;
+ struct lu_fid *tmpfid = &info->mti_tmp_fid1;
+ struct lu_buf *buf = &info->mti_big_buf;
+ struct md_attr *ma = &info->mti_attr;
+ struct linkea_data ldata = { NULL };
+ bool first = true;
+ struct mdt_object *mdt_obj;
+ struct link_ea_header *leh;
+ struct link_ea_entry *lee;
+ char *ptr;
+ int reclen;
+ int rc = 0;
+
ENTRY;
/* temp buffer for path element, the buffer will be finally freed
@@
-6754,8
+6770,6
@@
static int mdt_path_current(struct mdt_thread_info *info,
*tmpfid = fp->gf_fid = *mdt_object_fid(obj);
while (!lu_fid_eq(root_fid, &fp->gf_fid)) {
- struct lu_buf lmv_buf;
-
if (!lu_fid_eq(root_fid, &mdt->mdt_md_root_fid) &&
lu_fid_eq(&mdt->mdt_md_root_fid, &fp->gf_fid))
GOTO(out, rc = -ENOENT);
@@
-6803,22
+6817,23
@@
static int mdt_path_current(struct mdt_thread_info *info,
fp->gf_linkno++;
}
- lmv_buf.lb_buf = info->mti_xattr_buf;
- lmv_buf.lb_len = sizeof(info->mti_xattr_buf);
/* Check if it is slave stripes */
- rc = mo_xattr_get(info->mti_env, mdt_object_child(mdt_obj),
- &lmv_buf, XATTR_NAME_LMV);
+ rc = mdt_stripe_get(info, mdt_obj, ma, XATTR_NAME_LMV);
mdt_object_put(info->mti_env, mdt_obj);
- if (rc > 0) {
- union lmv_mds_md *lmm = lmv_buf.lb_buf;
+ if (rc < 0)
+ GOTO(out, rc);
+
+ if (ma->ma_valid & MA_LMV) {
+ struct lmv_mds_md_v1 *lmv = &ma->ma_lmv->lmv_md_v1;
+
+ if (!lmv_is_sane2(lmv))
+ GOTO(out, rc = -EBADF);
/* For slave stripes, get its master */
- if (le32_to_cpu(lm
m
->lmv_magic) == LMV_MAGIC_STRIPE) {
+ if (le32_to_cpu(lm
v
->lmv_magic) == LMV_MAGIC_STRIPE) {
fp->gf_fid = *tmpfid;
continue;
}
- } else if (rc < 0 && rc != -ENODATA) {
- GOTO(out, rc);
}
/* Pack the name in the end of the buffer */
@@
-7371,10
+7386,10
@@
int mdt_cos_is_enabled(struct mdt_device *mdt)
return mdt->mdt_opts.mo_cos != 0;
}
-static struct lu_device_type_operations mdt_device_type_ops = {
-
.ldto_device_alloc = mdt_device_alloc,
-
.ldto_device_free = mdt_device_free,
-
.ldto_device_fini = mdt_device_fini
+static
const
struct lu_device_type_operations mdt_device_type_ops = {
+ .ldto_device_alloc = mdt_device_alloc,
+ .ldto_device_free = mdt_device_free,
+ .ldto_device_fini = mdt_device_fini
};
static struct lu_device_type mdt_device_type = {
@@
-7400,7
+7415,7
@@
static int __init mdt_init(void)
if (rc)
GOTO(lu_fini, rc);
- rc = class_register_type(&mdt_obd_device_ops, NULL, true,
NULL,
+ rc = class_register_type(&mdt_obd_device_ops, NULL, true,
LUSTRE_MDT_NAME, &mdt_device_type);
if (rc)
GOTO(mds_fini, rc);