[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: assertion in journal_start



Hi,

On Wed, Mar 27, 2002 at 11:04:12AM -0800, Andrew Morton wrote:
> Nick Burrett wrote:
> > 
> > ...
> > 
> > Assertion failure in journal_start() at transaction.c:226: "handle->h_transaction->t_journal == journal"
> 
> Oh hell.  The quota code has gone and done a cross-fs
> nested transaction.
> 
> Stephen, I'm half-inclined to paint this as a core kernel
> bug.  We shouldn't be diving into write_dquot for a
> GFP_NOFS allocation.
> 
> What do you think?

Is it GFP_NOFS, though?  

do_generic_file_read calls page_cache_alloc(), which takes its
gfp_mask from the address_space->gfp_mask field.  That is initialised
by clean_inode() to be GFP_HIGHUSER, which includes __GFP_FS.  It's
just unfortunate that in this case it's the quota file being read, and
we're already in the middle of a transaction.

Clearing __GFP_NOFS on the quota files when we enable them should cure
this.  That's still a core VFS bug, though, as the quota layer is
totally independent of the filesystem and is entirely responsible for
setting up those files itself, but ext3's read_inode may be able to
spot that it's a quota file and do the fixup itself.  I'll have a look
at that.

Cheers, 
 Stephen





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]