An attribute is not removed by 'setfattr -x attr file' and remains visible in attr list. This makes xfstests/062 pass again.
Unified · Split
| @@ -116,6 +116,12 @@ static int do_setxattr(struct btrfs_trans_handle *trans, · 115 unmodified lines | ||
| 116 | 116 | if (ret) |
| 117 | 117 | goto out; |
| 118 | 118 | btrfs_release_path(path); |
| 119 | + | |
| 120 | + /* | |
| 121 | + * remove the attribute | |
| 122 | + */ | |
| 123 | + if (!value) | |
| 124 | + goto out; | |
| 119 | 125 | } |
| 120 | 126 | |
| 121 | 127 | again: |
| @@ -158,6 +164,9 @@ out: · 36 unmodified lines | ||
| 158 | 164 | return ret; |
| 159 | 165 | } |
| 160 | 166 | |
| 167 | +/* | |
| 168 | + * @value: "" makes the attribute to empty, NULL removes it | |
| 169 | + */ | |
| 161 | 170 | int __btrfs_setxattr(struct btrfs_trans_handle *trans, |
| 162 | 171 | struct inode *inode, const char *name, |
| 163 | 172 | const void *value, size_t size, int flags) |