nilfs2: move routine marking segment usage dirty into sufile
authorRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Wed, 18 Nov 2009 08:25:12 +0000 (17:25 +0900)
committerRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Fri, 20 Nov 2009 01:05:51 +0000 (10:05 +0900)
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>
fs/nilfs2/segment.c
fs/nilfs2/sufile.c
fs/nilfs2/sufile.h

index d21179bd5a412ec9fd2edd775996448cbdd7a6d3..3ae4a3849f818b4e7ca7ea132573ac971135bd8a 100644 (file)
@@ -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;
 
index 5f18acab9dd499aafab3a580b5d6844f0a0b7de1..d560f882a868fceadb072ef7c10b73dc6b21e283 100644 (file)
@@ -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
index c339ad5b5326be6d618adfc967e1338f179c3fd4..4146a652aed18e16d9bcf4da29fcf4b180958d94 100644 (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);