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:
Ryusuke Konishi 2009-11-18 17:25:12 +09:00
Родитель 70622a2091
Коммит 61a189e9c6
3 изменённых файлов: 22 добавлений и 17 удалений

Просмотреть файл

@ -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);