aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@redhat.com>2016-12-16 05:02:57 -0500
committerMiklos Szeredi <mszeredi@redhat.com>2016-12-16 05:02:57 -0500
commit3ea22a71b65b6743a53e286ff4991a06b9d2597c (patch)
treea2dc297b25132f5ac1e449dd4b0e7d4322627c4b
parent688ea0e5a0e2278e2fcd0014324ab1ba68e70ad7 (diff)
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>
-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 @@
12#include <linux/xattr.h> 12#include <linux/xattr.h>
13#include <linux/security.h> 13#include <linux/security.h>
14#include <linux/cred.h> 14#include <linux/cred.h>
15#include <linux/module.h>
15#include <linux/posix_acl.h> 16#include <linux/posix_acl.h>
16#include <linux/posix_acl_xattr.h> 17#include <linux/posix_acl_xattr.h>
17#include <linux/atomic.h> 18#include <linux/atomic.h>
18#include <linux/ratelimit.h> 19#include <linux/ratelimit.h>
19#include "overlayfs.h" 20#include "overlayfs.h"
20 21
22static unsigned short ovl_redirect_max = 256;
23module_param_named(redirect_max, ovl_redirect_max, ushort, 0644);
24MODULE_PARM_DESC(ovl_redirect_max,
25 "Maximum length of absolute redirect xattr value");
26
21void ovl_cleanup(struct inode *wdir, struct dentry *wdentry) 27void ovl_cleanup(struct inode *wdir, struct dentry *wdentry)
22{ 28{
23 int err; 29 int err;
@@ -777,13 +783,11 @@ static bool ovl_can_move(struct dentry *dentry)
777 !d_is_dir(dentry) || !ovl_type_merge_or_lower(dentry); 783 !d_is_dir(dentry) || !ovl_type_merge_or_lower(dentry);
778} 784}
779 785
780#define OVL_REDIRECT_MAX 256
781
782static char *ovl_get_redirect(struct dentry *dentry, bool samedir) 786static char *ovl_get_redirect(struct dentry *dentry, bool samedir)
783{ 787{
784 char *buf, *ret; 788 char *buf, *ret;
785 struct dentry *d, *tmp; 789 struct dentry *d, *tmp;
786 int buflen = OVL_REDIRECT_MAX + 1; 790 int buflen = ovl_redirect_max + 1;
787 791
788 if (samedir) { 792 if (samedir) {
789 ret = kstrndup(dentry->d_name.name, dentry->d_name.len, 793 ret = kstrndup(dentry->d_name.name, dentry->d_name.len,