diff options
Diffstat (limited to 'fs/xfs/xfs_qm.c')
| -rw-r--r-- | fs/xfs/xfs_qm.c | 55 |
1 files changed, 8 insertions, 47 deletions
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 79fb19dd9c83..53cc2aaf8d2b 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c | |||
| @@ -430,6 +430,7 @@ struct xfs_qm_isolate { | |||
| 430 | static enum lru_status | 430 | static enum lru_status |
| 431 | xfs_qm_dquot_isolate( | 431 | xfs_qm_dquot_isolate( |
| 432 | struct list_head *item, | 432 | struct list_head *item, |
| 433 | struct list_lru_one *lru, | ||
| 433 | spinlock_t *lru_lock, | 434 | spinlock_t *lru_lock, |
| 434 | void *arg) | 435 | void *arg) |
| 435 | __releases(lru_lock) __acquires(lru_lock) | 436 | __releases(lru_lock) __acquires(lru_lock) |
| @@ -450,7 +451,7 @@ xfs_qm_dquot_isolate( | |||
| 450 | XFS_STATS_INC(xs_qm_dqwants); | 451 | XFS_STATS_INC(xs_qm_dqwants); |
| 451 | 452 | ||
| 452 | trace_xfs_dqreclaim_want(dqp); | 453 | trace_xfs_dqreclaim_want(dqp); |
| 453 | list_del_init(&dqp->q_lru); | 454 | list_lru_isolate(lru, &dqp->q_lru); |
| 454 | XFS_STATS_DEC(xs_qm_dquot_unused); | 455 | XFS_STATS_DEC(xs_qm_dquot_unused); |
| 455 | return LRU_REMOVED; | 456 | return LRU_REMOVED; |
| 456 | } | 457 | } |
| @@ -494,7 +495,7 @@ xfs_qm_dquot_isolate( | |||
| 494 | xfs_dqunlock(dqp); | 495 | xfs_dqunlock(dqp); |
| 495 | 496 | ||
| 496 | ASSERT(dqp->q_nrefs == 0); | 497 | ASSERT(dqp->q_nrefs == 0); |
| 497 | list_move_tail(&dqp->q_lru, &isol->dispose); | 498 | list_lru_isolate_move(lru, &dqp->q_lru, &isol->dispose); |
| 498 | XFS_STATS_DEC(xs_qm_dquot_unused); | 499 | XFS_STATS_DEC(xs_qm_dquot_unused); |
| 499 | trace_xfs_dqreclaim_done(dqp); | 500 | trace_xfs_dqreclaim_done(dqp); |
| 500 | XFS_STATS_INC(xs_qm_dqreclaims); | 501 | XFS_STATS_INC(xs_qm_dqreclaims); |
| @@ -523,7 +524,6 @@ xfs_qm_shrink_scan( | |||
| 523 | struct xfs_qm_isolate isol; | 524 | struct xfs_qm_isolate isol; |
| 524 | unsigned long freed; | 525 | unsigned long freed; |
| 525 | int error; | 526 | int error; |
| 526 | unsigned long nr_to_scan = sc->nr_to_scan; | ||
| 527 | 527 | ||
| 528 | if ((sc->gfp_mask & (__GFP_FS|__GFP_WAIT)) != (__GFP_FS|__GFP_WAIT)) | 528 | if ((sc->gfp_mask & (__GFP_FS|__GFP_WAIT)) != (__GFP_FS|__GFP_WAIT)) |
| 529 | return 0; | 529 | return 0; |
| @@ -531,8 +531,8 @@ xfs_qm_shrink_scan( | |||
| 531 | INIT_LIST_HEAD(&isol.buffers); | 531 | INIT_LIST_HEAD(&isol.buffers); |
| 532 | INIT_LIST_HEAD(&isol.dispose); | 532 | INIT_LIST_HEAD(&isol.dispose); |
| 533 | 533 | ||
| 534 | freed = list_lru_walk_node(&qi->qi_lru, sc->nid, xfs_qm_dquot_isolate, &isol, | 534 | freed = list_lru_shrink_walk(&qi->qi_lru, sc, |
| 535 | &nr_to_scan); | 535 | xfs_qm_dquot_isolate, &isol); |
| 536 | 536 | ||
| 537 | error = xfs_buf_delwri_submit(&isol.buffers); | 537 | error = xfs_buf_delwri_submit(&isol.buffers); |
| 538 | if (error) | 538 | if (error) |
| @@ -557,7 +557,7 @@ xfs_qm_shrink_count( | |||
| 557 | struct xfs_quotainfo *qi = container_of(shrink, | 557 | struct xfs_quotainfo *qi = container_of(shrink, |
| 558 | struct xfs_quotainfo, qi_shrinker); | 558 | struct xfs_quotainfo, qi_shrinker); |
| 559 | 559 | ||
| 560 | return list_lru_count_node(&qi->qi_lru, sc->nid); | 560 | return list_lru_shrink_count(&qi->qi_lru, sc); |
| 561 | } | 561 | } |
| 562 | 562 | ||
| 563 | /* | 563 | /* |
| @@ -714,7 +714,6 @@ STATIC int | |||
| 714 | xfs_qm_qino_alloc( | 714 | xfs_qm_qino_alloc( |
| 715 | xfs_mount_t *mp, | 715 | xfs_mount_t *mp, |
| 716 | xfs_inode_t **ip, | 716 | xfs_inode_t **ip, |
| 717 | __int64_t sbfields, | ||
| 718 | uint flags) | 717 | uint flags) |
| 719 | { | 718 | { |
| 720 | xfs_trans_t *tp; | 719 | xfs_trans_t *tp; |
| @@ -777,11 +776,6 @@ xfs_qm_qino_alloc( | |||
| 777 | spin_lock(&mp->m_sb_lock); | 776 | spin_lock(&mp->m_sb_lock); |
| 778 | if (flags & XFS_QMOPT_SBVERSION) { | 777 | if (flags & XFS_QMOPT_SBVERSION) { |
| 779 | ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); | 778 | ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); |
| 780 | ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | | ||
| 781 | XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | XFS_SB_QFLAGS)) == | ||
| 782 | (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | | ||
| 783 | XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | | ||
| 784 | XFS_SB_QFLAGS)); | ||
| 785 | 779 | ||
| 786 | xfs_sb_version_addquota(&mp->m_sb); | 780 | xfs_sb_version_addquota(&mp->m_sb); |
| 787 | mp->m_sb.sb_uquotino = NULLFSINO; | 781 | mp->m_sb.sb_uquotino = NULLFSINO; |
| @@ -798,7 +792,7 @@ xfs_qm_qino_alloc( | |||
| 798 | else | 792 | else |
| 799 | mp->m_sb.sb_pquotino = (*ip)->i_ino; | 793 | mp->m_sb.sb_pquotino = (*ip)->i_ino; |
| 800 | spin_unlock(&mp->m_sb_lock); | 794 | spin_unlock(&mp->m_sb_lock); |
| 801 | xfs_mod_sb(tp, sbfields); | 795 | xfs_log_sb(tp); |
| 802 | 796 | ||
| 803 | if ((error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES))) { | 797 | if ((error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES))) { |
| 804 | xfs_alert(mp, "%s failed (error %d)!", __func__, error); | 798 | xfs_alert(mp, "%s failed (error %d)!", __func__, error); |
| @@ -1451,7 +1445,7 @@ xfs_qm_mount_quotas( | |||
| 1451 | spin_unlock(&mp->m_sb_lock); | 1445 | spin_unlock(&mp->m_sb_lock); |
| 1452 | 1446 | ||
| 1453 | if (sbf != (mp->m_qflags & XFS_MOUNT_QUOTA_ALL)) { | 1447 | if (sbf != (mp->m_qflags & XFS_MOUNT_QUOTA_ALL)) { |
| 1454 | if (xfs_qm_write_sb_changes(mp, XFS_SB_QFLAGS)) { | 1448 | if (xfs_sync_sb(mp, false)) { |
| 1455 | /* | 1449 | /* |
| 1456 | * We could only have been turning quotas off. | 1450 | * We could only have been turning quotas off. |
| 1457 | * We aren't in very good shape actually because | 1451 | * We aren't in very good shape actually because |
| @@ -1482,7 +1476,6 @@ xfs_qm_init_quotainos( | |||
| 1482 | struct xfs_inode *gip = NULL; | 1476 | struct xfs_inode *gip = NULL; |
| 1483 | struct xfs_inode *pip = NULL; | 1477 | struct xfs_inode *pip = NULL; |
| 1484 | int error; | 1478 | int error; |
| 1485 | __int64_t sbflags = 0; | ||
| 1486 | uint flags = 0; | 1479 | uint flags = 0; |
| 1487 | 1480 | ||
| 1488 | ASSERT(mp->m_quotainfo); | 1481 | ASSERT(mp->m_quotainfo); |
| @@ -1517,9 +1510,6 @@ xfs_qm_init_quotainos( | |||
| 1517 | } | 1510 | } |
| 1518 | } else { | 1511 | } else { |
| 1519 | flags |= XFS_QMOPT_SBVERSION; | 1512 | flags |= XFS_QMOPT_SBVERSION; |
| 1520 | sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | | ||
| 1521 | XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | | ||
| 1522 | XFS_SB_QFLAGS); | ||
| 1523 | } | 1513 | } |
| 1524 | 1514 | ||
| 1525 | /* | 1515 | /* |
| @@ -1530,7 +1520,6 @@ xfs_qm_init_quotainos( | |||
| 1530 | */ | 1520 | */ |
| 1531 | if (XFS_IS_UQUOTA_ON(mp) && uip == NULL) { | 1521 | if (XFS_IS_UQUOTA_ON(mp) && uip == NULL) { |
| 1532 | error = xfs_qm_qino_alloc(mp, &uip, | 1522 | error = xfs_qm_qino_alloc(mp, &uip, |
| 1533 | sbflags | XFS_SB_UQUOTINO, | ||
| 1534 | flags | XFS_QMOPT_UQUOTA); | 1523 | flags | XFS_QMOPT_UQUOTA); |
| 1535 | if (error) | 1524 | if (error) |
| 1536 | goto error_rele; | 1525 | goto error_rele; |
| @@ -1539,7 +1528,6 @@ xfs_qm_init_quotainos( | |||
| 1539 | } | 1528 | } |
| 1540 | if (XFS_IS_GQUOTA_ON(mp) && gip == NULL) { | 1529 | if (XFS_IS_GQUOTA_ON(mp) && gip == NULL) { |
| 1541 | error = xfs_qm_qino_alloc(mp, &gip, | 1530 | error = xfs_qm_qino_alloc(mp, &gip, |
| 1542 | sbflags | XFS_SB_GQUOTINO, | ||
| 1543 | flags | XFS_QMOPT_GQUOTA); | 1531 | flags | XFS_QMOPT_GQUOTA); |
| 1544 | if (error) | 1532 | if (error) |
| 1545 | goto error_rele; | 1533 | goto error_rele; |
| @@ -1548,7 +1536,6 @@ xfs_qm_init_quotainos( | |||
| 1548 | } | 1536 | } |
| 1549 | if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { | 1537 | if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { |
| 1550 | error = xfs_qm_qino_alloc(mp, &pip, | 1538 | error = xfs_qm_qino_alloc(mp, &pip, |
| 1551 | sbflags | XFS_SB_PQUOTINO, | ||
| 1552 | flags | XFS_QMOPT_PQUOTA); | 1539 | flags | XFS_QMOPT_PQUOTA); |
| 1553 | if (error) | 1540 | if (error) |
| 1554 | goto error_rele; | 1541 | goto error_rele; |
| @@ -1587,32 +1574,6 @@ xfs_qm_dqfree_one( | |||
| 1587 | xfs_qm_dqdestroy(dqp); | 1574 | xfs_qm_dqdestroy(dqp); |
| 1588 | } | 1575 | } |
| 1589 | 1576 | ||
| 1590 | /* | ||
| 1591 | * Start a transaction and write the incore superblock changes to | ||
| 1592 | * disk. flags parameter indicates which fields have changed. | ||
| 1593 | */ | ||
| 1594 | int | ||
| 1595 | xfs_qm_write_sb_changes( | ||
| 1596 | xfs_mount_t *mp, | ||
| 1597 | __int64_t flags) | ||
| 1598 | { | ||
| 1599 | xfs_trans_t *tp; | ||
| 1600 | int error; | ||
| 1601 | |||
| 1602 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE); | ||
| 1603 | error = xfs_trans_reserve(tp, &M_RES(mp)->tr_qm_sbchange, 0, 0); | ||
| 1604 | if (error) { | ||
| 1605 | xfs_trans_cancel(tp, 0); | ||
| 1606 | return error; | ||
| 1607 | } | ||
| 1608 | |||
| 1609 | xfs_mod_sb(tp, flags); | ||
| 1610 | error = xfs_trans_commit(tp, 0); | ||
| 1611 | |||
| 1612 | return error; | ||
| 1613 | } | ||
| 1614 | |||
| 1615 | |||
| 1616 | /* --------------- utility functions for vnodeops ---------------- */ | 1577 | /* --------------- utility functions for vnodeops ---------------- */ |
| 1617 | 1578 | ||
| 1618 | 1579 | ||
