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

Commit 61a189e9 authored by Ryusuke Konishi's avatar Ryusuke Konishi
Browse files

nilfs2: move routine marking segment usage dirty into sufile



This adds nilfs_sufile_mark_dirty() function in sufile to replace
nilfs_touch_segusage() function in log writer code.  This is a
preparation for the further cleanup which will move out low level
sufile operations in the log writer.

Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
parent 70622a20
Loading
Loading
Loading
Loading
+2 −17
Original line number Original line Diff line number Diff line
@@ -1273,21 +1273,6 @@ static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mode)
	return err;
	return err;
}
}


static int nilfs_touch_segusage(struct inode *sufile, __u64 segnum)
{
	struct buffer_head *bh_su;
	struct nilfs_segment_usage *raw_su;
	int err;

	err = nilfs_sufile_get_segment_usage(sufile, segnum, &raw_su, &bh_su);
	if (unlikely(err))
		return err;
	nilfs_mdt_mark_buffer_dirty(bh_su);
	nilfs_mdt_mark_dirty(sufile);
	nilfs_sufile_put_segment_usage(sufile, segnum, bh_su);
	return 0;
}

static int nilfs_segctor_begin_construction(struct nilfs_sc_info *sci,
static int nilfs_segctor_begin_construction(struct nilfs_sc_info *sci,
					    struct the_nilfs *nilfs)
					    struct the_nilfs *nilfs)
{
{
@@ -1312,7 +1297,7 @@ static int nilfs_segctor_begin_construction(struct nilfs_sc_info *sci,
	}
	}
	sci->sc_segbuf_nblocks = segbuf->sb_rest_blocks;
	sci->sc_segbuf_nblocks = segbuf->sb_rest_blocks;


	err = nilfs_touch_segusage(nilfs->ns_sufile, segbuf->sb_segnum);
	err = nilfs_sufile_mark_dirty(nilfs->ns_sufile, segbuf->sb_segnum);
	if (unlikely(err))
	if (unlikely(err))
		return err;
		return err;


@@ -1352,7 +1337,7 @@ static int nilfs_segctor_extend_segments(struct nilfs_sc_info *sci,
	 * not be dirty.  The following call ensures that the buffer is dirty
	 * not be dirty.  The following call ensures that the buffer is dirty
	 * and will pin the buffer on memory until the sufile is written.
	 * and will pin the buffer on memory until the sufile is written.
	 */
	 */
	err = nilfs_touch_segusage(sufile, prev->sb_nextnum);
	err = nilfs_sufile_mark_dirty(sufile, prev->sb_nextnum);
	if (unlikely(err))
	if (unlikely(err))
		return err;
		return err;


+19 −0
Original line number Original line Diff line number Diff line
@@ -501,6 +501,25 @@ void nilfs_sufile_put_segment_usage(struct inode *sufile, __u64 segnum,
	brelse(bh);
	brelse(bh);
}
}


/**
 * nilfs_sufile_mark_dirty - mark the buffer having a segment usage dirty
 * @sufile: inode of segment usage file
 * @segnum: segment number
 */
int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum)
{
	struct buffer_head *bh;
	int ret;

	ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh);
	if (!ret) {
		nilfs_mdt_mark_buffer_dirty(bh);
		nilfs_mdt_mark_dirty(sufile);
		brelse(bh);
	}
	return ret;
}

/**
/**
 * nilfs_sufile_get_stat - get segment usage statistics
 * nilfs_sufile_get_stat - get segment usage statistics
 * @sufile: inode of segment usage file
 * @sufile: inode of segment usage file
+1 −0
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ int nilfs_sufile_get_segment_usage(struct inode *, __u64,
				   struct buffer_head **);
				   struct buffer_head **);
void nilfs_sufile_put_segment_usage(struct inode *, __u64,
void nilfs_sufile_put_segment_usage(struct inode *, __u64,
				    struct buffer_head *);
				    struct buffer_head *);
int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum);
int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned,
ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned,
				size_t);
				size_t);