diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/dquot.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/fs/dquot.c b/fs/dquot.c index 5ac77da19959..ad88cf6fcbaf 100644 --- a/fs/dquot.c +++ b/fs/dquot.c | |||
@@ -562,6 +562,8 @@ static struct shrinker dqcache_shrinker = { | |||
562 | */ | 562 | */ |
563 | static void dqput(struct dquot *dquot) | 563 | static void dqput(struct dquot *dquot) |
564 | { | 564 | { |
565 | int ret; | ||
566 | |||
565 | if (!dquot) | 567 | if (!dquot) |
566 | return; | 568 | return; |
567 | #ifdef __DQUOT_PARANOIA | 569 | #ifdef __DQUOT_PARANOIA |
@@ -594,7 +596,19 @@ we_slept: | |||
594 | if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) { | 596 | if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) { |
595 | spin_unlock(&dq_list_lock); | 597 | spin_unlock(&dq_list_lock); |
596 | /* Commit dquot before releasing */ | 598 | /* Commit dquot before releasing */ |
597 | dquot->dq_sb->dq_op->write_dquot(dquot); | 599 | ret = dquot->dq_sb->dq_op->write_dquot(dquot); |
600 | if (ret < 0) { | ||
601 | printk(KERN_ERR "VFS: cannot write quota structure on " | ||
602 | "device %s (error %d). Quota may get out of " | ||
603 | "sync!\n", dquot->dq_sb->s_id, ret); | ||
604 | /* | ||
605 | * We clear dirty bit anyway, so that we avoid | ||
606 | * infinite loop here | ||
607 | */ | ||
608 | spin_lock(&dq_list_lock); | ||
609 | clear_dquot_dirty(dquot); | ||
610 | spin_unlock(&dq_list_lock); | ||
611 | } | ||
598 | goto we_slept; | 612 | goto we_slept; |
599 | } | 613 | } |
600 | /* Clear flag in case dquot was inactive (something bad happened) */ | 614 | /* Clear flag in case dquot was inactive (something bad happened) */ |