diff options
author | Joern Engel <joern@logfs.org> | 2010-03-28 12:10:07 -0400 |
---|---|---|
committer | Joern Engel <joern@logfs.org> | 2010-03-28 12:10:07 -0400 |
commit | 723b2ff40876678b49e61df34fb1d8001e34639d (patch) | |
tree | 509282c61e150b6059ea7f84c451641c2b69f757 | |
parent | 81def6b9862764924a99ac1b680e73ac8c80ac64 (diff) |
[LogFS] Clear PagePrivate when moving journal
do_logfs_journal_wl_pass() must call freeseg(), thereby clear
PagePrivate on all pages of the current journal segment.
Signed-off-by: Joern Engel <joern@logfs.org>
-rw-r--r-- | fs/logfs/journal.c | 1 | ||||
-rw-r--r-- | fs/logfs/logfs.h | 1 | ||||
-rw-r--r-- | fs/logfs/segment.c | 2 |
3 files changed, 3 insertions, 1 deletions
diff --git a/fs/logfs/journal.c b/fs/logfs/journal.c index 6ad30a4c9052..15454ac7bd93 100644 --- a/fs/logfs/journal.c +++ b/fs/logfs/journal.c | |||
@@ -821,6 +821,7 @@ void do_logfs_journal_wl_pass(struct super_block *sb) | |||
821 | logfs_set_segment_reserved(sb, segno); | 821 | logfs_set_segment_reserved(sb, segno); |
822 | } | 822 | } |
823 | /* Manually move journal_area */ | 823 | /* Manually move journal_area */ |
824 | freeseg(sb, area->a_segno); | ||
824 | area->a_segno = super->s_journal_seg[0]; | 825 | area->a_segno = super->s_journal_seg[0]; |
825 | area->a_is_open = 0; | 826 | area->a_is_open = 0; |
826 | area->a_used_bytes = 0; | 827 | area->a_used_bytes = 0; |
diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h index 129779431373..b84b0eec6024 100644 --- a/fs/logfs/logfs.h +++ b/fs/logfs/logfs.h | |||
@@ -587,6 +587,7 @@ void move_page_to_btree(struct page *page); | |||
587 | int logfs_init_mapping(struct super_block *sb); | 587 | int logfs_init_mapping(struct super_block *sb); |
588 | void logfs_sync_area(struct logfs_area *area); | 588 | void logfs_sync_area(struct logfs_area *area); |
589 | void logfs_sync_segments(struct super_block *sb); | 589 | void logfs_sync_segments(struct super_block *sb); |
590 | void freeseg(struct super_block *sb, u32 segno); | ||
590 | 591 | ||
591 | /* area handling */ | 592 | /* area handling */ |
592 | int logfs_init_areas(struct super_block *sb); | 593 | int logfs_init_areas(struct super_block *sb); |
diff --git a/fs/logfs/segment.c b/fs/logfs/segment.c index ff9d7f3b4d36..0ecd8f07c11e 100644 --- a/fs/logfs/segment.c +++ b/fs/logfs/segment.c | |||
@@ -691,7 +691,7 @@ int logfs_segment_delete(struct inode *inode, struct logfs_shadow *shadow) | |||
691 | return 0; | 691 | return 0; |
692 | } | 692 | } |
693 | 693 | ||
694 | static void freeseg(struct super_block *sb, u32 segno) | 694 | void freeseg(struct super_block *sb, u32 segno) |
695 | { | 695 | { |
696 | struct logfs_super *super = logfs_super(sb); | 696 | struct logfs_super *super = logfs_super(sb); |
697 | struct address_space *mapping = super->s_mapping_inode->i_mapping; | 697 | struct address_space *mapping = super->s_mapping_inode->i_mapping; |