浏览代码

nilfs2: flush palloc cache before manipulating data pages of GC dat

Data pages in gcdat metadata file (i.e. the secondary DAT for GC), are
cleared or even moved back to the normal DAT when a shot of garbage
collection was done.

Buffer heads held by the palloc cache of gcdat must be cleared before
these page cache manipulation.  This adds nilfs_palloc_clear_cache()
to ensure this.

Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Ryusuke Konishi 15 年之前
父节点
当前提交
c3ea56c800
共有 1 个文件被更改,包括 3 次插入0 次删除
  1. 3 0
      fs/nilfs2/gcdat.c

+ 3 - 0
fs/nilfs2/gcdat.c

@@ -61,6 +61,8 @@ void nilfs_commit_gcdat_inode(struct the_nilfs *nilfs)
 
 
 	nilfs_bmap_commit_gcdat(gii->i_bmap, dii->i_bmap);
 	nilfs_bmap_commit_gcdat(gii->i_bmap, dii->i_bmap);
 
 
+	nilfs_palloc_clear_cache(dat);
+	nilfs_palloc_clear_cache(gcdat);
 	nilfs_clear_dirty_pages(mapping);
 	nilfs_clear_dirty_pages(mapping);
 	nilfs_copy_back_pages(mapping, gmapping);
 	nilfs_copy_back_pages(mapping, gmapping);
 	/* note: mdt dirty flags should be cleared by segctor. */
 	/* note: mdt dirty flags should be cleared by segctor. */
@@ -79,6 +81,7 @@ void nilfs_clear_gcdat_inode(struct the_nilfs *nilfs)
 	gcdat->i_state = I_CLEAR;
 	gcdat->i_state = I_CLEAR;
 	gii->i_flags = 0;
 	gii->i_flags = 0;
 
 
+	nilfs_palloc_clear_cache(gcdat);
 	truncate_inode_pages(gcdat->i_mapping, 0);
 	truncate_inode_pages(gcdat->i_mapping, 0);
 	truncate_inode_pages(&gii->i_btnode_cache, 0);
 	truncate_inode_pages(&gii->i_btnode_cache, 0);
 }
 }