Some code routines and structure members are unreachable when CONFIG_TMPFS_QUOTA is off. Wrap additional shmem quota related code to eliniate these unreachable sections. Signed-off-by: Kemeng Shi <shikemeng@xxxxxxxxxxxxxxx> --- include/linux/shmem_fs.h | 4 ++++ mm/shmem.c | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index 0b273a7b9f01..4873359a5442 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h @@ -47,12 +47,14 @@ struct shmem_inode_info { (FS_IMMUTABLE_FL | FS_APPEND_FL | FS_NODUMP_FL | FS_NOATIME_FL | FS_CASEFOLD_FL) #define SHMEM_FL_INHERITED (FS_NODUMP_FL | FS_NOATIME_FL | FS_CASEFOLD_FL) +#ifdef CONFIG_TMPFS_QUOTA struct shmem_quota_limits { qsize_t usrquota_bhardlimit; /* Default user quota block hard limit */ qsize_t usrquota_ihardlimit; /* Default user quota inode hard limit */ qsize_t grpquota_bhardlimit; /* Default group quota block hard limit */ qsize_t grpquota_ihardlimit; /* Default group quota inode hard limit */ }; +#endif struct shmem_sb_info { unsigned long max_blocks; /* How many blocks are allowed */ @@ -72,7 +74,9 @@ struct shmem_sb_info { spinlock_t shrinklist_lock; /* Protects shrinklist */ struct list_head shrinklist; /* List of shinkable inodes */ unsigned long shrinklist_len; /* Length of shrinklist */ +#ifdef CONFIG_TMPFS_QUOTA struct shmem_quota_limits qlimits; /* Default quota limits */ +#endif }; static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) diff --git a/mm/shmem.c b/mm/shmem.c index 9f5e1eccaacb..e3e05bbb6db2 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -121,8 +121,10 @@ struct shmem_options { int huge; int seen; bool noswap; +#ifdef CONFIG_TMPFS_QUOTA unsigned short quota_types; struct shmem_quota_limits qlimits; +#endif #if IS_ENABLED(CONFIG_UNICODE) struct unicode_map *encoding; bool strict_encoding; @@ -132,7 +134,9 @@ struct shmem_options { #define SHMEM_SEEN_HUGE 4 #define SHMEM_SEEN_INUMS 8 #define SHMEM_SEEN_NOSWAP 16 +#ifdef CONFIG_TMPFS_QUOTA #define SHMEM_SEEN_QUOTA 32 +#endif }; #ifdef CONFIG_TRANSPARENT_HUGEPAGE @@ -4549,6 +4553,7 @@ enum shmem_param { Opt_inode32, Opt_inode64, Opt_noswap, +#ifdef CONFIG_TMPFS_QUOTA Opt_quota, Opt_usrquota, Opt_grpquota, @@ -4556,6 +4561,7 @@ enum shmem_param { Opt_usrquota_inode_hardlimit, Opt_grpquota_block_hardlimit, Opt_grpquota_inode_hardlimit, +#endif Opt_casefold_version, Opt_casefold, Opt_strict_encoding, @@ -4742,6 +4748,7 @@ static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param) ctx->noswap = true; ctx->seen |= SHMEM_SEEN_NOSWAP; break; +#ifdef CONFIG_TMPFS_QUOTA case Opt_quota: if (fc->user_ns != &init_user_ns) return invalfc(fc, "Quotas in unprivileged tmpfs mounts are unsupported"); @@ -4796,6 +4803,7 @@ static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param) "Group quota inode hardlimit too large."); ctx->qlimits.grpquota_ihardlimit = size; break; +#endif case Opt_casefold_version: return shmem_parse_opt_casefold(fc, param, false); case Opt_casefold: @@ -4899,13 +4907,13 @@ static int shmem_reconfigure(struct fs_context *fc) goto out; } +#ifdef CONFIG_TMPFS_QUOTA if (ctx->seen & SHMEM_SEEN_QUOTA && !sb_any_quota_loaded(fc->root->d_sb)) { err = "Cannot enable quota on remount"; goto out; } -#ifdef CONFIG_TMPFS_QUOTA #define CHANGED_LIMIT(name) \ (ctx->qlimits.name## hardlimit && \ (ctx->qlimits.name## hardlimit != sbinfo->qlimits.name## hardlimit)) -- 2.30.0