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