summaryrefslogtreecommitdiffstats
path: root/module/zfs/zpl_xattr.c
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2013-05-08 09:20:04 -0700
committerBrian Behlendorf <[email protected]>2013-05-10 12:24:56 -0700
commit0377189b884fab7db02a95088e05712c7cf336f7 (patch)
treea2b96d670b7e99b5c6b6d078bb85c6fb11580fc0 /module/zfs/zpl_xattr.c
parent4f34b3bdf4ced8f808f6cd928b87bd42ea3039fe (diff)
Only check directory xattr on ENOENT
When SA xattrs are enabled only fallback to checking the directory xattrs when the name is not found as a SA xattr. Otherwise, the SA error which should be returned to the caller is overwritten by the directory xattr errors. Positive return values indicating success will also be immediately returned. In the case of #1437 the ERANGE error was being correctly returned by zpl_xattr_get_sa() only to be overridden with ENOENT which was returned by the subsequent unnessisary call to zpl_xattr_get_dir(). Signed-off-by: Brian Behlendorf <[email protected]> Closes #1437
Diffstat (limited to 'module/zfs/zpl_xattr.c')
-rw-r--r--module/zfs/zpl_xattr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/module/zfs/zpl_xattr.c b/module/zfs/zpl_xattr.c
index a7e38e6a2..eb2c00dfb 100644
--- a/module/zfs/zpl_xattr.c
+++ b/module/zfs/zpl_xattr.c
@@ -288,7 +288,7 @@ __zpl_xattr_get(struct inode *ip, const char *name, void *value, size_t size,
if (zsb->z_use_sa && zp->z_is_sa) {
error = zpl_xattr_get_sa(ip, name, value, size);
- if (error >= 0)
+ if (error != -ENOENT)
goto out;
}