diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-01-11 10:28:19 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-01-11 10:28:19 -0500 |
commit | 734d1ece37fbf3d2ddfc71bc6c69e0fe35f02542 (patch) | |
tree | c4805dd7e746b1feb9e09e9849f3245d0b2c0c6b /fs/btrfs/xattr.c | |
parent | 216c82c6aba63eeb49d7654b448e0d47bea255bb (diff) | |
parent | 9931faca02c604c22335f5a935a501bb2ace6e20 (diff) |
Merge tag 'v3.8-rc3' into v4l_for_linus
Linux 3.8-rc3
* tag 'v3.8-rc3': (11110 commits)
Linux 3.8-rc3
mm: reinstante dropped pmd_trans_splitting() check
cred: Remove tgcred pointer from struct cred
drm/ttm: fix fence locking in ttm_buffer_object_transfer
ARM: clps711x: Fix bad merge of clockevents setup
ARM: highbank: save and restore L2 cache and GIC on suspend
ARM: highbank: add a power request clear
ARM: highbank: fix secondary boot and hotplug
ARM: highbank: fix typos with hignbank in power request functions
ARM: dts: fix highbank cpu mpidr values
ARM: dts: add device_type prop to cpu nodes on Calxeda platforms
drm/prime: drop reference on imported dma-buf come from gem
xen/netfront: improve truesize tracking
ARM: mx5: Fix MX53 flexcan2 clock
ARM: OMAP2+: am33xx-hwmod: Fix wrongly terminated am33xx_usbss_mpu_irqs array
sctp: fix Kconfig bug in default cookie hmac selection
EDAC: Cleanup device deregistering path
EDAC: Fix EDAC Kconfig menu
EDAC: Fix kernel panic on module unloading
ALSA: hda - add mute LED for HP Pavilion 17 (Realtek codec)
...
Diffstat (limited to 'fs/btrfs/xattr.c')
-rw-r--r-- | fs/btrfs/xattr.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 3f4e2d69e83a..446a6848c554 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c | |||
@@ -122,6 +122,16 @@ static int do_setxattr(struct btrfs_trans_handle *trans, | |||
122 | */ | 122 | */ |
123 | if (!value) | 123 | if (!value) |
124 | goto out; | 124 | goto out; |
125 | } else { | ||
126 | di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode), | ||
127 | name, name_len, 0); | ||
128 | if (IS_ERR(di)) { | ||
129 | ret = PTR_ERR(di); | ||
130 | goto out; | ||
131 | } | ||
132 | if (!di && !value) | ||
133 | goto out; | ||
134 | btrfs_release_path(path); | ||
125 | } | 135 | } |
126 | 136 | ||
127 | again: | 137 | again: |
@@ -198,6 +208,7 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans, | |||
198 | 208 | ||
199 | inode_inc_iversion(inode); | 209 | inode_inc_iversion(inode); |
200 | inode->i_ctime = CURRENT_TIME; | 210 | inode->i_ctime = CURRENT_TIME; |
211 | set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags); | ||
201 | ret = btrfs_update_inode(trans, root, inode); | 212 | ret = btrfs_update_inode(trans, root, inode); |
202 | BUG_ON(ret); | 213 | BUG_ON(ret); |
203 | out: | 214 | out: |
@@ -265,7 +276,7 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size) | |||
265 | 276 | ||
266 | di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); | 277 | di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); |
267 | if (verify_dir_item(root, leaf, di)) | 278 | if (verify_dir_item(root, leaf, di)) |
268 | continue; | 279 | goto next; |
269 | 280 | ||
270 | name_len = btrfs_dir_name_len(leaf, di); | 281 | name_len = btrfs_dir_name_len(leaf, di); |
271 | total_size += name_len + 1; | 282 | total_size += name_len + 1; |