From d6debe2e9f3cd8d9fce9da66b2accefe9cecde1b Mon Sep 17 00:00:00 2001 From: Jian Yu Date: Mon, 25 Nov 2013 14:23:58 +0800 Subject: [PATCH] LU-4219 mdd: limit os_namelen to the max of NAME_MAX While running pathconf(".", _PC_NAME_MAX) on ldiskfs-based Lustre filesystem, it returns 255 (NAME_MAX). However, on zfs-based Lustre filesystem, it returns 256 (MAXNAMELEN). Since Lustre can not handle the name length large than NAME_MAX, this patch limits the value of os_namelen in mdd_statfs() to the max of NAME_MAX. Test-Parameters: envdefinitions=SLOW=yes \ mdtfilesystemtype=zfs mdsfilesystemtype=zfs ostfilesystemtype=zfs \ ostcount=2 testlist=posix Lustre-commit: 7d197837e0d7eb5f40a928a8f6c57270493b8996 Lustre-change: http://review.whamcloud.com/8217 Signed-off-by: Bob Glossman Signed-off-by: Jian Yu Change-Id: I6de2f4c45f33c362b5ff61575f0ebc75477c6b48 Reviewed-on: http://review.whamcloud.com/8276 Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo --- lustre/mdd/mdd_device.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c index c10a9a1..505ab08 100644 --- a/lustre/mdd/mdd_device.c +++ b/lustre/mdd/mdd_device.c @@ -927,16 +927,18 @@ static int mdd_root_get(const struct lu_env *env, * No permission check is needed. */ static int mdd_statfs(const struct lu_env *env, struct md_device *m, - struct obd_statfs *sfs) + struct obd_statfs *sfs) { - struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev); - int rc; + struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev); + int rc; - ENTRY; + ENTRY; - rc = mdd_child_ops(mdd)->dt_statfs(env, mdd->mdd_child, sfs); + rc = mdd_child_ops(mdd)->dt_statfs(env, mdd->mdd_child, sfs); - RETURN(rc); + sfs->os_namelen = min_t(__u32, sfs->os_namelen, NAME_MAX); + + RETURN(rc); } /* -- 1.8.3.1