On Tue, Dec 06, 2011 at 04:58:24PM -0500, Christoph Hellwig wrote:
> This function doesn't help the code flow, so merge the dquot allocation and
> transaction handling into xfs_qm_dqread.
>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
Looks good.
Reviewed-by: Ben Myers <bpm@xxxxxxx>
> ---
> fs/xfs/xfs_dquot.c | 137
> +++++++++++++++++++----------------------------------
> 1 file changed, 50 insertions(+), 87 deletions(-)
>
> Index: xfs/fs/xfs/xfs_dquot.c
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_dquot.c 2011-12-06 15:53:53.153697880 +0100
> +++ xfs/fs/xfs/xfs_dquot.c 2011-12-06 15:56:37.910367600 +0100
> @@ -550,36 +550,62 @@ xfs_qm_dqtobp(
> * Read in the ondisk dquot using dqtobp() then copy it to an incore version,
> * and release the buffer immediately.
> *
> + * If XFS_QMOPT_DQALLOC is set, allocate a dquot on disk if it needed.
> */
> -/* ARGSUSED */
> STATIC int
> xfs_qm_dqread(
> - xfs_trans_t **tpp,
> - xfs_dqid_t id,
> - xfs_dquot_t *dqp, /* dquot to get filled in */
> - uint flags)
> + struct xfs_mount *mp,
> + xfs_dqid_t id,
> + uint type,
> + uint flags,
> + struct xfs_dquot **O_dqpp)
> {
> - xfs_disk_dquot_t *ddqp;
> - xfs_buf_t *bp;
> - int error;
> - xfs_trans_t *tp;
> + struct xfs_dquot *dqp;
> + struct xfs_disk_dquot *ddqp;
> + struct xfs_buf *bp;
> + struct xfs_trans *tp = NULL;
> + int error;
> + int cancelflags = 0;
>
> - ASSERT(tpp);
> + dqp = xfs_qm_dqinit(mp, id, type);
>
> trace_xfs_dqread(dqp);
>
> + if (flags & XFS_QMOPT_DQALLOC) {
> + tp = xfs_trans_alloc(mp, XFS_TRANS_QM_DQALLOC);
> + error = xfs_trans_reserve(tp, XFS_QM_DQALLOC_SPACE_RES(mp),
> + XFS_WRITE_LOG_RES(mp) +
> + /*
> + * Round the chunklen up to the next multiple
> + * of 128 (buf log item chunk size)).
> + */
Thanks for the comment. ;)
> + BBTOB(mp->m_quotainfo->qi_dqchunklen) - 1 + 128,
> + 0,
> + XFS_TRANS_PERM_LOG_RES,
> + XFS_WRITE_LOG_COUNT);
> + if (error)
> + goto error1;
> + cancelflags = XFS_TRANS_RELEASE_LOG_RES;
> + }
|