ext4: inplace xattr block update fails to deduplicate blocks
[sfrench/cifs-2.6.git] / fs / ext4 / xattr.c
index de217a0947332bf2a657c48b9a3ba7e4eebbb860..4025666c59912661a2cf9f799bf4cce9bb6a411d 100644 (file)
@@ -1816,9 +1816,6 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,
                        ea_bdebug(bs->bh, "modifying in-place");
                        error = ext4_xattr_set_entry(i, s, handle, inode,
                                                     true /* is_block */);
-                       if (!error)
-                               ext4_xattr_block_cache_insert(ea_block_cache,
-                                                             bs->bh);
                        ext4_xattr_block_csum_set(inode, bs->bh);
                        unlock_buffer(bs->bh);
                        if (error == -EFSCORRUPTED)
@@ -1974,6 +1971,7 @@ inserted:
                } else if (bs->bh && s->base == bs->bh->b_data) {
                        /* We were modifying this block in-place. */
                        ea_bdebug(bs->bh, "keeping this block");
+                       ext4_xattr_block_cache_insert(ea_block_cache, bs->bh);
                        new_bh = bs->bh;
                        get_bh(new_bh);
                } else {