aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nilfs2/gcinode.c1
-rw-r--r--fs/nilfs2/mdt.c7
-rw-r--r--fs/nilfs2/mdt.h1
-rw-r--r--fs/nilfs2/recovery.c6
-rw-r--r--fs/nilfs2/super.c1
-rw-r--r--fs/nilfs2/the_nilfs.c4
6 files changed, 5 insertions, 15 deletions
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c
index 32b04da03829..67d2099475b2 100644
--- a/fs/nilfs2/gcinode.c
+++ b/fs/nilfs2/gcinode.c
@@ -266,7 +266,6 @@ struct inode *nilfs_gc_iget(struct the_nilfs *nilfs, ino_t ino, __u64 cno)
266 */ 266 */
267void nilfs_clear_gcinode(struct inode *inode) 267void nilfs_clear_gcinode(struct inode *inode)
268{ 268{
269 nilfs_mdt_clear(inode);
270 nilfs_mdt_destroy(inode); 269 nilfs_mdt_destroy(inode);
271} 270}
272 271
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c
index 62074e8d25cb..3028e8f31be2 100644
--- a/fs/nilfs2/mdt.c
+++ b/fs/nilfs2/mdt.c
@@ -553,14 +553,15 @@ void nilfs_mdt_set_shadow(struct inode *orig, struct inode *shadow)
553 &NILFS_I(orig)->i_btnode_cache; 553 &NILFS_I(orig)->i_btnode_cache;
554} 554}
555 555
556void nilfs_mdt_clear(struct inode *inode) 556static void nilfs_mdt_clear(struct inode *inode)
557{ 557{
558 struct nilfs_inode_info *ii = NILFS_I(inode); 558 struct nilfs_inode_info *ii = NILFS_I(inode);
559 559
560 invalidate_mapping_pages(inode->i_mapping, 0, -1); 560 invalidate_mapping_pages(inode->i_mapping, 0, -1);
561 truncate_inode_pages(inode->i_mapping, 0); 561 truncate_inode_pages(inode->i_mapping, 0);
562 562
563 nilfs_bmap_clear(ii->i_bmap); 563 if (test_bit(NILFS_I_BMAP, &ii->i_state))
564 nilfs_bmap_clear(ii->i_bmap);
564 nilfs_btnode_cache_clear(&ii->i_btnode_cache); 565 nilfs_btnode_cache_clear(&ii->i_btnode_cache);
565} 566}
566 567
@@ -568,6 +569,8 @@ void nilfs_mdt_destroy(struct inode *inode)
568{ 569{
569 struct nilfs_mdt_info *mdi = NILFS_MDT(inode); 570 struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
570 571
572 nilfs_mdt_clear(inode);
573
571 kfree(mdi->mi_bgl); /* kfree(NULL) is safe */ 574 kfree(mdi->mi_bgl); /* kfree(NULL) is safe */
572 kfree(mdi); 575 kfree(mdi);
573 nilfs_destroy_inode(inode); 576 nilfs_destroy_inode(inode);
diff --git a/fs/nilfs2/mdt.h b/fs/nilfs2/mdt.h
index cd2903af3c30..c396b6c03931 100644
--- a/fs/nilfs2/mdt.h
+++ b/fs/nilfs2/mdt.h
@@ -79,7 +79,6 @@ struct inode *nilfs_mdt_new(struct the_nilfs *, struct super_block *, ino_t,
79struct inode *nilfs_mdt_new_common(struct the_nilfs *, struct super_block *, 79struct inode *nilfs_mdt_new_common(struct the_nilfs *, struct super_block *,
80 ino_t, gfp_t, size_t); 80 ino_t, gfp_t, size_t);
81void nilfs_mdt_destroy(struct inode *); 81void nilfs_mdt_destroy(struct inode *);
82void nilfs_mdt_clear(struct inode *);
83void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned); 82void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned);
84void nilfs_mdt_set_shadow(struct inode *, struct inode *); 83void nilfs_mdt_set_shadow(struct inode *, struct inode *);
85 84
diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c
index 6dc83591d118..bcd386d604d7 100644
--- a/fs/nilfs2/recovery.c
+++ b/fs/nilfs2/recovery.c
@@ -770,14 +770,8 @@ int nilfs_recover_logical_segments(struct the_nilfs *nilfs,
770 nilfs_finish_roll_forward(nilfs, sbi, ri); 770 nilfs_finish_roll_forward(nilfs, sbi, ri);
771 } 771 }
772 772
773 nilfs_detach_checkpoint(sbi);
774 return 0;
775
776 failed: 773 failed:
777 nilfs_detach_checkpoint(sbi); 774 nilfs_detach_checkpoint(sbi);
778 nilfs_mdt_clear(nilfs->ns_cpfile);
779 nilfs_mdt_clear(nilfs->ns_sufile);
780 nilfs_mdt_clear(nilfs->ns_dat);
781 return err; 775 return err;
782} 776}
783 777
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 05ae52a482c6..f52616977ea0 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -407,7 +407,6 @@ void nilfs_detach_checkpoint(struct nilfs_sb_info *sbi)
407{ 407{
408 struct the_nilfs *nilfs = sbi->s_nilfs; 408 struct the_nilfs *nilfs = sbi->s_nilfs;
409 409
410 nilfs_mdt_clear(sbi->s_ifile);
411 nilfs_mdt_destroy(sbi->s_ifile); 410 nilfs_mdt_destroy(sbi->s_ifile);
412 sbi->s_ifile = NULL; 411 sbi->s_ifile = NULL;
413 down_write(&nilfs->ns_super_sem); 412 down_write(&nilfs->ns_super_sem);
diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
index bc7760c2a8f2..75095edec2fc 100644
--- a/fs/nilfs2/the_nilfs.c
+++ b/fs/nilfs2/the_nilfs.c
@@ -146,13 +146,9 @@ void put_nilfs(struct the_nilfs *nilfs)
146 146
147 might_sleep(); 147 might_sleep();
148 if (nilfs_loaded(nilfs)) { 148 if (nilfs_loaded(nilfs)) {
149 nilfs_mdt_clear(nilfs->ns_sufile);
150 nilfs_mdt_destroy(nilfs->ns_sufile); 149 nilfs_mdt_destroy(nilfs->ns_sufile);
151 nilfs_mdt_clear(nilfs->ns_cpfile);
152 nilfs_mdt_destroy(nilfs->ns_cpfile); 150 nilfs_mdt_destroy(nilfs->ns_cpfile);
153 nilfs_mdt_clear(nilfs->ns_dat);
154 nilfs_mdt_destroy(nilfs->ns_dat); 151 nilfs_mdt_destroy(nilfs->ns_dat);
155 /* XXX: how and when to clear nilfs->ns_gc_dat? */
156 nilfs_mdt_destroy(nilfs->ns_gc_dat); 152 nilfs_mdt_destroy(nilfs->ns_gc_dat);
157 } 153 }
158 if (nilfs_init(nilfs)) { 154 if (nilfs_init(nilfs)) {