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 <bob.glossman@intel.com>
Signed-off-by: Jian Yu <jian.yu@intel.com>
Change-Id: I6de2f4c45f33c362b5ff61575f0ebc75477c6b48
Reviewed-on: http://review.whamcloud.com/8276
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
* 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);
}
/*