From: Stephen Rothwell Date: Wed, 14 Apr 2021 01:22:24 +0000 (+1000) Subject: Merge remote-tracking branch 'vfs/for-next' X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ee1d7478b71d12d887db9eddceab5435e7d3f8fa;p=users%2Fjedix%2Flinux-maple.git Merge remote-tracking branch 'vfs/for-next' # Conflicts: # fs/btrfs/ioctl.c # fs/overlayfs/file.c # fs/xfs/xfs_ioctl.c --- ee1d7478b71d12d887db9eddceab5435e7d3f8fa diff --cc fs/overlayfs/file.c index 6e454a294046,9bd4167cc7fb..fd5054b7936c --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@@ -716,11 -590,6 +610,7 @@@ const struct file_operations ovl_file_o .mmap = ovl_mmap, .fallocate = ovl_fallocate, .fadvise = ovl_fadvise, - .unlocked_ioctl = ovl_ioctl, + .flush = ovl_flush, - #ifdef CONFIG_COMPAT - .compat_ioctl = ovl_compat_ioctl, - #endif .splice_read = generic_file_splice_read, .splice_write = iter_file_splice_write, diff --cc fs/xfs/xfs_ioctl.c index 708b77341a70,bbda105a2ce5..1dff97bdc67d --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@@ -1056,76 -1057,16 +1057,18 @@@ xfs_ioc_ag_geometry static void xfs_fill_fsxattr( struct xfs_inode *ip, - bool attr, - struct fsxattr *fa) + int whichfork, + struct fileattr *fa) { + struct xfs_mount *mp = ip->i_mount; - struct xfs_ifork *ifp = attr ? ip->i_afp : &ip->i_df; + struct xfs_ifork *ifp = XFS_IFORK_PTR(ip, whichfork); - simple_fill_fsxattr(fa, xfs_ip2xflags(ip)); + fileattr_fill_xflags(fa, xfs_ip2xflags(ip)); - fa->fsx_extsize = ip->i_d.di_extsize << ip->i_mount->m_sb.sb_blocklog; - fa->fsx_cowextsize = ip->i_d.di_cowextsize << - ip->i_mount->m_sb.sb_blocklog; - fa->fsx_projid = ip->i_d.di_projid; + + fa->fsx_extsize = XFS_FSB_TO_B(mp, ip->i_extsize); + if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) + fa->fsx_cowextsize = XFS_FSB_TO_B(mp, ip->i_cowextsize); + fa->fsx_projid = ip->i_projid; if (ifp && (ifp->if_flags & XFS_IFEXTENTS)) fa->fsx_nextents = xfs_iext_count(ifp); else @@@ -1212,10 -1167,10 +1169,10 @@@ static in xfs_ioctl_setattr_xflags( struct xfs_trans *tp, struct xfs_inode *ip, - struct fsxattr *fa) + struct fileattr *fa) { struct xfs_mount *mp = ip->i_mount; - uint64_t di_flags2; + uint64_t i_flags2; /* Can't change realtime flag if any extents are allocated. */ if ((ip->i_df.if_nextents || ip->i_delayed_blks) && @@@ -1348,8 -1289,11 +1291,11 @@@ xfs_ioctl_setattr_check_extsize xfs_extlen_t size; xfs_fsblock_t extsize_fsb; + if (!fa->fsx_valid) + return 0; + if (S_ISREG(VFS_I(ip)->i_mode) && ip->i_df.if_nextents && - ((ip->i_d.di_extsize << mp->m_sb.sb_blocklog) != fa->fsx_extsize)) + ((ip->i_extsize << mp->m_sb.sb_blocklog) != fa->fsx_extsize)) return -EINVAL; if (fa->fsx_extsize == 0) @@@ -1520,18 -1476,18 +1478,19 @@@ xfs_fileattr_set * extent size hint should be set on the inode. If no extent size flags * are set on the inode then unconditionally clear the extent size hint. */ - if (ip->i_d.di_flags & (XFS_DIFLAG_EXTSIZE | XFS_DIFLAG_EXTSZINHERIT)) - ip->i_d.di_extsize = fa->fsx_extsize >> mp->m_sb.sb_blocklog; - else - ip->i_d.di_extsize = 0; - if (xfs_sb_version_has_v3inode(&mp->m_sb) && - (ip->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE)) - ip->i_d.di_cowextsize = fa->fsx_cowextsize >> - mp->m_sb.sb_blocklog; + if (ip->i_diflags & (XFS_DIFLAG_EXTSIZE | XFS_DIFLAG_EXTSZINHERIT)) + ip->i_extsize = XFS_B_TO_FSB(mp, fa->fsx_extsize); else - ip->i_d.di_cowextsize = 0; + ip->i_extsize = 0; + + if (xfs_sb_version_has_v3inode(&mp->m_sb)) { + if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) + ip->i_cowextsize = XFS_B_TO_FSB(mp, fa->fsx_cowextsize); + else + ip->i_cowextsize = 0; + } + skip_xattr: error = xfs_trans_commit(tp); /*