From d097fcc51b88a486fa9592054c7e79d5b161913f Mon Sep 17 00:00:00 2001 From: Emoly Liu Date: Mon, 17 Mar 2025 12:14:53 +0800 Subject: [PATCH] LU-18810 obd: add a parameter to enable filename encoding This patch adds a parameter "enable_fname_encoding" to encode filename in the logs, uses 64-bit FNV-1a to hash filename and uses function gss_base64url_encode() to encode the hashed filename to the printable characters. The following functions and macros are defined for different pattens: - encode_fn_len(fname, len) - encode_fn(fname) - encode_fn_dname(len, fname) - encode_fn_luname(lname) - encode_fn_opdata(op) - encode_fn_oied(ent) - encode_fn_qstr(qstr) - encode_fn_dentry(dentry) - encode_fn_file(file) This is a port of Lustre-change: https://review.whamcloud.com/57985 Lustre-commit: TBD (from c582a55e791fdb2967c36dbbc95fb0e8d48e6b39) EX-bug-id: EX-11415 Signed-off-by: Emoly Liu Change-Id: Icf258dc3eb10b915eb7eff970bc20822daa79777 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/58433 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Sebastien Buisson Reviewed-by: Oleg Drokin --- contrib/scripts/spelling.txt | 3 ++ lustre/include/lu_object.h | 5 --- lustre/include/obd_support.h | 23 ++++++++++++ lustre/include/uapi/linux/lustre/lgss.h | 23 ++++++++---- lustre/mdd/mdd_dir.c | 18 +++++----- lustre/mdt/mdt_handler.c | 2 +- lustre/mdt/mdt_open.c | 8 ++--- lustre/mdt/mdt_reint.c | 33 ++++++++++-------- lustre/mdt/mdt_restripe.c | 10 +++--- lustre/obdclass/obd_sysfs.c | 61 ++++++++++++++++++++++++++++++++ lustre/osd-ldiskfs/osd_handler.c | 62 ++++++++++++++++----------------- 11 files changed, 172 insertions(+), 76 deletions(-) diff --git a/contrib/scripts/spelling.txt b/contrib/scripts/spelling.txt index ae752c5..c5b1258 100644 --- a/contrib/scripts/spelling.txt +++ b/contrib/scripts/spelling.txt @@ -158,3 +158,6 @@ xa_insert||ll_xa_insert LDLM_LOCK_PUT||ldlm_lock_put LDLM_LOCK_RELEASE||ldlm_lock_put LDLM_LOCK_GET||ldlm_lock_get +%.*s||DNAME +d_name.name||encode_fn_xxx +PNAME||encode_fname_luname diff --git a/lustre/include/lu_object.h b/lustre/include/lu_object.h index 8f12af7..131bed6 100644 --- a/lustre/include/lu_object.h +++ b/lustre/include/lu_object.h @@ -1360,11 +1360,6 @@ static inline bool lu_name_is_valid(const struct lu_name *ln) return lu_name_is_valid_2(ln->ln_name, ln->ln_namelen); } -#define DNAME "%.*s" -#define PNAME(ln) \ - (lu_name_is_valid(ln) ? (ln)->ln_namelen : 0), \ - (lu_name_is_valid(ln) ? (ln)->ln_name : "") - /* * Common buffer structure to be passed around for various xattr_{s,g}et() * methods. diff --git a/lustre/include/obd_support.h b/lustre/include/obd_support.h index 3951b9c..24a7658 100644 --- a/lustre/include/obd_support.h +++ b/lustre/include/obd_support.h @@ -25,6 +25,8 @@ #include #include #include +#include +#include /* global variables */ extern struct percpu_counter obd_memory; @@ -53,6 +55,7 @@ extern unsigned long obd_max_dirty_pages; extern atomic_long_t obd_dirty_pages; extern char obd_jobid_var[]; extern bool obd_enable_health_write; +extern bool obd_enable_fname_encoding; /* Some hash init argument constants */ #define HASH_NID_STATS_BKT_BITS 5 @@ -1088,4 +1091,24 @@ struct obd_heat_instance { #define LUSTRE_ENCRYPTION_UNIT_SIZE ((size_t)1 << LUSTRE_ENCRYPTION_BLOCKBITS) #define LUSTRE_ENCRYPTION_MASK (~(LUSTRE_ENCRYPTION_UNIT_SIZE - 1)) +/* filename encoding */ +extern const char *encode_fn_len(const char *fname, size_t namelen); +static inline const char *encode_fn(const char *fname) +{ + return encode_fn_len(fname, fname ? strnlen(fname, PATH_MAX) : 0); +} + +/* for format DNAME "%.*s" */ +#define DNAME "%.*s" +#define encode_fn_dname(len, fname) (int)(len), encode_fn_len(fname, len) +#define encode_fn_luname(ln) \ + encode_fn_dname((ln)->ln_namelen, \ + lu_name_is_valid(ln) ? (ln)->ln_name : "") +#define encode_fn_opdata(op) encode_fn_dname((op)->op_namelen, (op)->op_name) +#define encode_fn_oied(ent) \ + encode_fn_dname((ent)->oied_namelen, (ent)->oied_name) +#define encode_fn_qstr(qs) encode_fn_dname((qs).len, (qs).name) +#define encode_fn_dentry(de) encode_fn_qstr((de)->d_name) +#define encode_fn_file(file) encode_fn_dentry(file_dentry(file)) + #endif diff --git a/lustre/include/uapi/linux/lustre/lgss.h b/lustre/include/uapi/linux/lustre/lgss.h index bb09394..5adb7c1 100644 --- a/lustre/include/uapi/linux/lustre/lgss.h +++ b/lustre/include/uapi/linux/lustre/lgss.h @@ -17,6 +17,7 @@ # include /* abs() */ # include /* PRIu64 */ # include /* isascii() */ +# include # define __USE_GNU 1 # define __USE_XOPEN2K8 1 #else @@ -264,24 +265,27 @@ static const char base64url_table[] = * as it's unneeded and not required by the RFC. * Pad with a trailing space. */ -static inline void gss_base64url_encode(char **dst, int *dstlen, - const __u8 *src, int srclen) +static inline int gss_base64url_encode(char **dst, int *dstlen, + const __u8 *src, int srclen) { char *cp = *dst; int len = *dstlen; __u32 ac = 0; int bits = 0; + int rc = 0; int i; if (len < 0) - return; + return -EINVAL; + if (len == 0) + return 0; - if (!srclen) - return gss_string_write(dst, dstlen, ""); + if (!srclen) { + gss_string_write(dst, dstlen, ""); + return 0; + } for (i = 0; i < srclen; i++) { - if (!len) - break; ac = (ac << 8) | src[i]; bits += 8; do { @@ -289,6 +293,8 @@ static inline void gss_base64url_encode(char **dst, int *dstlen, *cp++ = base64url_table[(ac >> bits) & 0x3f]; len--; } while (bits >= 6 && len > 0); + if (!len) + break; } if (i < srclen) { len = -1; @@ -310,6 +316,9 @@ static inline void gss_base64url_encode(char **dst, int *dstlen, out: *dst = cp; *dstlen = len; + if (len == -1) + rc = -ENOBUFS; + return rc; } /* diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index aa29642..1ca9f56 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -4017,7 +4017,7 @@ static int mdd_update_link(const struct lu_env *env, RETURN(0); CDEBUG(D_INFO, "update "DFID"/"DNAME":"DFID"\n", - PFID(fid), PNAME(lname), PFID(mdd_object_fid(tobj))); + PFID(fid), encode_fn_luname(lname), PFID(mdd_object_fid(tobj))); pobj = mdd_object_find(env, mdd, fid); if (IS_ERR(pobj)) { @@ -4131,11 +4131,12 @@ static int mdd_iterate_linkea(const struct lu_env *env, &fid); /* Note: lname might miss \0 at the end */ - snprintf(filename, sizeof(info->mdi_name), "%.*s", + snprintf(filename, sizeof(info->mdi_name), DNAME, lname.ln_namelen, lname.ln_name); lname.ln_name = filename; - CDEBUG(D_INFO, DFID"/"DNAME"\n", PFID(&fid), PNAME(&lname)); + CDEBUG(D_INFO, DFID"/"DNAME"\n", + PFID(&fid), encode_fn_luname(&lname)); rc = cb(env, sobj, tobj, tname, tpfid, &lname, &fid, opaque, handle); @@ -4416,9 +4417,10 @@ static int mdd_migrate_update(const struct lu_env *env, ENTRY; - CDEBUG(D_INFO, "update "DFID" from "DFID"/%s to "DFID"/%s\n", + CDEBUG(D_INFO, "update "DFID" from "DFID"/"DNAME" to "DFID"/"DNAME"\n", PFID(mdd_object_fid(obj)), PFID(mdd_object_fid(spobj)), - sname->ln_name, PFID(mdd_object_fid(tpobj)), tname->ln_name); + encode_fn_luname(sname), PFID(mdd_object_fid(tpobj)), + encode_fn_luname(tname)); rc = __mdd_index_delete(env, spobj, sname->ln_name, S_ISDIR(attr->la_mode), handle); @@ -4612,11 +4614,11 @@ static int mdd_migrate_cmd_check(struct mdd_device *mdd, lum->lum_stripe_offset != lmv->lmv_master_mdt_index || (lum_hash_type && lum_hash_type != lmv_hash_type)) { CERROR("%s: '"DNAME"' migration was interrupted, run 'lfs migrate -m %d -c %d -H %s "DNAME"' to finish migration: rc = %d\n", - mdd2obd_dev(mdd)->obd_name, PNAME(lname), + mdd2obd_dev(mdd)->obd_name, encode_fn_luname(lname), le32_to_cpu(lmv->lmv_master_mdt_index), le32_to_cpu(lmv->lmv_migrate_offset), mdt_hash_name[le32_to_cpu(lmv_hash_type)], - PNAME(lname), -EPERM); + encode_fn_luname(lname), -EPERM); return -EPERM; } @@ -5061,7 +5063,7 @@ int mdd_dir_layout_shrink(const struct lu_env *env, fid); /* Note: lname might miss \0 at the end */ - snprintf(filename, sizeof(info->mdi_name), "%.*s", + snprintf(filename, sizeof(info->mdi_name), DNAME, lname.ln_namelen, lname.ln_name); lname.ln_name = filename; diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 7f80e86..3e9074d 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -2198,7 +2198,7 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info, CDEBUG(D_INODE, "getattr with lock for "DFID"/"DNAME", ldlm_rep = %p\n", PFID(mdt_object_fid(parent)), - PNAME(lname), ldlm_rep); + encode_fn_luname(lname), ldlm_rep); if (parent->mot_obj.lo_header->loh_attr & LOHA_FSCRYPT_MD || (fid_is_root(mdt_object_fid(parent)) && diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 55904d0..8aef0d1 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -1462,8 +1462,8 @@ int mdt_reint_open(struct mdt_thread_info *info, struct mdt_lock_handle *lhc) CDEBUG(D_INODE, "I am going to open "DFID"/("DNAME"->"DFID") " "cr_flag=%#lo mode=0%06o msg_flag=0x%x\n", - PFID(rr->rr_fid1), PNAME(&rr->rr_name), PFID(rr->rr_fid2), - open_flags, ma->ma_attr.la_mode, msg_flags); + PFID(rr->rr_fid1), encode_fn_luname(&rr->rr_name), + PFID(rr->rr_fid2), open_flags, ma->ma_attr.la_mode, msg_flags); /* Prevent by-fid operation if parent fid is .lustre/fid. * Also, we want rbac roles to have precedence over any other @@ -1554,7 +1554,7 @@ again_pw: LASSERTF(ergo(result == 0, fid_is_sane(child_fid)), "looking for "DFID"/"DNAME", found FID = "DFID"\n", - PFID(mdt_object_fid(parent)), PNAME(&rr->rr_name), + PFID(mdt_object_fid(parent)), encode_fn_luname(&rr->rr_name), PFID(child_fid)); if (result != 0 && result != -ENOENT) { @@ -1701,7 +1701,7 @@ again_pw: /* Object does not exist. Likely FS corruption. */ CERROR("%s: name '"DNAME"' present, but FID " DFID" is invalid\n", mdt_obd_name(info->mti_mdt), - PNAME(&rr->rr_name), PFID(child_fid)); + encode_fn_luname(&rr->rr_name), PFID(child_fid)); GOTO(out_child, result = -EIO); } } diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 058da76..a92fd36 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -485,7 +485,8 @@ static int mdt_create(struct mdt_thread_info *info, struct mdt_lock_handle *lhc) ENTRY; DEBUG_REQ(D_INODE, mdt_info_req(info), "Create ("DNAME"->"DFID") in "DFID, - PNAME(&rr->rr_name), PFID(rr->rr_fid2), PFID(rr->rr_fid1)); + encode_fn_luname(&rr->rr_name), PFID(rr->rr_fid2), + PFID(rr->rr_fid1)); if (!fid_is_md_operative(rr->rr_fid1)) RETURN(-EPERM); @@ -1188,7 +1189,7 @@ static int mdt_reint_unlink(struct mdt_thread_info *info, ENTRY; DEBUG_REQ(D_INODE, req, "unlink "DFID"/"DNAME"", PFID(rr->rr_fid1), - PNAME(&rr->rr_name)); + encode_fn_luname(&rr->rr_name)); if (info->mti_dlm_req) ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP); @@ -1293,12 +1294,14 @@ static int mdt_reint_unlink(struct mdt_thread_info *info, if (!fid_is_zero(rr->rr_fid2)) { CDEBUG(D_INFO, "%s: name "DNAME" cannot find "DFID"\n", mdt_obd_name(info->mti_mdt), - PNAME(&rr->rr_name), PFID(mdt_object_fid(mc))); + encode_fn_luname(&rr->rr_name), + PFID(mdt_object_fid(mc))); GOTO(put_child, rc = -ENOENT); } CDEBUG(D_INFO, "%s: name "DNAME": "DFID" is on another MDT\n", mdt_obd_name(info->mti_mdt), - PNAME(&rr->rr_name), PFID(mdt_object_fid(mc))); + encode_fn_luname(&rr->rr_name), + PFID(mdt_object_fid(mc))); if (!mdt_is_dne_client(req->rq_export)) /* Return -ENOTSUPP for old client */ @@ -1419,7 +1422,8 @@ static int mdt_reint_link(struct mdt_thread_info *info, ENTRY; DEBUG_REQ(D_INODE, req, "link "DFID" to "DFID"/"DNAME, - PFID(rr->rr_fid1), PFID(rr->rr_fid2), PNAME(&rr->rr_name)); + PFID(rr->rr_fid1), PFID(rr->rr_fid2), + encode_fn_luname(&rr->rr_name)); if (CFS_FAIL_CHECK(OBD_FAIL_MDS_REINT_LINK)) RETURN(err_serious(-ENOENT)); @@ -1501,7 +1505,7 @@ static int mdt_reint_link(struct mdt_thread_info *info, if (!req_is_replay(mdt_info_req(info))) { if (rc != -ENOENT) { CDEBUG(D_INFO, "link target "DNAME" existed!\n", - PNAME(&rr->rr_name)); + encode_fn_luname(&rr->rr_name)); GOTO(unlock_source, rc = -EEXIST); } info->mti_ver[2] = ENOENT_VERSION; @@ -1887,7 +1891,7 @@ static int mdt_migrate_links_lock(struct mdt_thread_info *info, if (lu_fid_eq(mdt_object_fid(spobj), &fid)) { CDEBUG(D_INFO, "skip lock on source parent "DFID"/"DNAME"\n", - PFID(&fid), PNAME(lname)); + PFID(&fid), encode_fn_luname(lname)); continue; } @@ -1895,7 +1899,7 @@ static int mdt_migrate_links_lock(struct mdt_thread_info *info, if (tpobj != spobj && lu_fid_eq(mdt_object_fid(tpobj), &fid)) { CDEBUG(D_INFO, "skip lock on target parent "DFID"/"DNAME"\n", - PFID(&fid), PNAME(lname)); + PFID(&fid), encode_fn_luname(lname)); continue; } @@ -1908,7 +1912,7 @@ static int mdt_migrate_links_lock(struct mdt_thread_info *info, if (!mdt_object_exists(lnkp)) { CDEBUG(D_INFO, DFID" doesn't exist, skip "DNAME"\n", - PFID(&fid), PNAME(lname)); + PFID(&fid), encode_fn_luname(lname)); mdt_object_put(info->mti_env, lnkp); continue; } @@ -2207,7 +2211,7 @@ int mdt_reint_migrate(struct mdt_thread_info *info, ENTRY; CDEBUG(D_INODE, "migrate "DFID"/"DNAME" to "DFID"\n", PFID(rr->rr_fid1), - PNAME(&rr->rr_name), PFID(rr->rr_fid2)); + encode_fn_luname(&rr->rr_name), PFID(rr->rr_fid2)); if (info->mti_dlm_req) ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP); @@ -2510,7 +2514,7 @@ unlock_rename: if (rc) CERROR("%s: migrate "DFID"/"DNAME" failed: rc = %d\n", mdt_obd_name(info->mti_mdt), PFID(rr->rr_fid1), - PNAME(&rr->rr_name), rc); + encode_fn_luname(&rr->rr_name), rc); return rc; } @@ -2677,8 +2681,8 @@ static int mdt_reint_rename(struct mdt_thread_info *info, ENTRY; DEBUG_REQ(D_INODE, req, "rename "DFID"/"DNAME" to "DFID"/"DNAME, - PFID(rr->rr_fid1), PNAME(&rr->rr_name), - PFID(rr->rr_fid2), PNAME(&rr->rr_tgt_name)); + PFID(rr->rr_fid1), encode_fn_luname(&rr->rr_name), + PFID(rr->rr_fid2), encode_fn_luname(&rr->rr_tgt_name)); if (info->mti_dlm_req) ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP); @@ -2760,7 +2764,8 @@ static int mdt_reint_rename(struct mdt_thread_info *info, mdt_obd_name(mdt), msrcdir == mtgtdir ? "samedir" : "crossdir", S_ISDIR(ma->ma_attr.la_mode) ? "dir" : "file", - PFID(rr->rr_fid1), PNAME(&rr->rr_name)); + PFID(rr->rr_fid1), + encode_fn_luname(&rr->rr_name)); } } diff --git a/lustre/mdt/mdt_restripe.c b/lustre/mdt/mdt_restripe.c index bdb8610..ae096ee 100644 --- a/lustre/mdt/mdt_restripe.c +++ b/lustre/mdt/mdt_restripe.c @@ -356,7 +356,7 @@ static int mdt_auto_split(struct mdt_thread_info *info) info->mti_filename[lname->ln_namelen] = '\0'; lname->ln_name = info->mti_filename; CDEBUG(D_INFO, "split "DFID"/"DNAME" to count %u (MDT count %d)\n", - PFID(fid), PNAME(lname), lum_stripe_count, + PFID(fid), encode_fn_luname(lname), lum_stripe_count, atomic_read(&mdt->mdt_mds_mds_conns) + 1); parent = mdt_object_find(env, mdt, fid); @@ -397,7 +397,7 @@ out: if (rc && rc != -EALREADY && rc != -EBUSY && rc != -EREMOTE) CERROR("%s: split "DFID"/"DNAME" to count %u failed: rc = %d\n", mdt_obd_name(mdt), PFID(mdt_object_fid(child)), - PNAME(lname), lum_stripe_count, rc); + encode_fn_luname(lname), lum_stripe_count, rc); if (!IS_ERR_OR_NULL(child)) mdt_object_put(env, child); @@ -630,7 +630,7 @@ static int mdt_restripe_migrate(struct mdt_thread_info *info) lname->ln_namelen = namelen; CDEBUG(D_INFO, "migrate "DFID"/"DNAME" type %ho\n", - PFID(&fid1), PNAME(lname), type); + PFID(&fid1), encode_fn_luname(lname), type); master = mdt_object_find(env, mdt, &fid1); if (IS_ERR(master)) @@ -672,8 +672,8 @@ out: /* -EBUSY: file is opened by others */ if (rc != -EBUSY) CERROR("%s: migrate "DFID"/"DNAME" failed: rc = %d\n", - mdt_obd_name(mdt), PFID(&fid1), PNAME(lname), - rc); + mdt_obd_name(mdt), PFID(&fid1), + encode_fn_luname(lname), rc); spin_lock(&mdt->mdt_lock); stripe->mot_restriping = 0; diff --git a/lustre/obdclass/obd_sysfs.c b/lustre/obdclass/obd_sysfs.c index 0ea7191..eecf274 100644 --- a/lustre/obdclass/obd_sysfs.c +++ b/lustre/obdclass/obd_sysfs.c @@ -53,6 +53,9 @@ bool obd_enable_health_write; EXPORT_SYMBOL(obd_enable_health_write); +bool obd_enable_fname_encoding = false; +EXPORT_SYMBOL(obd_enable_fname_encoding); + struct static_lustre_uintvalue_attr { struct { struct attribute attr; @@ -277,6 +280,28 @@ static ssize_t enable_health_write_store(struct kobject *kobj, LUSTRE_RW_ATTR(enable_health_write); #endif /* HAVE_SERVER_SUPPORT */ +static ssize_t enable_fname_encoding_show(struct kobject *kobj, + struct attribute *attr, + char *buf) +{ + return scnprintf(buf, PAGE_SIZE, "%u\n", + obd_enable_fname_encoding); +} + +static ssize_t enable_fname_encoding_store(struct kobject *kobj, + struct attribute *attr, + const char *buf, size_t count) +{ + int rc = 0; + + rc = kstrtobool(buf, &obd_enable_fname_encoding); + if (rc) + return rc; + + return count; +} +LUSTRE_RW_ATTR(enable_fname_encoding); + static ssize_t jobid_var_show(struct kobject *kobj, struct attribute *attr, char *buf) { @@ -488,6 +513,7 @@ static struct attribute *lustre_attrs[] = { &lustre_sattr_bulk_timeout.u.attr, &lustre_attr_no_transno.attr, #endif + &lustre_attr_enable_fname_encoding.attr, &lustre_sattr_lbug_on_eviction.u.attr, &lustre_sattr_ping_interval.u.attr, &lustre_sattr_evict_multiplier.u.attr, @@ -785,3 +811,38 @@ int class_procfs_clean(void) RETURN(0); } + +/* filename encoding */ +#define ENCODE_FN_LEN BASE64URL_CHARS(sizeof(__u64)) + 2 +#define FN_COUNT 64 /* must be power-of-two value */ +const char *encode_fn_len(const char *fname, size_t namelen) +{ + static char fn_array[FN_COUNT][ENCODE_FN_LEN]; + static atomic_t fn_index; + char *new_fn = NULL; + char *tmp; + int encode_len = ENCODE_FN_LEN; + int rc; + __u64 hash; + + CDEBUG(D_TRACE, "Process filename at %p\n", &fname); + if (!fname || !namelen || !obd_enable_fname_encoding) + return fname; + + hash = lustre_hash_fnv_1a_64(fname, namelen); + new_fn = fn_array[atomic_inc_return(&fn_index) & (FN_COUNT - 1)]; + tmp = new_fn; + rc = gss_base64url_encode(&tmp, &encode_len, (__u8 *)&hash, + sizeof(hash)); + if (rc < 0) { + if (encode_len == -1) + CERROR("Encode buffer size(%d) is too small: rc = %d\n", + (int)ENCODE_FN_LEN, rc); + else + CERROR("Failed to encode name(%zu): rc = %d\n", + namelen, rc); + } + + return new_fn; +} +EXPORT_SYMBOL(encode_fn_len); diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index 71281d4..ca163dc 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -6439,8 +6439,8 @@ static int osd_ea_lookup_rec(const struct lu_env *env, struct osd_object *obj, osd_obj2dev(obj), id, fid); } CDEBUG(D_INODE, DFID"/"DNAME" => "DFID"\n", - PFID(lu_object_fid(&obj->oo_dt.do_lu)), PNAME(ln), - PFID(fid)); + PFID(lu_object_fid(&obj->oo_dt.do_lu)), + encode_fn_luname(ln), PFID(fid)); } else { rc = PTR_ERR(bh); } @@ -6553,6 +6553,7 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt, struct dt_insert_rec *rec1 = (struct dt_insert_rec *)rec; const struct lu_fid *fid = rec1->rec_fid; const char *name = (const char *)key; + int namelen = strlen(name); struct osd_thread_info *oti = osd_oti_get(env); struct inode *child_inode = NULL; struct osd_idmap_cache *idc; @@ -6595,7 +6596,7 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt, if (idc->oic_remote) { /* Insert remote entry */ - if (strcmp(name, dotdot) == 0 && strlen(name) == 2) { + if (strcmp(name, dotdot) == 0 && namelen == 2) { child_inode = igrab(osd->od_mdt_map->omm_remote_parent->d_inode); } else { @@ -6629,7 +6630,8 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt, rc = osd_ea_add_rec(env, obj, child_inode, name, fid, th); CDEBUG(D_INODE, "parent %lu insert %s:%lu rc = %d\n", - obj->oo_inode->i_ino, name, child_inode->i_ino, rc); + obj->oo_inode->i_ino, encode_fn_len(name, namelen), + child_inode->i_ino, rc); if (child_inode && child_inode != oti->oti_inode) iput(child_inode); @@ -7395,9 +7397,9 @@ osd_dirent_reinsert(const struct lu_env *env, struct osd_device *dev, */ if (rc != 0) CDEBUG(D_LFSCK, - "%s: fail to reinsert the dirent, dir = %lu/%u, name = %.*s, "DFID": rc = %d\n", + "%s: fail to reinsert the dirent, dir = %lu/%u, name = "DNAME", "DFID": rc = %d\n", osd_ino2name(inode), dir->i_ino, dir->i_generation, - namelen, dentry->d_name.name, PFID(fid), rc); + encode_fn_dentry(dentry), PFID(fid), rc); RETURN(rc); } @@ -7449,12 +7451,10 @@ osd_dirent_check_repair(const struct lu_env *env, struct osd_object *obj, *attr |= LUDA_UNKNOWN; rc = 0; } else { - CDEBUG(D_LFSCK, "%s: fail to iget() for dirent " - "check_repair, dir = %lu/%u, name = %.*s, " - "ino = %llu, rc = %d\n", + CDEBUG(D_LFSCK, + "%s: fail to iget() for dirent check_repair, dir = %lu/%u, name = "DNAME", ino = %llu: rc = %d\n", devname, dir->i_ino, dir->i_generation, - ent->oied_namelen, ent->oied_name, - ent->oied_ino, rc); + encode_fn_oied(ent), ent->oied_ino, rc); } RETURN(rc); @@ -7497,10 +7497,9 @@ again: rc = PTR_ERR(jh); CDEBUG(D_LFSCK, "%s: fail to start trans for dirent " "check_repair, dir = %lu/%u, credits = %d, " - "name = %.*s, ino = %llu: rc = %d\n", + "name = "DNAME", ino = %llu: rc = %d\n", devname, dir->i_ino, dir->i_generation, credits, - ent->oied_namelen, ent->oied_name, - ent->oied_ino, rc); + encode_fn_oied(ent), ent->oied_ino, rc); GOTO(out_inode, rc); } @@ -7565,10 +7564,9 @@ again: *attr |= LUDA_IGNORE; } else { CDEBUG(D_LFSCK, "%s: expect remote agent " - "parent directory, but got %.*s under " + "parent directory, but got "DNAME" under " "dir = %lu/%u with the FID "DFID"\n", - devname, ent->oied_namelen, - ent->oied_name, dir->i_ino, + devname, encode_fn_oied(ent), dir->i_ino, dir->i_generation, PFID(tfid)); *attr |= LUDA_UNKNOWN; @@ -7591,10 +7589,10 @@ again: */ CDEBUG(D_LFSCK, "%s: the target inode does not " "recognize the dirent, dir = %lu/%u, " - " name = %.*s, ino = %llu, " + " name = "DNAME", ino = %llu, " DFID": rc = %d\n", devname, dir->i_ino, - dir->i_generation, ent->oied_namelen, - ent->oied_name, ent->oied_ino, PFID(fid), rc); + dir->i_generation, encode_fn_oied(ent), + ent->oied_ino, PFID(fid), rc); *attr |= LUDA_UNKNOWN; GOTO(out, rc = 0); @@ -7602,10 +7600,10 @@ again: if (rc && rc != -ENODATA) { CDEBUG(D_LFSCK, "%s: fail to verify FID in the dirent, " - "dir = %lu/%u, name = %.*s, ino = %llu, " + "dir = %lu/%u, name = "DNAME", ino = %llu, " DFID": rc = %d\n", devname, dir->i_ino, - dir->i_generation, ent->oied_namelen, - ent->oied_name, ent->oied_ino, PFID(fid), rc); + dir->i_generation, encode_fn_oied(ent), + ent->oied_ino, PFID(fid), rc); *attr |= LUDA_UNKNOWN; GOTO(out, rc = 0); @@ -7646,11 +7644,11 @@ again: *attr |= LUDA_REPAIR; else CDEBUG(D_LFSCK, "%s: fail to re-insert FID after " - "the dirent, dir = %lu/%u, name = %.*s, " + "the dirent, dir = %lu/%u, name = "DNAME", " "ino = %llu, "DFID": rc = %d\n", devname, dir->i_ino, dir->i_generation, - ent->oied_namelen, ent->oied_name, - ent->oied_ino, PFID(fid), rc); + encode_fn_oied(ent), ent->oied_ino, + PFID(fid), rc); } else { /* lma is NULL, trust the FID-in-dirent if it is valid. */ if (*attr & LUDA_VERIFY_DRYRUN) { @@ -7690,11 +7688,11 @@ again: else CDEBUG(D_LFSCK, "%s: fail to set LMA for " "update dirent, dir = %lu/%u, " - "name = %.*s, ino = %llu, " + "name = "DNAME", ino = %llu, " DFID": rc = %d\n", devname, dir->i_ino, dir->i_generation, - ent->oied_namelen, ent->oied_name, - ent->oied_ino, PFID(fid), rc); + encode_fn_oied(ent), ent->oied_ino, + PFID(fid), rc); } else if (dev->od_index == 0) { lu_igif_build(fid, inode->i_ino, inode->i_generation); /* @@ -7708,11 +7706,11 @@ again: else CDEBUG(D_LFSCK, "%s: fail to append IGIF " "after the dirent, dir = %lu/%u, " - "name = %.*s, ino = %llu, " + "name = "DNAME", ino = %llu, " DFID": rc = %d\n", devname, dir->i_ino, dir->i_generation, - ent->oied_namelen, ent->oied_name, - ent->oied_ino, PFID(fid), rc); + encode_fn_oied(ent), ent->oied_ino, + PFID(fid), rc); } } -- 1.8.3.1