In SyS_listxattr -> listxattr -> ext4_listxattr ->
ext4_xattr_list_entries we choose list handler for
each ext4_xattr_entry based on e_name_index, and as
for trusted.pfcache index is EXT4_XATTR_INDEX_TRUSTED,
we chouse ext4_xattr_trusted_list which prints xattr
to the list.

To hide our trusted.pfcache from list change e_name_index
to new EXT4_XATTR_INDEX_TRUSTED_CSUM and thus use
ext4_xattr_trusted_csum_list instead which won't put
xattr to the returned list.

Test:

TEST_FILE=/vz/root/101/testfile
TEST_SHA1=`sha1sum $TEST_FILE | awk '{print $1}'`
setfattr -n trusted.pfcache -v $TEST_SHA1 $TEST_FILE
setfattr -n trusted.test -v test $TEST_FILE
getfattr -d -m trusted $TEST_FILE

before patch it was listed:

trusted.pfcache="da39a3ee5e6b4b0d3255bfef95601890afd80709"
trusted.test="test"

after - not:

trusted.test="test"

https://jira.sw.ru/browse/PSBM-52180
Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
---
 fs/ext4/pfcache.c | 28 ++++++++++++++--------------
 fs/ext4/xattr.c   |  1 +
 fs/ext4/xattr.h   |  1 +
 3 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/fs/ext4/pfcache.c b/fs/ext4/pfcache.c
index ff2300b..5fc6d9f 100644
--- a/fs/ext4/pfcache.c
+++ b/fs/ext4/pfcache.c
@@ -441,8 +441,8 @@ int ext4_load_data_csum(struct inode *inode)
 {
        int ret;
 
-       ret = ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED,
-                       EXT4_DATA_CSUM_NAME, EXT4_I(inode)->i_data_csum,
+       ret = ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                       "", EXT4_I(inode)->i_data_csum,
                        EXT4_DATA_CSUM_SIZE);
        if (ret < 0)
                return ret;
@@ -482,8 +482,8 @@ static int ext4_save_data_csum(struct inode *inode, u8 
*csum)
        if (ret)
                return ret;
 
-       return ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED,
-                       EXT4_DATA_CSUM_NAME, EXT4_I(inode)->i_data_csum,
+       return ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                       "", EXT4_I(inode)->i_data_csum,
                        EXT4_DATA_CSUM_SIZE, 0);
 }
 
@@ -492,8 +492,8 @@ void ext4_load_dir_csum(struct inode *inode)
        char value[EXT4_DIR_CSUM_VALUE_LEN];
        int ret;
 
-       ret = ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED,
-                            EXT4_DATA_CSUM_NAME, value, sizeof(value));
+       ret = ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                            "", value, sizeof(value));
        if (ret == EXT4_DIR_CSUM_VALUE_LEN &&
            !strncmp(value, EXT4_DIR_CSUM_VALUE, sizeof(value)))
                ext4_set_inode_state(inode, EXT4_STATE_PFCACHE_CSUM);
@@ -502,8 +502,8 @@ void ext4_load_dir_csum(struct inode *inode)
 void ext4_save_dir_csum(struct inode *inode)
 {
        ext4_set_inode_state(inode, EXT4_STATE_PFCACHE_CSUM);
-       ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED,
-                       EXT4_DATA_CSUM_NAME,
+       ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                       "",
                        EXT4_DIR_CSUM_VALUE,
                        EXT4_DIR_CSUM_VALUE_LEN, 0);
 }
@@ -516,8 +516,8 @@ void ext4_truncate_data_csum(struct inode *inode, loff_t 
pos)
 
        if (EXT4_I(inode)->i_data_csum_end < 0) {
                WARN_ON(journal_current_handle());
-               ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED,
-                               EXT4_DATA_CSUM_NAME, NULL, 0, 0);
+               ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                               "", NULL, 0, 0);
                ext4_close_pfcache(inode);
        }
        spin_lock(&inode->i_lock);
@@ -658,8 +658,8 @@ static int ext4_xattr_trusted_csum_get(struct dentry 
*dentry, const char *name,
                return -EPERM;
 
        if (S_ISDIR(inode->i_mode))
-               return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED,
-                                     EXT4_DATA_CSUM_NAME, buffer, size);
+               return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                                     "", buffer, size);
 
        if (!S_ISREG(inode->i_mode))
                return -ENODATA;
@@ -717,8 +717,8 @@ static int ext4_xattr_trusted_csum_set(struct dentry 
*dentry, const char *name,
                else
                        return -EINVAL;
 
-               return ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED,
-                                     EXT4_DATA_CSUM_NAME, value, size, flags);
+               return ext4_xattr_set(inode, EXT4_XATTR_INDEX_TRUSTED_CSUM,
+                                     "", value, size, flags);
        }
 
        if (!S_ISREG(inode->i_mode))
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 5dabf58..81b5534 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -102,6 +102,7 @@ static const struct xattr_handler *ext4_xattr_handler_map[] 
= {
 #ifdef CONFIG_EXT4_FS_SECURITY
        [EXT4_XATTR_INDEX_SECURITY]          = &ext4_xattr_security_handler,
 #endif
+       [EXT4_XATTR_INDEX_TRUSTED_CSUM]      = &ext4_xattr_trusted_csum_handler,
 };
 
 const struct xattr_handler *ext4_xattr_handlers[] = {
diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h
index c767dbd..f6af6c9 100644
--- a/fs/ext4/xattr.h
+++ b/fs/ext4/xattr.h
@@ -23,6 +23,7 @@
 #define EXT4_XATTR_INDEX_SECURITY              6
 #define EXT4_XATTR_INDEX_SYSTEM                        7
 #define EXT4_XATTR_INDEX_RICHACL               8
+#define EXT4_XATTR_INDEX_TRUSTED_CSUM          9
 
 struct ext4_xattr_header {
        __le32  h_magic;        /* magic number for identification */
-- 
2.5.5

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to