diff options
| -rw-r--r-- | fs/overlayfs/Kconfig | 14 | ||||
| -rw-r--r-- | fs/overlayfs/super.c | 5 |
2 files changed, 19 insertions, 0 deletions
diff --git a/fs/overlayfs/Kconfig b/fs/overlayfs/Kconfig index 34355818a2e0..0daac5112f7a 100644 --- a/fs/overlayfs/Kconfig +++ b/fs/overlayfs/Kconfig | |||
| @@ -8,3 +8,17 @@ config OVERLAY_FS | |||
| 8 | merged with the 'upper' object. | 8 | merged with the 'upper' object. |
| 9 | 9 | ||
| 10 | For more information see Documentation/filesystems/overlayfs.txt | 10 | For more information see Documentation/filesystems/overlayfs.txt |
| 11 | |||
| 12 | config OVERLAY_FS_REDIRECT_DIR | ||
| 13 | bool "Overlayfs: turn on redirect dir feature by default" | ||
| 14 | depends on OVERLAY_FS | ||
| 15 | help | ||
| 16 | If this config option is enabled then overlay filesystems will use | ||
| 17 | redirects when renaming directories by default. In this case it is | ||
| 18 | still possible to turn off redirects globally with the | ||
| 19 | "redirect_dir=off" module option or on a filesystem instance basis | ||
| 20 | with the "redirect_dir=off" mount option. | ||
| 21 | |||
| 22 | Note, that redirects are not backward compatible. That is, mounting | ||
| 23 | an overlay which has redirects on a kernel that doesn't support this | ||
| 24 | feature will have unexpected results. | ||
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 520f9ab0e9ef..2750aef24d16 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c | |||
| @@ -28,6 +28,10 @@ struct ovl_dir_cache; | |||
| 28 | 28 | ||
| 29 | #define OVL_MAX_STACK 500 | 29 | #define OVL_MAX_STACK 500 |
| 30 | 30 | ||
| 31 | static bool ovl_redirect_dir_def = IS_ENABLED(CONFIG_OVERLAY_FS_REDIRECT_DIR); | ||
| 32 | module_param_named(redirect_dir, ovl_redirect_dir_def, bool, 0644); | ||
| 33 | MODULE_PARM_DESC(ovl_redirect_dir_def, | ||
| 34 | "Default to on or off for the redirect_dir feature"); | ||
| 31 | 35 | ||
| 32 | static void ovl_dentry_release(struct dentry *dentry) | 36 | static void ovl_dentry_release(struct dentry *dentry) |
| 33 | { | 37 | { |
| @@ -702,6 +706,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) | |||
| 702 | if (!ufs) | 706 | if (!ufs) |
| 703 | goto out; | 707 | goto out; |
| 704 | 708 | ||
| 709 | ufs->config.redirect_dir = ovl_redirect_dir_def; | ||
| 705 | err = ovl_parse_opt((char *) data, &ufs->config); | 710 | err = ovl_parse_opt((char *) data, &ufs->config); |
| 706 | if (err) | 711 | if (err) |
| 707 | goto out_free_config; | 712 | goto out_free_config; |
