Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 843d63ba authored by Ryusuke Konishi's avatar Ryusuke Konishi
Browse files

nilfs2: separate setup of log cursor from init_nilfs



This separates a setup routine of log cursor from init_nilfs().  The
routine, nilfs_store_log_cursor, reads the last position of the log
containing a super root, and initializes relevant state on the nilfs
object.

Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
parent b2ac86e1
Loading
Loading
Loading
Loading
+32 −13
Original line number Original line Diff line number Diff line
@@ -246,6 +246,36 @@ static void nilfs_clear_recovery_info(struct nilfs_recovery_info *ri)
	nilfs_dispose_segment_list(&ri->ri_used_segments);
	nilfs_dispose_segment_list(&ri->ri_used_segments);
}
}


/**
 * nilfs_store_log_cursor - load log cursor from a super block
 * @nilfs: nilfs object
 * @sbp: buffer storing super block to be read
 *
 * nilfs_store_log_cursor() reads the last position of the log
 * containing a super root from a given super block, and initializes
 * relevant information on the nilfs object preparatory for log
 * scanning and recovery.
 */
static int nilfs_store_log_cursor(struct the_nilfs *nilfs,
				  struct nilfs_super_block *sbp)
{
	int ret = 0;

	nilfs->ns_last_pseg = le64_to_cpu(sbp->s_last_pseg);
	nilfs->ns_last_cno = le64_to_cpu(sbp->s_last_cno);
	nilfs->ns_last_seq = le64_to_cpu(sbp->s_last_seq);

	nilfs->ns_seg_seq = nilfs->ns_last_seq;
	nilfs->ns_segnum =
		nilfs_get_segnum_of_block(nilfs, nilfs->ns_last_pseg);
	nilfs->ns_cno = nilfs->ns_last_cno + 1;
	if (nilfs->ns_segnum >= nilfs->ns_nsegments) {
		printk(KERN_ERR "NILFS invalid last segment number.\n");
		ret = -EINVAL;
	}
	return ret;
}

/**
/**
 * load_nilfs - load and recover the nilfs
 * load_nilfs - load and recover the nilfs
 * @nilfs: the_nilfs structure to be released
 * @nilfs: the_nilfs structure to be released
@@ -615,20 +645,9 @@ int init_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi, char *data)
	bdi = nilfs->ns_bdev->bd_inode->i_mapping->backing_dev_info;
	bdi = nilfs->ns_bdev->bd_inode->i_mapping->backing_dev_info;
	nilfs->ns_bdi = bdi ? : &default_backing_dev_info;
	nilfs->ns_bdi = bdi ? : &default_backing_dev_info;


	/* Finding last segment */
	err = nilfs_store_log_cursor(nilfs, sbp);
	nilfs->ns_last_pseg = le64_to_cpu(sbp->s_last_pseg);
	if (err)
	nilfs->ns_last_cno = le64_to_cpu(sbp->s_last_cno);
	nilfs->ns_last_seq = le64_to_cpu(sbp->s_last_seq);

	nilfs->ns_seg_seq = nilfs->ns_last_seq;
	nilfs->ns_segnum =
		nilfs_get_segnum_of_block(nilfs, nilfs->ns_last_pseg);
	nilfs->ns_cno = nilfs->ns_last_cno + 1;
	if (nilfs->ns_segnum >= nilfs->ns_nsegments) {
		printk(KERN_ERR "NILFS invalid last segment number.\n");
		err = -EINVAL;
		goto failed_sbh;
		goto failed_sbh;
	}


	/* Initialize gcinode cache */
	/* Initialize gcinode cache */
	err = nilfs_init_gccache(nilfs);
	err = nilfs_init_gccache(nilfs);