ext4: ext4_xattr_value_same() should return false for external data
authorTahsin Erdogan <tahsin@google.com>
Thu, 22 Jun 2017 02:02:06 +0000 (22:02 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 22 Jun 2017 02:02:06 +0000 (22:02 -0400)
ext4_xattr_value_same() is used as a quick optimization in case the new
xattr value is identical to the previous value. When xattr value is
stored in a xattr inode the check becomes expensive so it is better to
just assume that they are not equal.

Signed-off-by: Tahsin Erdogan <tahsin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/xattr.c

index 3983bc455d02866b57f338ef3264cb93db010153..13b7fa4cbf16edbed62200e98312a06f932419ef 100644 (file)
@@ -1426,6 +1426,9 @@ static int ext4_xattr_value_same(struct ext4_xattr_search *s,
 {
        void *value;
 
+       /* When e_value_inum is set the value is stored externally. */
+       if (s->here->e_value_inum)
+               return 0;
        if (le32_to_cpu(s->here->e_value_size) != i->value_len)
                return 0;
        value = ((void *)s->base) + le16_to_cpu(s->here->e_value_offs);