forked from Minki/linux
xfs: remove xfs_qm_vop_chown_reserve
Now that the only caller of this function is xfs_trans_alloc_ichange, just open-code the meat of _chown_reserve in that caller. Drop the (redundant) [ugp]id checks because xfs has a 1:1 relationship between quota ids and incore dquots. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
7317a03df7
commit
5c615f0feb
@ -1817,54 +1817,6 @@ xfs_qm_vop_chown(
|
||||
return prevdq;
|
||||
}
|
||||
|
||||
/*
|
||||
* Quota reservations for setattr(AT_UID|AT_GID|AT_PROJID).
|
||||
*/
|
||||
int
|
||||
xfs_qm_vop_chown_reserve(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_inode *ip,
|
||||
struct xfs_dquot *udqp,
|
||||
struct xfs_dquot *gdqp,
|
||||
struct xfs_dquot *pdqp,
|
||||
uint flags)
|
||||
{
|
||||
struct xfs_mount *mp = ip->i_mount;
|
||||
unsigned int blkflags;
|
||||
struct xfs_dquot *udq_delblks = NULL;
|
||||
struct xfs_dquot *gdq_delblks = NULL;
|
||||
struct xfs_dquot *pdq_delblks = NULL;
|
||||
|
||||
ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED));
|
||||
ASSERT(XFS_IS_QUOTA_RUNNING(mp));
|
||||
|
||||
blkflags = XFS_IS_REALTIME_INODE(ip) ?
|
||||
XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS;
|
||||
|
||||
if (XFS_IS_UQUOTA_ON(mp) && udqp &&
|
||||
i_uid_read(VFS_I(ip)) != udqp->q_id)
|
||||
udq_delblks = udqp;
|
||||
|
||||
if (XFS_IS_GQUOTA_ON(ip->i_mount) && gdqp &&
|
||||
i_gid_read(VFS_I(ip)) != gdqp->q_id)
|
||||
gdq_delblks = gdqp;
|
||||
|
||||
if (XFS_IS_PQUOTA_ON(ip->i_mount) && pdqp &&
|
||||
ip->i_d.di_projid != pdqp->q_id)
|
||||
pdq_delblks = pdqp;
|
||||
|
||||
/*
|
||||
* Reserve enough quota to handle blocks on disk and reserved for a
|
||||
* delayed allocation. We'll actually transfer the delalloc
|
||||
* reservation between dquots at chown time, even though that part is
|
||||
* only semi-transactional.
|
||||
*/
|
||||
return xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, udq_delblks,
|
||||
gdq_delblks, pdq_delblks,
|
||||
ip->i_d.di_nblocks + ip->i_delayed_blks,
|
||||
1, blkflags | flags);
|
||||
}
|
||||
|
||||
int
|
||||
xfs_qm_vop_rename_dqattach(
|
||||
struct xfs_inode **i_tab)
|
||||
|
@ -98,9 +98,6 @@ extern void xfs_qm_vop_create_dqattach(struct xfs_trans *, struct xfs_inode *,
|
||||
extern int xfs_qm_vop_rename_dqattach(struct xfs_inode **);
|
||||
extern struct xfs_dquot *xfs_qm_vop_chown(struct xfs_trans *,
|
||||
struct xfs_inode *, struct xfs_dquot **, struct xfs_dquot *);
|
||||
extern int xfs_qm_vop_chown_reserve(struct xfs_trans *, struct xfs_inode *,
|
||||
struct xfs_dquot *, struct xfs_dquot *,
|
||||
struct xfs_dquot *, uint);
|
||||
extern int xfs_qm_dqattach(struct xfs_inode *);
|
||||
extern int xfs_qm_dqattach_locked(struct xfs_inode *ip, bool doalloc);
|
||||
extern void xfs_qm_dqdetach(struct xfs_inode *);
|
||||
@ -162,7 +159,6 @@ xfs_trans_reserve_quota_icreate(struct xfs_trans *tp, struct xfs_dquot *udqp,
|
||||
#define xfs_qm_vop_create_dqattach(tp, ip, u, g, p)
|
||||
#define xfs_qm_vop_rename_dqattach(it) (0)
|
||||
#define xfs_qm_vop_chown(tp, ip, old, new) (NULL)
|
||||
#define xfs_qm_vop_chown_reserve(tp, ip, u, g, p, fl) (0)
|
||||
#define xfs_qm_dqattach(ip) (0)
|
||||
#define xfs_qm_dqattach_locked(ip, fl) (0)
|
||||
#define xfs_qm_dqdetach(ip)
|
||||
|
@ -1156,8 +1156,20 @@ xfs_trans_alloc_ichange(
|
||||
if (pdqp == ip->i_pdquot)
|
||||
pdqp = NULL;
|
||||
if (udqp || gdqp || pdqp) {
|
||||
error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, pdqp,
|
||||
force ? XFS_QMOPT_FORCE_RES : 0);
|
||||
unsigned int qflags = XFS_QMOPT_RES_REGBLKS;
|
||||
|
||||
if (force)
|
||||
qflags |= XFS_QMOPT_FORCE_RES;
|
||||
|
||||
/*
|
||||
* Reserve enough quota to handle blocks on disk and reserved
|
||||
* for a delayed allocation. We'll actually transfer the
|
||||
* delalloc reservation between dquots at chown time, even
|
||||
* though that part is only semi-transactional.
|
||||
*/
|
||||
error = xfs_trans_reserve_quota_bydquots(tp, mp, udqp, gdqp,
|
||||
pdqp, ip->i_d.di_nblocks + ip->i_delayed_blks,
|
||||
1, qflags);
|
||||
if (error)
|
||||
goto out_cancel;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user