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

Commit c8a11c8a authored by Ryusuke Konishi's avatar Ryusuke Konishi
Browse files

nilfs2: add nilfs_set_error



This function marks error state and write it on super blocks.  This is
a preparation for making super block writeback alternately.

Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
parent 7ecaa46c
Loading
Loading
Loading
Loading
+14 −10
Original line number Original line Diff line number Diff line
@@ -74,6 +74,19 @@ struct kmem_cache *nilfs_btree_path_cache;


static int nilfs_remount(struct super_block *sb, int *flags, char *data);
static int nilfs_remount(struct super_block *sb, int *flags, char *data);


static void nilfs_set_error(struct nilfs_sb_info *sbi)
{
	struct the_nilfs *nilfs = sbi->s_nilfs;

	down_write(&nilfs->ns_sem);
	if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) {
		nilfs->ns_mount_state |= NILFS_ERROR_FS;
		nilfs->ns_sbp[0]->s_state |= cpu_to_le16(NILFS_ERROR_FS);
		nilfs_commit_super(sbi, 1);
	}
	up_write(&nilfs->ns_sem);
}

/**
/**
 * nilfs_error() - report failure condition on a filesystem
 * nilfs_error() - report failure condition on a filesystem
 *
 *
@@ -99,16 +112,7 @@ void nilfs_error(struct super_block *sb, const char *function,
	va_end(args);
	va_end(args);


	if (!(sb->s_flags & MS_RDONLY)) {
	if (!(sb->s_flags & MS_RDONLY)) {
		struct the_nilfs *nilfs = sbi->s_nilfs;
		nilfs_set_error(sbi);

		down_write(&nilfs->ns_sem);
		if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) {
			nilfs->ns_mount_state |= NILFS_ERROR_FS;
			nilfs->ns_sbp[0]->s_state |=
				cpu_to_le16(NILFS_ERROR_FS);
			nilfs_commit_super(sbi, 1);
		}
		up_write(&nilfs->ns_sem);


		if (nilfs_test_opt(sbi, ERRORS_RO)) {
		if (nilfs_test_opt(sbi, ERRORS_RO)) {
			printk(KERN_CRIT "Remounting filesystem read-only\n");
			printk(KERN_CRIT "Remounting filesystem read-only\n");