• Brian Foster's avatar
    xfs: use tr_qm_dqalloc log reservation for dquot alloc · 410b11a6
    Brian Foster authored
    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: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarJie Liu <jeff.liu@oracle.com>
    Reviewed-by: default avatarBen Myers <bpm@sgi.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    
    410b11a6
xfs_trans_resv.c 25.5 KB