On Mon, Jan 20, 2014 at 09:29:00AM -0500, Brian Foster wrote:
> The dquot allocation path in xfs_qm_dqread() currently uses the
> attribute set log reservation, which appears to be incorrect. We
> have reports of transaction reservation overruns with the current
> code. E.g., a repeated run of xfstests test generic/270 on a 512b
> block size fs occassionally produces the following in dmesg:
>
> XFS (sdN): xlog_write: reservation summary:
> trans type = QM_DQALLOC (30)
> unit res = 7080 bytes
> current res = -632 bytes
> total reg = 0 bytes (o/flow = 0 bytes)
> ophdrs = 0 (ophdr space = 0 bytes)
> ophdr + reg = 0 bytes
> num regions = 0
>
> XFS (sdN): xlog_write: reservation ran out. Need to up reservation
>
> The dquot allocation case should consist of a write reservation
> (i.e., we are allocating a range of the internal quota file) plus
> the size of the actual dquots. We already have a log reservation
> definition for this operation (tr_qm_dqalloc). Use it in
> xfs_qm_dqread() and update the log reservation calculation function
> to use the write res. calculation function rather than reading the
> assumed to be pre-calculated value directly.
>
> Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>
Looks good to me as well.
Reviewed-by: Ben Myers <bpm@xxxxxxx>
|