From f31b3ebe6e6c9de4db30bf752c09a8300b305258 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Tue, 29 Nov 2011 09:05:04 -0800 Subject: [PATCH] Allow xattrs on symlinks The Solaris version of ZFS does not allow xattrs to be set on symlinks due to the way they implemented the attropen() system call. Linux however implements xattrs through the lgetxattr() and lsetxattr() system calls which do not have this limitation. The only reason this hasn't always worked under ZFS on Linux is that the xattr handlers were not registered for symlink type inodes. This was done simply to be consistent with the Solaris behavior. Upon futher reflection I believe this should be allowed under Linux. The only ill effect would be that the xattrs on symlinks will not be visible when the pool is imported on a Solaris system. This also has the benefit that it allows for SELinux style security xattr labeling which expects to be able to set xattrs on all inode types. Signed-off-by: Brian Behlendorf Closes #272 --- module/zfs/zpl_inode.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/zfs/zpl_inode.c b/module/zfs/zpl_inode.c index 17acf3711237..46b77c9f136c 100644 --- a/module/zfs/zpl_inode.c +++ b/module/zfs/zpl_inode.c @@ -356,6 +356,10 @@ const struct inode_operations zpl_symlink_inode_operations = { .put_link = zpl_put_link, .setattr = zpl_setattr, .getattr = zpl_getattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, + .listxattr = zpl_xattr_list, }; const struct inode_operations zpl_special_inode_operations = {