summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhang Qiang <zhangqiang.buaa@gmail.com>2009-08-18 08:58:24 +0200
committerRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>2009-08-18 10:32:27 +0200
commit1154ecbd2f8298ef75609f5f8ed5aca96be599fb (patch)
treea6801fc442fecf4c0b2a1dc1d7a5350910983041
parentLinux 2.6.31-rc6 (diff)
downloadlinux-1154ecbd2f8298ef75609f5f8ed5aca96be599fb.tar.xz
linux-1154ecbd2f8298ef75609f5f8ed5aca96be599fb.zip
nilfs2: missing a read lock for segment writer in nilfs_attach_checkpoint()
'ns_cno' of structure 'the_nilfs' must be protected from segment writer, in other words, the caller of nilfs_get_checkpoint should hold read lock for nilfs->ns_segctor_sem. This patch adds the lock/unlock operations in nilfs_attach_checkpoint() when calling nilfs_cpfile_get_checkpoint(). Signed-off-by: Zhang Qiang <zhangqiang.buaa@gmail.com> Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
-rw-r--r--fs/nilfs2/super.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 8e2ec43b18f4..151964f0de4c 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -416,8 +416,10 @@ int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno)
if (unlikely(err))
goto failed;
+ down_read(&nilfs->ns_segctor_sem);
err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp,
&bh_cp);
+ up_read(&nilfs->ns_segctor_sem);
if (unlikely(err)) {
if (err == -ENOENT || err == -EINVAL) {
printk(KERN_ERR