aboutsummaryrefslogtreecommitdiffstats
path: root/fs/quota
diff options
context:
space:
mode:
Diffstat (limited to 'fs/quota')
-rw-r--r--fs/quota/dquot.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index baf202c012cc..ed131318b849 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -1531,15 +1531,15 @@ EXPORT_SYMBOL(__dquot_alloc_space);
1531/* 1531/*
1532 * This operation can block, but only after everything is updated 1532 * This operation can block, but only after everything is updated
1533 */ 1533 */
1534int dquot_alloc_inode(const struct inode *inode, qsize_t number) 1534int dquot_alloc_inode(const struct inode *inode)
1535{ 1535{
1536 int cnt, ret = NO_QUOTA; 1536 int cnt, ret = -EDQUOT;
1537 char warntype[MAXQUOTAS]; 1537 char warntype[MAXQUOTAS];
1538 1538
1539 /* First test before acquiring mutex - solves deadlocks when we 1539 /* First test before acquiring mutex - solves deadlocks when we
1540 * re-enter the quota code and are already holding the mutex */ 1540 * re-enter the quota code and are already holding the mutex */
1541 if (IS_NOQUOTA(inode)) 1541 if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode))
1542 return QUOTA_OK; 1542 return 0;
1543 for (cnt = 0; cnt < MAXQUOTAS; cnt++) 1543 for (cnt = 0; cnt < MAXQUOTAS; cnt++)
1544 warntype[cnt] = QUOTA_NL_NOWARN; 1544 warntype[cnt] = QUOTA_NL_NOWARN;
1545 down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); 1545 down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
@@ -1547,7 +1547,7 @@ int dquot_alloc_inode(const struct inode *inode, qsize_t number)
1547 for (cnt = 0; cnt < MAXQUOTAS; cnt++) { 1547 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1548 if (!inode->i_dquot[cnt]) 1548 if (!inode->i_dquot[cnt])
1549 continue; 1549 continue;
1550 if (check_idq(inode->i_dquot[cnt], number, warntype+cnt) 1550 if (check_idq(inode->i_dquot[cnt], 1, warntype+cnt)
1551 == NO_QUOTA) 1551 == NO_QUOTA)
1552 goto warn_put_all; 1552 goto warn_put_all;
1553 } 1553 }
@@ -1555,12 +1555,12 @@ int dquot_alloc_inode(const struct inode *inode, qsize_t number)
1555 for (cnt = 0; cnt < MAXQUOTAS; cnt++) { 1555 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1556 if (!inode->i_dquot[cnt]) 1556 if (!inode->i_dquot[cnt])
1557 continue; 1557 continue;
1558 dquot_incr_inodes(inode->i_dquot[cnt], number); 1558 dquot_incr_inodes(inode->i_dquot[cnt], 1);
1559 } 1559 }
1560 ret = QUOTA_OK; 1560 ret = 0;
1561warn_put_all: 1561warn_put_all:
1562 spin_unlock(&dq_data_lock); 1562 spin_unlock(&dq_data_lock);
1563 if (ret == QUOTA_OK) 1563 if (ret == 0)
1564 mark_all_dquot_dirty(inode->i_dquot); 1564 mark_all_dquot_dirty(inode->i_dquot);
1565 flush_warnings(inode->i_dquot, warntype); 1565 flush_warnings(inode->i_dquot, warntype);
1566 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); 1566 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
@@ -1638,29 +1638,28 @@ EXPORT_SYMBOL(__dquot_free_space);
1638/* 1638/*
1639 * This operation can block, but only after everything is updated 1639 * This operation can block, but only after everything is updated
1640 */ 1640 */
1641int dquot_free_inode(const struct inode *inode, qsize_t number) 1641void dquot_free_inode(const struct inode *inode)
1642{ 1642{
1643 unsigned int cnt; 1643 unsigned int cnt;
1644 char warntype[MAXQUOTAS]; 1644 char warntype[MAXQUOTAS];
1645 1645
1646 /* First test before acquiring mutex - solves deadlocks when we 1646 /* First test before acquiring mutex - solves deadlocks when we
1647 * re-enter the quota code and are already holding the mutex */ 1647 * re-enter the quota code and are already holding the mutex */
1648 if (IS_NOQUOTA(inode)) 1648 if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode))
1649 return QUOTA_OK; 1649 return;
1650 1650
1651 down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); 1651 down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
1652 spin_lock(&dq_data_lock); 1652 spin_lock(&dq_data_lock);
1653 for (cnt = 0; cnt < MAXQUOTAS; cnt++) { 1653 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1654 if (!inode->i_dquot[cnt]) 1654 if (!inode->i_dquot[cnt])
1655 continue; 1655 continue;
1656 warntype[cnt] = info_idq_free(inode->i_dquot[cnt], number); 1656 warntype[cnt] = info_idq_free(inode->i_dquot[cnt], 1);
1657 dquot_decr_inodes(inode->i_dquot[cnt], number); 1657 dquot_decr_inodes(inode->i_dquot[cnt], 1);
1658 } 1658 }
1659 spin_unlock(&dq_data_lock); 1659 spin_unlock(&dq_data_lock);
1660 mark_all_dquot_dirty(inode->i_dquot); 1660 mark_all_dquot_dirty(inode->i_dquot);
1661 flush_warnings(inode->i_dquot, warntype); 1661 flush_warnings(inode->i_dquot, warntype);
1662 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); 1662 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
1663 return QUOTA_OK;
1664} 1663}
1665EXPORT_SYMBOL(dquot_free_inode); 1664EXPORT_SYMBOL(dquot_free_inode);
1666 1665
@@ -1815,8 +1814,6 @@ EXPORT_SYMBOL(dquot_commit_info);
1815const struct dquot_operations dquot_operations = { 1814const struct dquot_operations dquot_operations = {
1816 .initialize = dquot_initialize, 1815 .initialize = dquot_initialize,
1817 .drop = dquot_drop, 1816 .drop = dquot_drop,
1818 .alloc_inode = dquot_alloc_inode,
1819 .free_inode = dquot_free_inode,
1820 .transfer = dquot_transfer, 1817 .transfer = dquot_transfer,
1821 .write_dquot = dquot_commit, 1818 .write_dquot = dquot_commit,
1822 .acquire_dquot = dquot_acquire, 1819 .acquire_dquot = dquot_acquire,