diff options
Diffstat (limited to 'fs/xfs/quota/xfs_dquot.c')
-rw-r--r-- | fs/xfs/quota/xfs_dquot.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/fs/xfs/quota/xfs_dquot.c b/fs/xfs/quota/xfs_dquot.c index 02dac0a5f1ec..9b1e8be98820 100644 --- a/fs/xfs/quota/xfs_dquot.c +++ b/fs/xfs/quota/xfs_dquot.c | |||
@@ -252,7 +252,7 @@ xfs_qm_adjust_dqtimers( | |||
252 | (be64_to_cpu(d->d_bcount) >= | 252 | (be64_to_cpu(d->d_bcount) >= |
253 | be64_to_cpu(d->d_blk_hardlimit)))) { | 253 | be64_to_cpu(d->d_blk_hardlimit)))) { |
254 | d->d_btimer = cpu_to_be32(get_seconds() + | 254 | d->d_btimer = cpu_to_be32(get_seconds() + |
255 | XFS_QI_BTIMELIMIT(mp)); | 255 | mp->m_quotainfo->qi_btimelimit); |
256 | } else { | 256 | } else { |
257 | d->d_bwarns = 0; | 257 | d->d_bwarns = 0; |
258 | } | 258 | } |
@@ -275,7 +275,7 @@ xfs_qm_adjust_dqtimers( | |||
275 | (be64_to_cpu(d->d_icount) >= | 275 | (be64_to_cpu(d->d_icount) >= |
276 | be64_to_cpu(d->d_ino_hardlimit)))) { | 276 | be64_to_cpu(d->d_ino_hardlimit)))) { |
277 | d->d_itimer = cpu_to_be32(get_seconds() + | 277 | d->d_itimer = cpu_to_be32(get_seconds() + |
278 | XFS_QI_ITIMELIMIT(mp)); | 278 | mp->m_quotainfo->qi_itimelimit); |
279 | } else { | 279 | } else { |
280 | d->d_iwarns = 0; | 280 | d->d_iwarns = 0; |
281 | } | 281 | } |
@@ -298,7 +298,7 @@ xfs_qm_adjust_dqtimers( | |||
298 | (be64_to_cpu(d->d_rtbcount) >= | 298 | (be64_to_cpu(d->d_rtbcount) >= |
299 | be64_to_cpu(d->d_rtb_hardlimit)))) { | 299 | be64_to_cpu(d->d_rtb_hardlimit)))) { |
300 | d->d_rtbtimer = cpu_to_be32(get_seconds() + | 300 | d->d_rtbtimer = cpu_to_be32(get_seconds() + |
301 | XFS_QI_RTBTIMELIMIT(mp)); | 301 | mp->m_quotainfo->qi_rtbtimelimit); |
302 | } else { | 302 | } else { |
303 | d->d_rtbwarns = 0; | 303 | d->d_rtbwarns = 0; |
304 | } | 304 | } |
@@ -325,6 +325,7 @@ xfs_qm_init_dquot_blk( | |||
325 | uint type, | 325 | uint type, |
326 | xfs_buf_t *bp) | 326 | xfs_buf_t *bp) |
327 | { | 327 | { |
328 | struct xfs_quotainfo *q = mp->m_quotainfo; | ||
328 | xfs_dqblk_t *d; | 329 | xfs_dqblk_t *d; |
329 | int curid, i; | 330 | int curid, i; |
330 | 331 | ||
@@ -337,16 +338,16 @@ xfs_qm_init_dquot_blk( | |||
337 | /* | 338 | /* |
338 | * ID of the first dquot in the block - id's are zero based. | 339 | * ID of the first dquot in the block - id's are zero based. |
339 | */ | 340 | */ |
340 | curid = id - (id % XFS_QM_DQPERBLK(mp)); | 341 | curid = id - (id % q->qi_dqperchunk); |
341 | ASSERT(curid >= 0); | 342 | ASSERT(curid >= 0); |
342 | memset(d, 0, BBTOB(XFS_QI_DQCHUNKLEN(mp))); | 343 | memset(d, 0, BBTOB(q->qi_dqchunklen)); |
343 | for (i = 0; i < XFS_QM_DQPERBLK(mp); i++, d++, curid++) | 344 | for (i = 0; i < q->qi_dqperchunk; i++, d++, curid++) |
344 | xfs_qm_dqinit_core(curid, type, d); | 345 | xfs_qm_dqinit_core(curid, type, d); |
345 | xfs_trans_dquot_buf(tp, bp, | 346 | xfs_trans_dquot_buf(tp, bp, |
346 | (type & XFS_DQ_USER ? XFS_BLI_UDQUOT_BUF : | 347 | (type & XFS_DQ_USER ? XFS_BLI_UDQUOT_BUF : |
347 | ((type & XFS_DQ_PROJ) ? XFS_BLI_PDQUOT_BUF : | 348 | ((type & XFS_DQ_PROJ) ? XFS_BLI_PDQUOT_BUF : |
348 | XFS_BLI_GDQUOT_BUF))); | 349 | XFS_BLI_GDQUOT_BUF))); |
349 | xfs_trans_log_buf(tp, bp, 0, BBTOB(XFS_QI_DQCHUNKLEN(mp)) - 1); | 350 | xfs_trans_log_buf(tp, bp, 0, BBTOB(q->qi_dqchunklen) - 1); |
350 | } | 351 | } |
351 | 352 | ||
352 | 353 | ||
@@ -419,7 +420,7 @@ xfs_qm_dqalloc( | |||
419 | /* now we can just get the buffer (there's nothing to read yet) */ | 420 | /* now we can just get the buffer (there's nothing to read yet) */ |
420 | bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, | 421 | bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, |
421 | dqp->q_blkno, | 422 | dqp->q_blkno, |
422 | XFS_QI_DQCHUNKLEN(mp), | 423 | mp->m_quotainfo->qi_dqchunklen, |
423 | 0); | 424 | 0); |
424 | if (!bp || (error = XFS_BUF_GETERROR(bp))) | 425 | if (!bp || (error = XFS_BUF_GETERROR(bp))) |
425 | goto error1; | 426 | goto error1; |
@@ -500,7 +501,8 @@ xfs_qm_dqtobp( | |||
500 | */ | 501 | */ |
501 | if (dqp->q_blkno == (xfs_daddr_t) 0) { | 502 | if (dqp->q_blkno == (xfs_daddr_t) 0) { |
502 | /* We use the id as an index */ | 503 | /* We use the id as an index */ |
503 | dqp->q_fileoffset = (xfs_fileoff_t)id / XFS_QM_DQPERBLK(mp); | 504 | dqp->q_fileoffset = (xfs_fileoff_t)id / |
505 | mp->m_quotainfo->qi_dqperchunk; | ||
504 | nmaps = 1; | 506 | nmaps = 1; |
505 | quotip = XFS_DQ_TO_QIP(dqp); | 507 | quotip = XFS_DQ_TO_QIP(dqp); |
506 | xfs_ilock(quotip, XFS_ILOCK_SHARED); | 508 | xfs_ilock(quotip, XFS_ILOCK_SHARED); |
@@ -529,7 +531,7 @@ xfs_qm_dqtobp( | |||
529 | /* | 531 | /* |
530 | * offset of dquot in the (fixed sized) dquot chunk. | 532 | * offset of dquot in the (fixed sized) dquot chunk. |
531 | */ | 533 | */ |
532 | dqp->q_bufoffset = (id % XFS_QM_DQPERBLK(mp)) * | 534 | dqp->q_bufoffset = (id % mp->m_quotainfo->qi_dqperchunk) * |
533 | sizeof(xfs_dqblk_t); | 535 | sizeof(xfs_dqblk_t); |
534 | if (map.br_startblock == HOLESTARTBLOCK) { | 536 | if (map.br_startblock == HOLESTARTBLOCK) { |
535 | /* | 537 | /* |
@@ -559,15 +561,13 @@ xfs_qm_dqtobp( | |||
559 | * Read in the buffer, unless we've just done the allocation | 561 | * Read in the buffer, unless we've just done the allocation |
560 | * (in which case we already have the buf). | 562 | * (in which case we already have the buf). |
561 | */ | 563 | */ |
562 | if (! newdquot) { | 564 | if (!newdquot) { |
563 | trace_xfs_dqtobp_read(dqp); | 565 | trace_xfs_dqtobp_read(dqp); |
564 | 566 | ||
565 | if ((error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, | 567 | error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, |
566 | dqp->q_blkno, | 568 | dqp->q_blkno, |
567 | XFS_QI_DQCHUNKLEN(mp), | 569 | mp->m_quotainfo->qi_dqchunklen, |
568 | 0, &bp))) { | 570 | 0, &bp); |
569 | return (error); | ||
570 | } | ||
571 | if (error || !bp) | 571 | if (error || !bp) |
572 | return XFS_ERROR(error); | 572 | return XFS_ERROR(error); |
573 | } | 573 | } |
@@ -689,14 +689,14 @@ xfs_qm_idtodq( | |||
689 | tp = NULL; | 689 | tp = NULL; |
690 | if (flags & XFS_QMOPT_DQALLOC) { | 690 | if (flags & XFS_QMOPT_DQALLOC) { |
691 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_DQALLOC); | 691 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_DQALLOC); |
692 | if ((error = xfs_trans_reserve(tp, | 692 | error = xfs_trans_reserve(tp, XFS_QM_DQALLOC_SPACE_RES(mp), |
693 | XFS_QM_DQALLOC_SPACE_RES(mp), | 693 | XFS_WRITE_LOG_RES(mp) + |
694 | XFS_WRITE_LOG_RES(mp) + | 694 | BBTOB(mp->m_quotainfo->qi_dqchunklen) - 1 + |
695 | BBTOB(XFS_QI_DQCHUNKLEN(mp)) - 1 + | 695 | 128, |
696 | 128, | 696 | 0, |
697 | 0, | 697 | XFS_TRANS_PERM_LOG_RES, |
698 | XFS_TRANS_PERM_LOG_RES, | 698 | XFS_WRITE_LOG_COUNT); |
699 | XFS_WRITE_LOG_COUNT))) { | 699 | if (error) { |
700 | cancelflags = 0; | 700 | cancelflags = 0; |
701 | goto error0; | 701 | goto error0; |
702 | } | 702 | } |
@@ -1495,6 +1495,7 @@ void | |||
1495 | xfs_qm_dqflock_pushbuf_wait( | 1495 | xfs_qm_dqflock_pushbuf_wait( |
1496 | xfs_dquot_t *dqp) | 1496 | xfs_dquot_t *dqp) |
1497 | { | 1497 | { |
1498 | xfs_mount_t *mp = dqp->q_mount; | ||
1498 | xfs_buf_t *bp; | 1499 | xfs_buf_t *bp; |
1499 | 1500 | ||
1500 | /* | 1501 | /* |
@@ -1503,14 +1504,14 @@ xfs_qm_dqflock_pushbuf_wait( | |||
1503 | * out immediately. We'll be able to acquire | 1504 | * out immediately. We'll be able to acquire |
1504 | * the flush lock when the I/O completes. | 1505 | * the flush lock when the I/O completes. |
1505 | */ | 1506 | */ |
1506 | bp = xfs_incore(dqp->q_mount->m_ddev_targp, dqp->q_blkno, | 1507 | bp = xfs_incore(mp->m_ddev_targp, dqp->q_blkno, |
1507 | XFS_QI_DQCHUNKLEN(dqp->q_mount), XBF_TRYLOCK); | 1508 | mp->m_quotainfo->qi_dqchunklen, XBF_TRYLOCK); |
1508 | if (!bp) | 1509 | if (!bp) |
1509 | goto out_lock; | 1510 | goto out_lock; |
1510 | 1511 | ||
1511 | if (XFS_BUF_ISDELAYWRITE(bp)) { | 1512 | if (XFS_BUF_ISDELAYWRITE(bp)) { |
1512 | if (XFS_BUF_ISPINNED(bp)) | 1513 | if (XFS_BUF_ISPINNED(bp)) |
1513 | xfs_log_force(dqp->q_mount, 0); | 1514 | xfs_log_force(mp, 0); |
1514 | xfs_buf_delwri_promote(bp); | 1515 | xfs_buf_delwri_promote(bp); |
1515 | wake_up_process(bp->b_target->bt_task); | 1516 | wake_up_process(bp->b_target->bt_task); |
1516 | } | 1517 | } |