ubifs: introduce Kconfig symbol for xattr support
authorStefan Agner <stefan@agner.ch>
Tue, 31 Jul 2018 13:13:20 +0000 (15:13 +0200)
committerRichard Weinberger <richard@nod.at>
Tue, 14 Aug 2018 22:25:14 +0000 (00:25 +0200)
Allow to disable extended attribute support.

This aids in reliability testing, especially since some xattr
related bugs have surfaced.

Also an embedded system might not need it, so this allows for a
slightly smaller kernel (about 4KiB).

Signed-off-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Richard Weinberger <richard@nod.at>
fs/ubifs/Kconfig
fs/ubifs/Makefile
fs/ubifs/dir.c
fs/ubifs/file.c
fs/ubifs/super.c
fs/ubifs/ubifs.h

index 83a961bf7280112f84a2567e2dd775f5679af3f3..bbc78549be4cc3f0536033624723666ab13ef0d0 100644 (file)
@@ -51,9 +51,20 @@ config UBIFS_ATIME_SUPPORT
 
          If unsure, say 'N'
 
+config UBIFS_FS_XATTR
+       bool "UBIFS XATTR support"
+       depends on UBIFS_FS
+       default y
+       help
+         Saying Y here includes support for extended attributes (xattrs).
+         Xattrs are name:value pairs associated with inodes by
+         the kernel or by users (see the attr(5) manual page).
+
+         If unsure, say Y.
+
 config UBIFS_FS_ENCRYPTION
        bool "UBIFS Encryption"
-       depends on UBIFS_FS && BLOCK
+       depends on UBIFS_FS && UBIFS_FS_XATTR && BLOCK
        select FS_ENCRYPTION
        default n
        help
@@ -64,7 +75,7 @@ config UBIFS_FS_ENCRYPTION
 
 config UBIFS_FS_SECURITY
        bool "UBIFS Security Labels"
-       depends on UBIFS_FS
+       depends on UBIFS_FS && UBIFS_FS_XATTR
        default y
        help
          Security labels provide an access control facility to support Linux
index 9758f709c73612dd59244817e7c4fae4dcb8335d..6197d7e539e42d872a07763e524e1aad284d7a82 100644 (file)
@@ -4,6 +4,7 @@ obj-$(CONFIG_UBIFS_FS) += ubifs.o
 ubifs-y += shrinker.o journal.o file.o dir.o super.o sb.o io.o
 ubifs-y += tnc.o master.o scan.o replay.o log.o commit.o gc.o orphan.o
 ubifs-y += budget.o find.o tnc_commit.o compress.o lpt.o lprops.o
-ubifs-y += recovery.o ioctl.o lpt_commit.o tnc_misc.o xattr.o debug.o
+ubifs-y += recovery.o ioctl.o lpt_commit.o tnc_misc.o debug.o
 ubifs-y += misc.o
 ubifs-$(CONFIG_UBIFS_FS_ENCRYPTION) += crypto.o
+ubifs-$(CONFIG_UBIFS_FS_XATTR) += xattr.o
index e8616040bffc6278fcf65b0bb91ce752b2f02c1f..85aea556b70916df9c7d6ed05b77c2d98b5d8471 100644 (file)
@@ -1648,7 +1648,9 @@ const struct inode_operations ubifs_dir_inode_operations = {
        .rename      = ubifs_rename,
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
+#ifdef CONFIG_UBIFS_FS_XATTR
        .listxattr   = ubifs_listxattr,
+#endif
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif
index 02fab5c322c7547312a92776e0298258c1460349..745b3f810fb9b4b9017ea63b48c0d483fe68c328 100644 (file)
@@ -1653,7 +1653,9 @@ const struct address_space_operations ubifs_file_address_operations = {
 const struct inode_operations ubifs_file_inode_operations = {
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
+#ifdef CONFIG_UBIFS_FS_XATTR
        .listxattr   = ubifs_listxattr,
+#endif
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif
@@ -1663,7 +1665,9 @@ const struct inode_operations ubifs_symlink_inode_operations = {
        .get_link    = ubifs_get_link,
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
+#ifdef CONFIG_UBIFS_FS_XATTR
        .listxattr   = ubifs_listxattr,
+#endif
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif
index c5466c70d620015aaa16ede0790aefb3c6efbc14..564a131afc569c372c9f36392f1dda730a2a1270 100644 (file)
@@ -2053,7 +2053,9 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent)
        if (c->max_inode_sz > MAX_LFS_FILESIZE)
                sb->s_maxbytes = c->max_inode_sz = MAX_LFS_FILESIZE;
        sb->s_op = &ubifs_super_operations;
+#ifdef CONFIG_UBIFS_FS_XATTR
        sb->s_xattr = ubifs_xattr_handlers;
+#endif
 #ifdef CONFIG_UBIFS_FS_ENCRYPTION
        sb->s_cop = &ubifs_crypt_operations;
 #endif
index 54fb6b1cd042ab66dae3cfb9aa1514dc48ea429f..829308651a5edaef80d813544bf9d6544aed8490 100644 (file)
@@ -1755,7 +1755,13 @@ int ubifs_xattr_set(struct inode *host, const char *name, const void *value,
                    size_t size, int flags, bool check_lock);
 ssize_t ubifs_xattr_get(struct inode *host, const char *name, void *buf,
                        size_t size);
+
+#ifdef CONFIG_UBIFS_FS_XATTR
 void ubifs_evict_xattr_inode(struct ubifs_info *c, ino_t xattr_inum);
+#else
+static inline void ubifs_evict_xattr_inode(struct ubifs_info *c,
+                                          ino_t xattr_inum) { }
+#endif
 
 #ifdef CONFIG_UBIFS_FS_SECURITY
 extern int ubifs_init_security(struct inode *dentry, struct inode *inode,