aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Ma <boyu.mt@taobao.com>2012-12-10 16:30:43 -0500
committerTheodore Ts'o <tytso@mit.edu>2012-12-10 16:30:43 -0500
commit939da1084458246d2e29dd921c2012c177000e96 (patch)
treed1f49c9ff1f99769a75fdc382b0c2e8a047c5475
parent187fd030d801b02b0daeb010dbf7c0113be3156d (diff)
ext4: Remove CONFIG_EXT4_FS_XATTR
Ted has sent out a RFC about removing this feature. Eric and Jan confirmed that both RedHat and SUSE enable this feature in all their product. David also said that "As far as I know, it's enabled in all Android kernels that use ext4." So it seems OK for us. And what's more, as inline data depends its implementation on xattr, and to be frank, I don't run any test again inline data enabled while xattr disabled. So I think we should add inline data and remove this config option in the same release. [ The savings if you disable CONFIG_EXT4_FS_XATTR is only 27k, which isn't much in the grand scheme of things. Since no one seems to be testing this configuration except for some automated compile farms, on balance we are better removing this config option, and so that it is effectively always enabled. -- tytso ] Cc: David Brown <davidb@codeaurora.org> Cc: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Tao Ma <boyu.mt@taobao.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--Documentation/filesystems/ext4.txt9
-rw-r--r--fs/Kconfig4
-rw-r--r--fs/ext4/Kconfig15
-rw-r--r--fs/ext4/Makefile4
-rw-r--r--fs/ext4/ext4.h2
-rw-r--r--fs/ext4/file.c2
-rw-r--r--fs/ext4/namei.c4
-rw-r--r--fs/ext4/super.c9
-rw-r--r--fs/ext4/symlink.c4
-rw-r--r--fs/ext4/xattr.h235
10 files changed, 7 insertions, 281 deletions
diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt
index 104322bf378c..34ea4f1fa6ea 100644
--- a/Documentation/filesystems/ext4.txt
+++ b/Documentation/filesystems/ext4.txt
@@ -200,12 +200,9 @@ inode_readahead_blks=n This tuning parameter controls the maximum
200 table readahead algorithm will pre-read into 200 table readahead algorithm will pre-read into
201 the buffer cache. The default value is 32 blocks. 201 the buffer cache. The default value is 32 blocks.
202 202
203nouser_xattr Disables Extended User Attributes. If you have extended 203nouser_xattr Disables Extended User Attributes. See the
204 attribute support enabled in the kernel configuration 204 attr(5) manual page and http://acl.bestbits.at/
205 (CONFIG_EXT4_FS_XATTR), extended attribute support 205 for more information about extended attributes.
206 is enabled by default on mount. See the attr(5) manual
207 page and http://acl.bestbits.at/ for more information
208 about extended attributes.
209 206
210noacl This option disables POSIX Access Control List 207noacl This option disables POSIX Access Control List
211 support. If ACL support is enabled in the kernel 208 support. If ACL support is enabled in the kernel
diff --git a/fs/Kconfig b/fs/Kconfig
index f95ae3a027f3..eaff24a19502 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -28,8 +28,8 @@ config FS_MBCACHE
28 tristate 28 tristate
29 default y if EXT2_FS=y && EXT2_FS_XATTR 29 default y if EXT2_FS=y && EXT2_FS_XATTR
30 default y if EXT3_FS=y && EXT3_FS_XATTR 30 default y if EXT3_FS=y && EXT3_FS_XATTR
31 default y if EXT4_FS=y && EXT4_FS_XATTR 31 default y if EXT4_FS=y
32 default m if EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4_FS_XATTR 32 default m if EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4_FS
33 33
34source "fs/reiserfs/Kconfig" 34source "fs/reiserfs/Kconfig"
35source "fs/jfs/Kconfig" 35source "fs/jfs/Kconfig"
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index c22f17021b6e..0a475c881852 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -39,22 +39,8 @@ config EXT4_USE_FOR_EXT23
39 compiled kernel size by using one file system driver for 39 compiled kernel size by using one file system driver for
40 ext2, ext3, and ext4 file systems. 40 ext2, ext3, and ext4 file systems.
41 41
42config EXT4_FS_XATTR
43 bool "Ext4 extended attributes"
44 depends on EXT4_FS
45 default y
46 help
47 Extended attributes are name:value pairs associated with inodes by
48 the kernel or by users (see the attr(5) manual page, or visit
49 <http://acl.bestbits.at/> for details).
50
51 If unsure, say N.
52
53 You need this for POSIX ACL support on ext4.
54
55config EXT4_FS_POSIX_ACL 42config EXT4_FS_POSIX_ACL
56 bool "Ext4 POSIX Access Control Lists" 43 bool "Ext4 POSIX Access Control Lists"
57 depends on EXT4_FS_XATTR
58 select FS_POSIX_ACL 44 select FS_POSIX_ACL
59 help 45 help
60 POSIX Access Control Lists (ACLs) support permissions for users and 46 POSIX Access Control Lists (ACLs) support permissions for users and
@@ -67,7 +53,6 @@ config EXT4_FS_POSIX_ACL
67 53
68config EXT4_FS_SECURITY 54config EXT4_FS_SECURITY
69 bool "Ext4 Security Labels" 55 bool "Ext4 Security Labels"
70 depends on EXT4_FS_XATTR
71 help 56 help
72 Security labels support alternative access control models 57 Security labels support alternative access control models
73 implemented by security modules like SELinux. This option 58 implemented by security modules like SELinux. This option
diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
index 3d96d5698538..0310fec2ee3d 100644
--- a/fs/ext4/Makefile
+++ b/fs/ext4/Makefile
@@ -7,8 +7,8 @@ obj-$(CONFIG_EXT4_FS) += ext4.o
7ext4-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o page-io.o \ 7ext4-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o page-io.o \
8 ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \ 8 ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
9 ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o \ 9 ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o \
10 mmp.o indirect.o extents_status.o 10 mmp.o indirect.o extents_status.o xattr.o xattr_user.o \
11 xattr_trusted.o inline.o
11 12
12ext4-$(CONFIG_EXT4_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o inline.o
13ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o 13ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o
14ext4-$(CONFIG_EXT4_FS_SECURITY) += xattr_security.o 14ext4-$(CONFIG_EXT4_FS_SECURITY) += xattr_security.o
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index b90e2720b826..e20dc38858d4 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -848,7 +848,6 @@ struct ext4_inode_info {
848#endif 848#endif
849 unsigned long i_flags; 849 unsigned long i_flags;
850 850
851#ifdef CONFIG_EXT4_FS_XATTR
852 /* 851 /*
853 * Extended attributes can be read independently of the main file 852 * Extended attributes can be read independently of the main file
854 * data. Taking i_mutex even when reading would cause contention 853 * data. Taking i_mutex even when reading would cause contention
@@ -857,7 +856,6 @@ struct ext4_inode_info {
857 * EAs. 856 * EAs.
858 */ 857 */
859 struct rw_semaphore xattr_sem; 858 struct rw_semaphore xattr_sem;
860#endif
861 859
862 struct list_head i_orphan; /* unlinked but open inodes */ 860 struct list_head i_orphan; /* unlinked but open inodes */
863 861
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 2f5759eb9f89..b64a60bf105a 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -656,12 +656,10 @@ const struct file_operations ext4_file_operations = {
656const struct inode_operations ext4_file_inode_operations = { 656const struct inode_operations ext4_file_inode_operations = {
657 .setattr = ext4_setattr, 657 .setattr = ext4_setattr,
658 .getattr = ext4_getattr, 658 .getattr = ext4_getattr,
659#ifdef CONFIG_EXT4_FS_XATTR
660 .setxattr = generic_setxattr, 659 .setxattr = generic_setxattr,
661 .getxattr = generic_getxattr, 660 .getxattr = generic_getxattr,
662 .listxattr = ext4_listxattr, 661 .listxattr = ext4_listxattr,
663 .removexattr = generic_removexattr, 662 .removexattr = generic_removexattr,
664#endif
665 .get_acl = ext4_get_acl, 663 .get_acl = ext4_get_acl,
666 .fiemap = ext4_fiemap, 664 .fiemap = ext4_fiemap,
667}; 665};
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index b37c21839833..cac448282331 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -3228,23 +3228,19 @@ const struct inode_operations ext4_dir_inode_operations = {
3228 .mknod = ext4_mknod, 3228 .mknod = ext4_mknod,
3229 .rename = ext4_rename, 3229 .rename = ext4_rename,
3230 .setattr = ext4_setattr, 3230 .setattr = ext4_setattr,
3231#ifdef CONFIG_EXT4_FS_XATTR
3232 .setxattr = generic_setxattr, 3231 .setxattr = generic_setxattr,
3233 .getxattr = generic_getxattr, 3232 .getxattr = generic_getxattr,
3234 .listxattr = ext4_listxattr, 3233 .listxattr = ext4_listxattr,
3235 .removexattr = generic_removexattr, 3234 .removexattr = generic_removexattr,
3236#endif
3237 .get_acl = ext4_get_acl, 3235 .get_acl = ext4_get_acl,
3238 .fiemap = ext4_fiemap, 3236 .fiemap = ext4_fiemap,
3239}; 3237};
3240 3238
3241const struct inode_operations ext4_special_inode_operations = { 3239const struct inode_operations ext4_special_inode_operations = {
3242 .setattr = ext4_setattr, 3240 .setattr = ext4_setattr,
3243#ifdef CONFIG_EXT4_FS_XATTR
3244 .setxattr = generic_setxattr, 3241 .setxattr = generic_setxattr,
3245 .getxattr = generic_getxattr, 3242 .getxattr = generic_getxattr,
3246 .listxattr = ext4_listxattr, 3243 .listxattr = ext4_listxattr,
3247 .removexattr = generic_removexattr, 3244 .removexattr = generic_removexattr,
3248#endif
3249 .get_acl = ext4_get_acl, 3245 .get_acl = ext4_get_acl,
3250}; 3246};
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index e1e216f8e9bd..7d53adff8bd3 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -997,9 +997,7 @@ static void init_once(void *foo)
997 struct ext4_inode_info *ei = (struct ext4_inode_info *) foo; 997 struct ext4_inode_info *ei = (struct ext4_inode_info *) foo;
998 998
999 INIT_LIST_HEAD(&ei->i_orphan); 999 INIT_LIST_HEAD(&ei->i_orphan);
1000#ifdef CONFIG_EXT4_FS_XATTR
1001 init_rwsem(&ei->xattr_sem); 1000 init_rwsem(&ei->xattr_sem);
1002#endif
1003 init_rwsem(&ei->i_data_sem); 1001 init_rwsem(&ei->i_data_sem);
1004 inode_init_once(&ei->vfs_inode); 1002 inode_init_once(&ei->vfs_inode);
1005} 1003}
@@ -1449,13 +1447,8 @@ static const struct mount_opts {
1449 {Opt_data_journal, EXT4_MOUNT_JOURNAL_DATA, MOPT_DATAJ}, 1447 {Opt_data_journal, EXT4_MOUNT_JOURNAL_DATA, MOPT_DATAJ},
1450 {Opt_data_ordered, EXT4_MOUNT_ORDERED_DATA, MOPT_DATAJ}, 1448 {Opt_data_ordered, EXT4_MOUNT_ORDERED_DATA, MOPT_DATAJ},
1451 {Opt_data_writeback, EXT4_MOUNT_WRITEBACK_DATA, MOPT_DATAJ}, 1449 {Opt_data_writeback, EXT4_MOUNT_WRITEBACK_DATA, MOPT_DATAJ},
1452#ifdef CONFIG_EXT4_FS_XATTR
1453 {Opt_user_xattr, EXT4_MOUNT_XATTR_USER, MOPT_SET}, 1450 {Opt_user_xattr, EXT4_MOUNT_XATTR_USER, MOPT_SET},
1454 {Opt_nouser_xattr, EXT4_MOUNT_XATTR_USER, MOPT_CLEAR}, 1451 {Opt_nouser_xattr, EXT4_MOUNT_XATTR_USER, MOPT_CLEAR},
1455#else
1456 {Opt_user_xattr, 0, MOPT_NOSUPPORT},
1457 {Opt_nouser_xattr, 0, MOPT_NOSUPPORT},
1458#endif
1459#ifdef CONFIG_EXT4_FS_POSIX_ACL 1452#ifdef CONFIG_EXT4_FS_POSIX_ACL
1460 {Opt_acl, EXT4_MOUNT_POSIX_ACL, MOPT_SET}, 1453 {Opt_acl, EXT4_MOUNT_POSIX_ACL, MOPT_SET},
1461 {Opt_noacl, EXT4_MOUNT_POSIX_ACL, MOPT_CLEAR}, 1454 {Opt_noacl, EXT4_MOUNT_POSIX_ACL, MOPT_CLEAR},
@@ -3368,9 +3361,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
3368 if (def_mount_opts & EXT4_DEFM_UID16) 3361 if (def_mount_opts & EXT4_DEFM_UID16)
3369 set_opt(sb, NO_UID32); 3362 set_opt(sb, NO_UID32);
3370 /* xattr user namespace & acls are now defaulted on */ 3363 /* xattr user namespace & acls are now defaulted on */
3371#ifdef CONFIG_EXT4_FS_XATTR
3372 set_opt(sb, XATTR_USER); 3364 set_opt(sb, XATTR_USER);
3373#endif
3374#ifdef CONFIG_EXT4_FS_POSIX_ACL 3365#ifdef CONFIG_EXT4_FS_POSIX_ACL
3375 set_opt(sb, POSIX_ACL); 3366 set_opt(sb, POSIX_ACL);
3376#endif 3367#endif
diff --git a/fs/ext4/symlink.c b/fs/ext4/symlink.c
index ed9354aff279..ff3711932018 100644
--- a/fs/ext4/symlink.c
+++ b/fs/ext4/symlink.c
@@ -35,22 +35,18 @@ const struct inode_operations ext4_symlink_inode_operations = {
35 .follow_link = page_follow_link_light, 35 .follow_link = page_follow_link_light,
36 .put_link = page_put_link, 36 .put_link = page_put_link,
37 .setattr = ext4_setattr, 37 .setattr = ext4_setattr,
38#ifdef CONFIG_EXT4_FS_XATTR
39 .setxattr = generic_setxattr, 38 .setxattr = generic_setxattr,
40 .getxattr = generic_getxattr, 39 .getxattr = generic_getxattr,
41 .listxattr = ext4_listxattr, 40 .listxattr = ext4_listxattr,
42 .removexattr = generic_removexattr, 41 .removexattr = generic_removexattr,
43#endif
44}; 42};
45 43
46const struct inode_operations ext4_fast_symlink_inode_operations = { 44const struct inode_operations ext4_fast_symlink_inode_operations = {
47 .readlink = generic_readlink, 45 .readlink = generic_readlink,
48 .follow_link = ext4_follow_link, 46 .follow_link = ext4_follow_link,
49 .setattr = ext4_setattr, 47 .setattr = ext4_setattr,
50#ifdef CONFIG_EXT4_FS_XATTR
51 .setxattr = generic_setxattr, 48 .setxattr = generic_setxattr,
52 .getxattr = generic_getxattr, 49 .getxattr = generic_getxattr,
53 .listxattr = ext4_listxattr, 50 .listxattr = ext4_listxattr,
54 .removexattr = generic_removexattr, 51 .removexattr = generic_removexattr,
55#endif
56}; 52};
diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h
index 4222388c772f..7b5513ed3b38 100644
--- a/fs/ext4/xattr.h
+++ b/fs/ext4/xattr.h
@@ -92,8 +92,6 @@ struct ext4_xattr_ibody_find {
92 struct ext4_iloc iloc; 92 struct ext4_iloc iloc;
93}; 93};
94 94
95# ifdef CONFIG_EXT4_FS_XATTR
96
97extern const struct xattr_handler ext4_xattr_user_handler; 95extern const struct xattr_handler ext4_xattr_user_handler;
98extern const struct xattr_handler ext4_xattr_trusted_handler; 96extern const struct xattr_handler ext4_xattr_trusted_handler;
99extern const struct xattr_handler ext4_xattr_acl_access_handler; 97extern const struct xattr_handler ext4_xattr_acl_access_handler;
@@ -193,239 +191,6 @@ extern int ext4_try_to_evict_inline_data(handle_t *handle,
193extern void ext4_inline_data_truncate(struct inode *inode, int *has_inline); 191extern void ext4_inline_data_truncate(struct inode *inode, int *has_inline);
194 192
195extern int ext4_convert_inline_data(struct inode *inode); 193extern int ext4_convert_inline_data(struct inode *inode);
196# else /* CONFIG_EXT4_FS_XATTR */
197
198static inline int
199ext4_xattr_get(struct inode *inode, int name_index, const char *name,
200 void *buffer, size_t size, int flags)
201{
202 return -EOPNOTSUPP;
203}
204
205static inline int
206ext4_xattr_set(struct inode *inode, int name_index, const char *name,
207 const void *value, size_t size, int flags)
208{
209 return -EOPNOTSUPP;
210}
211
212static inline int
213ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
214 const char *name, const void *value, size_t size, int flags)
215{
216 return -EOPNOTSUPP;
217}
218
219static inline void
220ext4_xattr_delete_inode(handle_t *handle, struct inode *inode)
221{
222}
223
224static inline void
225ext4_xattr_put_super(struct super_block *sb)
226{
227}
228
229static __init inline int
230ext4_init_xattr(void)
231{
232 return 0;
233}
234
235static inline void
236ext4_exit_xattr(void)
237{
238}
239
240static inline int
241ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
242 struct ext4_inode *raw_inode, handle_t *handle)
243{
244 return -EOPNOTSUPP;
245}
246
247#define ext4_xattr_handlers NULL
248
249static inline int
250ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
251 struct ext4_xattr_ibody_find *is)
252{
253 return -EOPNOTSUPP;
254}
255
256static inline int
257ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
258 struct ext4_xattr_info *i,
259 struct ext4_xattr_ibody_find *is)
260{
261 return -EOPNOTSUPP;
262}
263
264static inline int
265ext4_xattr_ibody_get(struct inode *inode, int name_index,
266 const char *name,
267 void *buffer, size_t buffer_size)
268{
269 return -EOPNOTSUPP;
270}
271
272static inline int ext4_find_inline_data_nolock(struct inode *inode)
273{
274 return 0;
275}
276
277static inline int ext4_has_inline_data(struct inode *inode)
278{
279 return 0;
280}
281
282static inline int ext4_get_inline_size(struct inode *inode)
283{
284 return 0;
285}
286
287static inline int ext4_get_max_inline_size(struct inode *inode)
288{
289 return 0;
290}
291
292static inline void ext4_write_inline_data(struct inode *inode,
293 struct ext4_iloc *iloc,
294 void *buffer, loff_t pos,
295 unsigned int len)
296{
297 return;
298}
299
300static inline int ext4_init_inline_data(handle_t *handle,
301 struct inode *inode,
302 unsigned int len)
303{
304 return 0;
305}
306
307static inline int ext4_destroy_inline_data(handle_t *handle,
308 struct inode *inode)
309{
310 return 0;
311}
312
313static inline int ext4_readpage_inline(struct inode *inode, struct page *page)
314{
315 return 0;
316}
317
318static inline int ext4_try_to_write_inline_data(struct address_space *mapping,
319 struct inode *inode,
320 loff_t pos, unsigned len,
321 unsigned flags,
322 struct page **pagep)
323{
324 return 0;
325}
326
327static inline int ext4_write_inline_data_end(struct inode *inode,
328 loff_t pos, unsigned len,
329 unsigned copied,
330 struct page *page)
331{
332 return 0;
333}
334
335static inline struct buffer_head *
336ext4_journalled_write_inline_data(struct inode *inode,
337 unsigned len,
338 struct page *page)
339{
340 return NULL;
341}
342
343static inline int
344ext4_da_write_inline_data_begin(struct address_space *mapping,
345 struct inode *inode,
346 loff_t pos, unsigned len,
347 unsigned flags,
348 struct page **pagep,
349 void **fsdata)
350{
351 return 0;
352}
353
354static inline int ext4_da_write_inline_data_end(struct inode *inode, loff_t pos,
355 unsigned len, unsigned copied,
356 struct page *page)
357{
358 return 0;
359}
360
361static inline int ext4_try_add_inline_entry(handle_t *handle,
362 struct dentry *dentry,
363 struct inode *inode)
364{
365 return 0;
366}
367
368static inline int ext4_try_create_inline_dir(handle_t *handle,
369 struct inode *parent,
370 struct inode *inode)
371{
372 return 0;
373}
374static inline int ext4_read_inline_dir(struct file *filp,
375 void *dirent, filldir_t filldir,
376 int *has_inline_data)
377{
378 return 0;
379}
380
381static inline struct buffer_head *
382ext4_find_inline_entry(struct inode *dir,
383 const struct qstr *d_name,
384 struct ext4_dir_entry_2 **res_dir,
385 int *has_inline_data)
386{
387 return NULL;
388}
389static inline int ext4_delete_inline_entry(handle_t *handle,
390 struct inode *dir,
391 struct ext4_dir_entry_2 *de_del,
392 struct buffer_head *bh,
393 int *has_inline_data)
394{
395 return 0;
396}
397
398static inline int empty_inline_dir(struct inode *dir, int *has_inline_data)
399{
400 return 0;
401}
402
403static inline struct buffer_head *
404ext4_get_first_inline_block(struct inode *inode,
405 struct ext4_dir_entry_2 **parent_de,
406 int *retval)
407{
408 return NULL;
409}
410
411static inline int ext4_inline_data_fiemap(struct inode *inode,
412 struct fiemap_extent_info *fieinfo,
413 int *has_inline)
414{
415 return 0;
416}
417
418static inline void ext4_inline_data_truncate(struct inode *inode,
419 int *has_inline)
420{
421 return;
422}
423
424static inline int ext4_convert_inline_data(struct inode *inode)
425{
426 return 0;
427}
428# endif /* CONFIG_EXT4_FS_XATTR */
429 194
430#ifdef CONFIG_EXT4_FS_SECURITY 195#ifdef CONFIG_EXT4_FS_SECURITY
431extern int ext4_init_security(handle_t *handle, struct inode *inode, 196extern int ext4_init_security(handle_t *handle, struct inode *inode,