nilfs2: shorten freeze period due to GC in write operation v3
[safe/jmp/linux-2.6] / fs / nilfs2 / super.c
index ed8ec57..50284ad 100644 (file)
@@ -792,10 +792,15 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent,
 
        if (sb->s_flags & MS_RDONLY) {
                if (nilfs_test_opt(sbi, SNAPSHOT)) {
+                       down_read(&nilfs->ns_segctor_sem);
                        err = nilfs_cpfile_is_snapshot(nilfs->ns_cpfile,
                                                       sbi->s_snapshot_cno);
-                       if (err < 0)
+                       up_read(&nilfs->ns_segctor_sem);
+                       if (err < 0) {
+                               if (err == -ENOENT)
+                                       err = -EINVAL;
                                goto failed_sbi;
+                       }
                        if (!err) {
                                printk(KERN_ERR
                                       "NILFS: The specified checkpoint is "
@@ -1103,10 +1108,6 @@ nilfs_get_sb(struct file_system_type *fs_type, int flags,
         */
        sd.sbi = nilfs_find_sbinfo(nilfs, !(flags & MS_RDONLY), sd.cno);
 
-       if (!sd.cno)
-               /* trying to get the latest checkpoint.  */
-               sd.cno = nilfs_last_cno(nilfs);
-
        /*
         * Get super block instance holding the nilfs_sb_info struct.
         * A new instance is allocated if no existing mount is present or