summaryrefslogtreecommitdiffstats
path: root/fs/overlayfs/dir.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@redhat.com>2016-12-16 11:02:57 +0100
committerMiklos Szeredi <mszeredi@redhat.com>2016-12-16 11:02:57 +0100
commit3ea22a71b65b6743a53e286ff4991a06b9d2597c (patch)
treea2dc297b25132f5ac1e449dd4b0e7d4322627c4b /fs/overlayfs/dir.c
parentovl: allow redirect_dir to default to "on" (diff)
downloadlinux-3ea22a71b65b6743a53e286ff4991a06b9d2597c.tar.xz
linux-3ea22a71b65b6743a53e286ff4991a06b9d2597c.zip
ovl: allow setting max size of redirect
Add a module option to allow tuning the max size of absolute redirects. Default is 256. Size of relative redirects is naturally limited by the the underlying filesystem's max filename length (usually 255). Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to '')
-rw-r--r--fs/overlayfs/dir.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 4257a4a0ed72..b84d61b353cd 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -12,12 +12,18 @@
#include <linux/xattr.h>
#include <linux/security.h>
#include <linux/cred.h>
+#include <linux/module.h>
#include <linux/posix_acl.h>
#include <linux/posix_acl_xattr.h>
#include <linux/atomic.h>
#include <linux/ratelimit.h>
#include "overlayfs.h"
+static unsigned short ovl_redirect_max = 256;
+module_param_named(redirect_max, ovl_redirect_max, ushort, 0644);
+MODULE_PARM_DESC(ovl_redirect_max,
+ "Maximum length of absolute redirect xattr value");
+
void ovl_cleanup(struct inode *wdir, struct dentry *wdentry)
{
int err;
@@ -777,13 +783,11 @@ static bool ovl_can_move(struct dentry *dentry)
!d_is_dir(dentry) || !ovl_type_merge_or_lower(dentry);
}
-#define OVL_REDIRECT_MAX 256
-
static char *ovl_get_redirect(struct dentry *dentry, bool samedir)
{
char *buf, *ret;
struct dentry *d, *tmp;
- int buflen = OVL_REDIRECT_MAX + 1;
+ int buflen = ovl_redirect_max + 1;
if (samedir) {
ret = kstrndup(dentry->d_name.name, dentry->d_name.len,