|
|
|
@ -1088,27 +1088,6 @@ static inline void dquot_resv_space(struct dquot *dquot, qsize_t number) |
|
|
|
|
dquot->dq_dqb.dqb_rsvspace += number; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Claim reserved quota space |
|
|
|
|
*/ |
|
|
|
|
static void dquot_claim_reserved_space(struct dquot *dquot, qsize_t number) |
|
|
|
|
{ |
|
|
|
|
if (dquot->dq_dqb.dqb_rsvspace < number) { |
|
|
|
|
WARN_ON_ONCE(1); |
|
|
|
|
number = dquot->dq_dqb.dqb_rsvspace; |
|
|
|
|
} |
|
|
|
|
dquot->dq_dqb.dqb_curspace += number; |
|
|
|
|
dquot->dq_dqb.dqb_rsvspace -= number; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void dquot_reclaim_reserved_space(struct dquot *dquot, qsize_t number) |
|
|
|
|
{ |
|
|
|
|
if (WARN_ON_ONCE(dquot->dq_dqb.dqb_curspace < number)) |
|
|
|
|
number = dquot->dq_dqb.dqb_curspace; |
|
|
|
|
dquot->dq_dqb.dqb_rsvspace += number; |
|
|
|
|
dquot->dq_dqb.dqb_curspace -= number; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline |
|
|
|
|
void dquot_free_reserved_space(struct dquot *dquot, qsize_t number) |
|
|
|
|
{ |
|
|
|
@ -1732,8 +1711,14 @@ int dquot_claim_space_nodirty(struct inode *inode, qsize_t number) |
|
|
|
|
spin_lock(&dq_data_lock); |
|
|
|
|
/* Claim reserved quotas to allocated quotas */ |
|
|
|
|
for (cnt = 0; cnt < MAXQUOTAS; cnt++) { |
|
|
|
|
if (dquots[cnt]) |
|
|
|
|
dquot_claim_reserved_space(dquots[cnt], number); |
|
|
|
|
if (dquots[cnt]) { |
|
|
|
|
struct dquot *dquot = dquots[cnt]; |
|
|
|
|
|
|
|
|
|
if (WARN_ON_ONCE(dquot->dq_dqb.dqb_rsvspace < number)) |
|
|
|
|
number = dquot->dq_dqb.dqb_rsvspace; |
|
|
|
|
dquot->dq_dqb.dqb_curspace += number; |
|
|
|
|
dquot->dq_dqb.dqb_rsvspace -= number; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/* Update inode bytes */ |
|
|
|
|
spin_lock(&inode->i_lock); |
|
|
|
@ -1768,8 +1753,14 @@ void dquot_reclaim_space_nodirty(struct inode *inode, qsize_t number) |
|
|
|
|
spin_lock(&dq_data_lock); |
|
|
|
|
/* Claim reserved quotas to allocated quotas */ |
|
|
|
|
for (cnt = 0; cnt < MAXQUOTAS; cnt++) { |
|
|
|
|
if (dquots[cnt]) |
|
|
|
|
dquot_reclaim_reserved_space(dquots[cnt], number); |
|
|
|
|
if (dquots[cnt]) { |
|
|
|
|
struct dquot *dquot = dquots[cnt]; |
|
|
|
|
|
|
|
|
|
if (WARN_ON_ONCE(dquot->dq_dqb.dqb_curspace < number)) |
|
|
|
|
number = dquot->dq_dqb.dqb_curspace; |
|
|
|
|
dquot->dq_dqb.dqb_rsvspace += number; |
|
|
|
|
dquot->dq_dqb.dqb_curspace -= number; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/* Update inode bytes */ |
|
|
|
|
spin_lock(&inode->i_lock); |
|
|
|
|