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: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
This commit is contained in:
Родитель
70622a2091
Коммит
61a189e9c6
|
@ -1273,21 +1273,6 @@ static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mode)
|
|||
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,
|
||||
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;
|
||||
|
||||
err = nilfs_touch_segusage(nilfs->ns_sufile, segbuf->sb_segnum);
|
||||
err = nilfs_sufile_mark_dirty(nilfs->ns_sufile, segbuf->sb_segnum);
|
||||
if (unlikely(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
|
||||
* 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))
|
||||
return err;
|
||||
|
||||
|
|
|
@ -501,6 +501,25 @@ void nilfs_sufile_put_segment_usage(struct inode *sufile, __u64 segnum,
|
|||
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
|
||||
* @sufile: inode of segment usage file
|
||||
|
|
|
@ -42,6 +42,7 @@ int nilfs_sufile_get_segment_usage(struct inode *, __u64,
|
|||
struct buffer_head **);
|
||||
void nilfs_sufile_put_segment_usage(struct inode *, __u64,
|
||||
struct buffer_head *);
|
||||
int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum);
|
||||
int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
|
||||
ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned,
|
||||
size_t);
|
||||
|
|
Загрузка…
Ссылка в новой задаче