aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2015-06-16 18:48:31 -0400
committerJens Axboe <axboe@fb.com>2015-06-17 14:47:39 -0400
commit46b15caa7cb19b0f6e3bc8ebaee5bc1bb2e35110 (patch)
tree88f100ba187aa71921ef99862129dd78de329241 /include/linux
parentdd73e4b7df9589fa603fc6d128b4f6cabb250e8e (diff)
vfs, writeback: replace FS_CGROUP_WRITEBACK with SB_I_CGROUPWB
FS_CGROUP_WRITEBACK indicates whether a file_system_type supports cgroup writeback; however, different super_blocks of the same file_system_type may or may not support cgroup writeback depending on filesystem options. This patch replaces FS_CGROUP_WRITEBACK with a per-super_block flag. super_block->s_flags carries some internal flags in the high bits but it's exposd to userland through uapi header and running out of space anyway. This patch adds a new field super_block->s_iflags to carry kernel-internal flags. It is currently only used by the new SB_I_CGROUPWB flag whose concatenated and abbreviated name is for consistency with other super_block flags. ext2_fill_super() is updated to set SB_I_CGROUPWB. v2: Added super_block->s_iflags instead of stealing another high bit from sb->s_flags as suggested by Christoph and Jan. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: linux-fsdevel@vger.kernel.org Cc: Christoph Hellwig <hch@infradead.org> Cc: Jan Kara <jack@suse.cz> Cc: linux-ext4@vger.kernel.org Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/backing-dev.h2
-rw-r--r--include/linux/fs.h4
2 files changed, 4 insertions, 2 deletions
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
index dfce80869145..a13181a42b9a 100644
--- a/include/linux/backing-dev.h
+++ b/include/linux/backing-dev.h
@@ -260,7 +260,7 @@ static inline bool inode_cgwb_enabled(struct inode *inode)
260 260
261 return bdi_cap_account_dirty(bdi) && 261 return bdi_cap_account_dirty(bdi) &&
262 (bdi->capabilities & BDI_CAP_CGROUP_WRITEBACK) && 262 (bdi->capabilities & BDI_CAP_CGROUP_WRITEBACK) &&
263 (inode->i_sb->s_type->fs_flags & FS_CGROUP_WRITEBACK); 263 (inode->i_sb->s_iflags & SB_I_CGROUPWB);
264} 264}
265 265
266/** 266/**
diff --git a/include/linux/fs.h b/include/linux/fs.h
index b5e1dcfbc5e3..2c5e33a5b2af 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1241,6 +1241,8 @@ struct mm_struct;
1241#define UMOUNT_NOFOLLOW 0x00000008 /* Don't follow symlink on umount */ 1241#define UMOUNT_NOFOLLOW 0x00000008 /* Don't follow symlink on umount */
1242#define UMOUNT_UNUSED 0x80000000 /* Flag guaranteed to be unused */ 1242#define UMOUNT_UNUSED 0x80000000 /* Flag guaranteed to be unused */
1243 1243
1244/* sb->s_iflags */
1245#define SB_I_CGROUPWB 0x00000001 /* cgroup-aware writeback enabled */
1244 1246
1245/* Possible states of 'frozen' field */ 1247/* Possible states of 'frozen' field */
1246enum { 1248enum {
@@ -1279,6 +1281,7 @@ struct super_block {
1279 const struct quotactl_ops *s_qcop; 1281 const struct quotactl_ops *s_qcop;
1280 const struct export_operations *s_export_op; 1282 const struct export_operations *s_export_op;
1281 unsigned long s_flags; 1283 unsigned long s_flags;
1284 unsigned long s_iflags; /* internal SB_I_* flags */
1282 unsigned long s_magic; 1285 unsigned long s_magic;
1283 struct dentry *s_root; 1286 struct dentry *s_root;
1284 struct rw_semaphore s_umount; 1287 struct rw_semaphore s_umount;
@@ -1912,7 +1915,6 @@ struct file_system_type {
1912#define FS_HAS_SUBTYPE 4 1915#define FS_HAS_SUBTYPE 4
1913#define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */ 1916#define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */
1914#define FS_USERNS_DEV_MOUNT 16 /* A userns mount does not imply MNT_NODEV */ 1917#define FS_USERNS_DEV_MOUNT 16 /* A userns mount does not imply MNT_NODEV */
1915#define FS_CGROUP_WRITEBACK 32 /* Supports cgroup-aware writeback */
1916#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */ 1918#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
1917 struct dentry *(*mount) (struct file_system_type *, int, 1919 struct dentry *(*mount) (struct file_system_type *, int,
1918 const char *, void *); 1920 const char *, void *);