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

Re: assertion in journal_start



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.
> 

Sorry, I misread the trace.  It is:

ext3_new_inode
->DQUOT_ALLOC_INODE
  ->read(quota file)
    ->alloc_page
      ->shrink_caches
        ->prune_icache
          ->dq_drop
            ->write_dquot

What a mess.

It would be so much simpler if gfp_flags was part of task_struct,
rather than propagated all over the place.

Nick, here's a hack which should make the crash go away,
if it's being a problem:

--- linux-2.4.19-pre4/fs/inode.c	Fri Dec 21 11:19:14 2001
+++ linux-akpm/fs/inode.c	Wed Mar 27 11:32:58 2002
@@ -722,6 +722,9 @@ int shrink_icache_memory(int priority, i
 	if (!(gfp_mask & __GFP_FS))
 		return 0;
 
+	if (current->journal_info)
+		return 0;
+
 	count = inodes_stat.nr_unused / priority;
 
 	prune_icache(count);

-





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