* [PATCH] quota: Fix possible infinite loop in quota code
@ 2008-07-09 17:30 Jan Kara
2008-07-09 22:12 ` Andrew Morton
0 siblings, 1 reply; 4+ messages in thread
From: Jan Kara @ 2008-07-09 17:30 UTC (permalink / raw)
To: Andrew Morton; +Cc: LKML, Jan Kara
When quota structure is going to be dropped and it is dirty, quota code
tries to write it. If the write fails for some reason (e. g. transaction
cannot be started because the journal is aborted), we try writing again
and again and again... Fix the problem by clearing the dirty bit even if
the write failed.
Signed-off-by: Jan Kara <jack@suse.cz>
Reported-by: dingdinghua <dingdinghua85@gmail.com>
---
fs/dquot.c | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/fs/dquot.c b/fs/dquot.c
index 5ac77da..ad88cf6 100644
--- a/fs/dquot.c
+++ b/fs/dquot.c
@@ -562,6 +562,8 @@ static struct shrinker dqcache_shrinker = {
*/
static void dqput(struct dquot *dquot)
{
+ int ret;
+
if (!dquot)
return;
#ifdef __DQUOT_PARANOIA
@@ -594,7 +596,19 @@ we_slept:
if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) {
spin_unlock(&dq_list_lock);
/* Commit dquot before releasing */
- dquot->dq_sb->dq_op->write_dquot(dquot);
+ ret = dquot->dq_sb->dq_op->write_dquot(dquot);
+ if (ret < 0) {
+ printk(KERN_ERR "VFS: cannot write quota structure on "
+ "device %s (error %d). Quota may get out of "
+ "sync!\n", dquot->dq_sb->s_id, ret);
+ /*
+ * We clear dirty bit anyway, so that we avoid
+ * infinite loop here
+ */
+ spin_lock(&dq_list_lock);
+ clear_dquot_dirty(dquot);
+ spin_unlock(&dq_list_lock);
+ }
goto we_slept;
}
/* Clear flag in case dquot was inactive (something bad happened) */
--
1.5.2.4
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] quota: Fix possible infinite loop in quota code
2008-07-09 17:30 [PATCH] quota: Fix possible infinite loop in quota code Jan Kara
@ 2008-07-09 22:12 ` Andrew Morton
2008-07-10 9:05 ` Jan Kara
0 siblings, 1 reply; 4+ messages in thread
From: Andrew Morton @ 2008-07-09 22:12 UTC (permalink / raw)
To: Jan Kara; +Cc: LKML, stable
On Wed, 9 Jul 2008 19:30:41 +0200 Jan Kara <jack@suse.cz> wrote:
> When quota structure is going to be dropped and it is dirty, quota code
> tries to write it. If the write fails for some reason (e. g. transaction
> cannot be started because the journal is aborted), we try writing again
> and again and again... Fix the problem by clearing the dirty bit even if
> the write failed.
What do you consider the priority is here? Needed in 2.6.26? Backport to
2.6.25.x? Merge into 2.6.27 with a backport to 2.6.26.x and 2.6.25.x?
Lots of options ;)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] quota: Fix possible infinite loop in quota code
2008-07-09 22:12 ` Andrew Morton
@ 2008-07-10 9:05 ` Jan Kara
2008-07-10 9:13 ` Andrew Morton
0 siblings, 1 reply; 4+ messages in thread
From: Jan Kara @ 2008-07-10 9:05 UTC (permalink / raw)
To: Andrew Morton; +Cc: LKML, stable
On Wed 09-07-08 15:12:54, Andrew Morton wrote:
> On Wed, 9 Jul 2008 19:30:41 +0200 Jan Kara <jack@suse.cz> wrote:
>
> > When quota structure is going to be dropped and it is dirty, quota code
> > tries to write it. If the write fails for some reason (e. g. transaction
> > cannot be started because the journal is aborted), we try writing again
> > and again and again... Fix the problem by clearing the dirty bit even if
> > the write failed.
>
> What do you consider the priority is here? Needed in 2.6.26? Backport to
> 2.6.25.x? Merge into 2.6.27 with a backport to 2.6.26.x and 2.6.25.x?
>
> Lots of options ;)
Since nobody has really seen it in the wild, I don't think it's urgent.
The bug has been there for 5 years or so without notice... I'd just let it
be included in 2.6.26.x maybe 2.6.25.x and push into 2.6.27.
Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] quota: Fix possible infinite loop in quota code
2008-07-10 9:05 ` Jan Kara
@ 2008-07-10 9:13 ` Andrew Morton
0 siblings, 0 replies; 4+ messages in thread
From: Andrew Morton @ 2008-07-10 9:13 UTC (permalink / raw)
To: Jan Kara; +Cc: LKML, stable
On Thu, 10 Jul 2008 11:05:53 +0200 Jan Kara <jack@suse.cz> wrote:
> On Wed 09-07-08 15:12:54, Andrew Morton wrote:
> > On Wed, 9 Jul 2008 19:30:41 +0200 Jan Kara <jack@suse.cz> wrote:
> >
> > > When quota structure is going to be dropped and it is dirty, quota code
> > > tries to write it. If the write fails for some reason (e. g. transaction
> > > cannot be started because the journal is aborted), we try writing again
> > > and again and again... Fix the problem by clearing the dirty bit even if
> > > the write failed.
> >
> > What do you consider the priority is here? Needed in 2.6.26? Backport to
> > 2.6.25.x? Merge into 2.6.27 with a backport to 2.6.26.x and 2.6.25.x?
> >
> > Lots of options ;)
> Since nobody has really seen it in the wild, I don't think it's urgent.
> The bug has been there for 5 years or so without notice... I'd just let it
> be included in 2.6.26.x maybe 2.6.25.x and push into 2.6.27.
>
So noted, thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-07-10 9:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-07-09 17:30 [PATCH] quota: Fix possible infinite loop in quota code Jan Kara
2008-07-09 22:12 ` Andrew Morton
2008-07-10 9:05 ` Jan Kara
2008-07-10 9:13 ` Andrew Morton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome