diff options
author | Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> | 2010-07-16 23:52:40 +0900 |
---|---|---|
committer | Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> | 2010-07-23 10:02:13 +0900 |
commit | 1d5385b9f30ae43209459db424416a3e1d8f2bde (patch) | |
tree | 202a19586853da9ec598645b5d289d4a0164b232 /fs/nilfs2/gcinode.c | |
parent | cfa913a5077f7619869b2b4d1bf23ccb4f8b3d7b (diff) | |
download | op-kernel-dev-1d5385b9f30ae43209459db424416a3e1d8f2bde.zip op-kernel-dev-1d5385b9f30ae43209459db424416a3e1d8f2bde.tar.gz |
nilfs2: verify btree node after reading
This inserts sanity checks soon after read btree node from disk. This
allows early detection of broken btree nodes, and helps to narrow down
problems due to file system corruption.
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Diffstat (limited to 'fs/nilfs2/gcinode.c')
-rw-r--r-- | fs/nilfs2/gcinode.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c index 145f03c..edb53fc 100644 --- a/fs/nilfs2/gcinode.c +++ b/fs/nilfs2/gcinode.c @@ -164,10 +164,15 @@ int nilfs_gccache_wait_and_mark_dirty(struct buffer_head *bh) if (buffer_dirty(bh)) return -EEXIST; - if (buffer_nilfs_node(bh)) + if (buffer_nilfs_node(bh)) { + if (nilfs_btree_broken_node_block(bh)) { + clear_buffer_uptodate(bh); + return -EIO; + } nilfs_btnode_mark_dirty(bh); - else + } else { nilfs_mdt_mark_buffer_dirty(bh); + } return 0; } |