diff options
author | Chunwei Chen <[email protected]> | 2016-10-12 17:30:46 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-11-04 10:46:40 -0700 |
commit | 987014903f9d36783547188b6ad00f01d9a076bd (patch) | |
tree | b128ec88349ecf9eae9fb75b11bc9e33d5e51f6b /include | |
parent | 7f547f85fe783a6ac69ce250b361436b9c4888a6 (diff) |
Fix unlinked file cannot do xattr operations
Currently, doing things like fsetxattr(2) on an unlinked file will result in
ENODATA. There's two places that cause this: zfs_dirent_lock and zfs_zget.
The fix in zfs_dirent_lock is pretty straightforward. In zfs_zget though, we
need it to not return error when the zp is unlinked. This is a pretty big
change in behavior, but skimming through all the callers, I don't think this
change would cause any problem. Also there's nothing preventing z_unlinked
from being set after the z_lock mutex is dropped before but before zfs_zget
returns anyway.
The rest of the stuff is to make sure we don't log xattr stuff when owner is
unlinked.
Signed-off-by: Chunwei Chen <[email protected]>
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/zfs_znode.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/sys/zfs_znode.h b/include/sys/zfs_znode.h index a12675d6f..8be7283a7 100644 --- a/include/sys/zfs_znode.h +++ b/include/sys/zfs_znode.h @@ -194,6 +194,7 @@ typedef struct znode { zfs_acl_t *z_acl_cached; /* cached acl */ krwlock_t z_xattr_lock; /* xattr data lock */ nvlist_t *z_xattr_cached; /* cached xattrs */ + uint64_t z_xattr_parent; /* parent obj for this xattr */ list_node_t z_link_node; /* all znodes in fs link */ sa_handle_t *z_sa_hdl; /* handle to sa data */ boolean_t z_is_sa; /* are we native sa? */ |