]> git.proxmox.com Git - mirror_zfs-debian.git/commitdiff
Allow xattrs on symlinks
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 Nov 2011 17:05:04 +0000 (09:05 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 Nov 2011 18:24:24 +0000 (10:24 -0800)
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 <behlendorf1@llnl.gov>
Closes #272

module/zfs/zpl_inode.c

index 17acf371123787d5f73ba838a84840b9d33dd54c..46b77c9f136cb01bdddc984a62717854b23693f8 100644 (file)
@@ -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 = {