Message ID | 807c4c0c54fe611c4d0fb399aee36e241e2c6846.1485392101.git.osandov@fb.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Wed, Jan 25, 2017 at 05:06:39PM -0800, Omar Sandoval wrote: > From: Omar Sandoval <osandov@fb.com> > > When you snapshot a subvolume containing a subvolume, you get a > placeholder directory where the subvolume would be. These directory > inodes have ->i_ops set to btrfs_dir_ro_inode_operations. Previously, > these i_ops didn't include the xattr operation callbacks. The conversion > to xattr_handlers missed this case, leading to bogus attempts to set > xattrs on these inodes. This manifested itself as failures when running > delayed inodes. > > To fix this, clear IOP_XATTR in ->i_opflags on these inodes. > > Fixes: 6c6ef9f26e59 ("xattr: Stop calling {get,set,remove}xattr inode operations") > Cc: Andreas Gruenbacher <agruenba@redhat.com> > Reported-by: Chris Murphy <lists@colorremedies.com> > Tested-by: Chris Murphy <lists@colorremedies.com> > Cc: <stable@vger.kernel.org> # 4.9.x > Signed-off-by: Omar Sandoval <osandov@fb.com> Reviewed-by: David Sterba <dsterba@suse.com> -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index ae3989c22718..924f3583a04d 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5707,6 +5707,7 @@ static struct inode *new_simple_dir(struct super_block *s, inode->i_ino = BTRFS_EMPTY_SUBVOL_DIR_OBJECTID; inode->i_op = &btrfs_dir_ro_inode_operations; + inode->i_opflags &= ~IOP_XATTR; inode->i_fop = &simple_dir_operations; inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO; inode->i_mtime = current_time(inode);