diff options
Diffstat (limited to 'fs/logfs/journal.c')
| -rw-r--r-- | fs/logfs/journal.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/logfs/journal.c b/fs/logfs/journal.c index 6ad30a4c905..33bd260b830 100644 --- a/fs/logfs/journal.c +++ b/fs/logfs/journal.c @@ -6,6 +6,7 @@   * Copyright (c) 2005-2008 Joern Engel <joern@logfs.org>   */  #include "logfs.h" +#include <linux/slab.h>  static void logfs_calc_free(struct super_block *sb)  { @@ -800,6 +801,7 @@ void do_logfs_journal_wl_pass(struct super_block *sb)  {  	struct logfs_super *super = logfs_super(sb);  	struct logfs_area *area = super->s_journal_area; +	struct btree_head32 *head = &super->s_reserved_segments;  	u32 segno, ec;  	int i, err; @@ -807,6 +809,7 @@ void do_logfs_journal_wl_pass(struct super_block *sb)  	/* Drop old segments */  	journal_for_each(i)  		if (super->s_journal_seg[i]) { +			btree_remove32(head, super->s_journal_seg[i]);  			logfs_set_segment_unreserved(sb,  					super->s_journal_seg[i],  					super->s_journal_ec[i]); @@ -819,8 +822,13 @@ void do_logfs_journal_wl_pass(struct super_block *sb)  		super->s_journal_seg[i] = segno;  		super->s_journal_ec[i] = ec;  		logfs_set_segment_reserved(sb, segno); +		err = btree_insert32(head, segno, (void *)1, GFP_KERNEL); +		BUG_ON(err); /* mempool should prevent this */ +		err = logfs_erase_segment(sb, segno, 1); +		BUG_ON(err); /* FIXME: remount-ro would be nicer */  	}  	/* Manually move journal_area */ +	freeseg(sb, area->a_segno);  	area->a_segno = super->s_journal_seg[0];  	area->a_is_open = 0;  	area->a_used_bytes = 0;  |