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;
|
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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче