diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-01 13:12:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-01 13:12:15 -0400 |
commit | 4edebed86690eb8db9af3ab85baf4a34e73266cc (patch) | |
tree | 8ab144b08f490f239fa62be52470860c9311664d /fs/ext4/ioctl.c | |
parent | 51eab603f5c86dd1eae4c525df3e7f7eeab401d6 (diff) | |
parent | 5e44f8c374dc4f8eadf61cd18b2c0d46bc87c1b7 (diff) |
Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
Pull Ext4 updates from Theodore Ts'o:
"The major new feature added in this update is Darrick J Wong's
metadata checksum feature, which adds crc32 checksums to ext4's
metadata fields.
There is also the usual set of cleanups and bug fixes."
* tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (44 commits)
ext4: hole-punch use truncate_pagecache_range
jbd2: use kmem_cache_zalloc wrapper instead of flag
ext4: remove mb_groups before tearing down the buddy_cache
ext4: add ext4_mb_unload_buddy in the error path
ext4: don't trash state flags in EXT4_IOC_SETFLAGS
ext4: let getattr report the right blocks in delalloc+bigalloc
ext4: add missing save_error_info() to ext4_error()
ext4: add debugging trigger for ext4_error()
ext4: protect group inode free counting with group lock
ext4: use consistent ssize_t type in ext4_file_write()
ext4: fix format flag in ext4_ext_binsearch_idx()
ext4: cleanup in ext4_discard_allocated_blocks()
ext4: return ENOMEM when mounts fail due to lack of memory
ext4: remove redundundant "(char *) bh->b_data" casts
ext4: disallow hard-linked directory in ext4_lookup
ext4: fix potential integer overflow in alloc_flex_gd()
ext4: remove needs_recovery in ext4_mb_init()
ext4: force ro mount if ext4_setup_super() fails
ext4: fix potential NULL dereference in ext4_free_inodes_counts()
ext4/jbd2: add metadata checksumming to the list of supported features
...
Diffstat (limited to 'fs/ext4/ioctl.c')
-rw-r--r-- | fs/ext4/ioctl.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index 6eee25591b81..8ad112ae0ade 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c | |||
@@ -38,7 +38,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
38 | handle_t *handle = NULL; | 38 | handle_t *handle = NULL; |
39 | int err, migrate = 0; | 39 | int err, migrate = 0; |
40 | struct ext4_iloc iloc; | 40 | struct ext4_iloc iloc; |
41 | unsigned int oldflags; | 41 | unsigned int oldflags, mask, i; |
42 | unsigned int jflag; | 42 | unsigned int jflag; |
43 | 43 | ||
44 | if (!inode_owner_or_capable(inode)) | 44 | if (!inode_owner_or_capable(inode)) |
@@ -115,8 +115,14 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
115 | if (err) | 115 | if (err) |
116 | goto flags_err; | 116 | goto flags_err; |
117 | 117 | ||
118 | flags = flags & EXT4_FL_USER_MODIFIABLE; | 118 | for (i = 0, mask = 1; i < 32; i++, mask <<= 1) { |
119 | flags |= oldflags & ~EXT4_FL_USER_MODIFIABLE; | 119 | if (!(mask & EXT4_FL_USER_MODIFIABLE)) |
120 | continue; | ||
121 | if (mask & flags) | ||
122 | ext4_set_inode_flag(inode, i); | ||
123 | else | ||
124 | ext4_clear_inode_flag(inode, i); | ||
125 | } | ||
120 | ei->i_flags = flags; | 126 | ei->i_flags = flags; |
121 | 127 | ||
122 | ext4_set_inode_flags(inode); | 128 | ext4_set_inode_flags(inode); |
@@ -152,6 +158,13 @@ flags_out: | |||
152 | if (!inode_owner_or_capable(inode)) | 158 | if (!inode_owner_or_capable(inode)) |
153 | return -EPERM; | 159 | return -EPERM; |
154 | 160 | ||
161 | if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb, | ||
162 | EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) { | ||
163 | ext4_warning(sb, "Setting inode version is not " | ||
164 | "supported with metadata_csum enabled."); | ||
165 | return -ENOTTY; | ||
166 | } | ||
167 | |||
155 | err = mnt_want_write_file(filp); | 168 | err = mnt_want_write_file(filp); |
156 | if (err) | 169 | if (err) |
157 | return err; | 170 | return err; |