|
@@ -509,8 +509,16 @@ static int __f2fs_setxattr(struct inode *inode, int index,
|
|
here = __find_xattr(base_addr, index, len, name);
|
|
here = __find_xattr(base_addr, index, len, name);
|
|
|
|
|
|
found = IS_XATTR_LAST_ENTRY(here) ? 0 : 1;
|
|
found = IS_XATTR_LAST_ENTRY(here) ? 0 : 1;
|
|
- last = here;
|
|
|
|
|
|
|
|
|
|
+ if ((flags & XATTR_REPLACE) && !found) {
|
|
|
|
+ error = -ENODATA;
|
|
|
|
+ goto exit;
|
|
|
|
+ } else if ((flags & XATTR_CREATE) && found) {
|
|
|
|
+ error = -EEXIST;
|
|
|
|
+ goto exit;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ last = here;
|
|
while (!IS_XATTR_LAST_ENTRY(last))
|
|
while (!IS_XATTR_LAST_ENTRY(last))
|
|
last = XATTR_NEXT_ENTRY(last);
|
|
last = XATTR_NEXT_ENTRY(last);
|
|
|
|
|