diff options
author | OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> | 2013-12-03 20:15:52 +0900 |
---|---|---|
committer | Daniel Phillips <daniel@tux3.org> | 2013-12-03 20:15:52 +0900 |
commit | 69a2779c81a14bd2d5057afce91396a1c4bc7383 (patch) | |
tree | 0a88073ffc30f0da8cf1ba24403485632b888918 | |
parent | eac69fd9d6fceea60e2836b5aaccd97138f69553 (diff) | |
download | linux-tux3-69a2779c81a14bd2d5057afce91396a1c4bc7383.tar.gz |
tux3: Add REQ_META annotation for volmap
This allow to pass additional bio flags when flushing.
By using it, this also adds REQ_META annotation for sb, bitmap data,
volmap, logmap. With this, we can see REQ_META via blktrace data.
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
-rw-r--r-- | fs/tux3/buffer.h | 2 | ||||
-rw-r--r-- | fs/tux3/buffer_writeback.c | 4 | ||||
-rw-r--r-- | fs/tux3/commit.c | 12 | ||||
-rw-r--r-- | fs/tux3/tux3.h | 4 | ||||
-rw-r--r-- | fs/tux3/writeback.c | 14 |
5 files changed, 18 insertions, 18 deletions
diff --git a/fs/tux3/buffer.h b/fs/tux3/buffer.h index 1333b2d129605b..f547720f828c11 100644 --- a/fs/tux3/buffer.h +++ b/fs/tux3/buffer.h @@ -136,7 +136,7 @@ void tux3_iowait_wait(struct iowait *iowait); int bufvec_io(int rw, struct bufvec *bufvec, block_t physical, unsigned count); int bufvec_contig_add(struct bufvec *bufvec, struct buffer_head *buffer); int flush_list(struct address_space *mapping, struct tux3_iattr_data *idata, - struct list_head *head); + struct list_head *head, int req_flag); int __tux3_volmap_io(int rw, struct bufvec *bufvec, block_t physical, unsigned count); int tux3_volmap_io(int rw, struct bufvec *bufvec); diff --git a/fs/tux3/buffer_writeback.c b/fs/tux3/buffer_writeback.c index 9b7c68d35020e0..5c936330c761aa 100644 --- a/fs/tux3/buffer_writeback.c +++ b/fs/tux3/buffer_writeback.c @@ -778,7 +778,7 @@ static int buffer_index_cmp(void *priv, struct list_head *a, * Flush buffers in head */ int flush_list(struct address_space *mapping, struct tux3_iattr_data *idata, - struct list_head *head) + struct list_head *head, int req_flag) { struct inode *inode = mapping->host; struct bufvec bufvec; @@ -798,7 +798,7 @@ int flush_list(struct address_space *mapping, struct tux3_iattr_data *idata, /* Collect contiguous buffer range */ if (bufvec_contig_collect(&bufvec)) { /* Start I/O */ - err = tux_inode(inode)->io(WRITE, &bufvec); + err = tux_inode(inode)->io(WRITE | req_flag, &bufvec); if (err) break; } diff --git a/fs/tux3/commit.c b/fs/tux3/commit.c index cf70970b818904..b486c3e71caa9b 100644 --- a/fs/tux3/commit.c +++ b/fs/tux3/commit.c @@ -155,7 +155,7 @@ int save_sb(struct sb *sb) super->atomgen = cpu_to_be32(sb->atomgen); /* logchain and logcount are written to super directly */ - return devio(WRITE_SYNC, sb_dev(sb), SB_LOC, super, SB_LEN); + return devio(WRITE_SYNC | REQ_META, sb_dev(sb), SB_LOC, super, SB_LEN); } /* Delta transition */ @@ -253,7 +253,7 @@ static int unify_log(struct sb *sb) /* Flush bitmap */ trace("> flush bitmap %u", unify); - tux3_flush_inode_internal(sb->bitmap, unify); + tux3_flush_inode_internal(sb->bitmap, unify, REQ_META); trace("< done bitmap %u", unify); trace("> apply orphan inodes %u", unify); @@ -295,12 +295,12 @@ static int stage_delta(struct sb *sb, unsigned delta) return err; /* Flush atable after inodes. Because inode deletion may dirty atable */ - err = tux3_flush_inode_internal(sb->atable, delta); + err = tux3_flush_inode_internal(sb->atable, delta, 0); if (err) return err; #if 0 /* FIXME: we have to flush vtable somewhere */ - err = tux3_flush_inode_internal(sb->vtable, delta); + err = tux3_flush_inode_internal(sb->vtable, delta, 0); if (err) return err; #endif @@ -314,7 +314,7 @@ static int write_btree(struct sb *sb, unsigned delta) * FIXME: Now we are using TUX3_INIT_DELTA for leaves. Do * we need to per delta dirty buffers? */ - return tux3_flush_inode_internal(sb->volmap, TUX3_INIT_DELTA); + return tux3_flush_inode_internal(sb->volmap, TUX3_INIT_DELTA, REQ_META); } /* allocate and write log blocks */ @@ -324,7 +324,7 @@ static int write_log(struct sb *sb) log_finish(sb); log_finish_cycle(sb, 0); - return tux3_flush_inode_internal(sb->logmap, TUX3_INIT_DELTA); + return tux3_flush_inode_internal(sb->logmap, TUX3_INIT_DELTA, REQ_META); } static int apply_defered_bfree(struct sb *sb, u64 val) diff --git a/fs/tux3/tux3.h b/fs/tux3/tux3.h index 59b3b7bd09aa12..fbc3b899458025 100644 --- a/fs/tux3/tux3.h +++ b/fs/tux3/tux3.h @@ -936,8 +936,8 @@ void tux3_mark_buffer_dirty(struct buffer_head *buffer); void tux3_mark_buffer_unify(struct buffer_head *buffer); void tux3_mark_inode_orphan(struct tux3_inode *tuxnode); int tux3_inode_is_orphan(struct tux3_inode *tuxnode); -int tux3_flush_inode_internal(struct inode *inode, unsigned delta); -int tux3_flush_inode(struct inode *inode, unsigned delta); +int tux3_flush_inode_internal(struct inode *inode, unsigned delta, int req_flag); +int tux3_flush_inode(struct inode *inode, unsigned delta, int req_flag); int tux3_flush_inodes(struct sb *sb, unsigned delta); void tux3_clear_dirty_inodes(struct sb *sb, unsigned delta); void tux3_check_destroy_inode_flags(struct inode *inode); diff --git a/fs/tux3/writeback.c b/fs/tux3/writeback.c index f2ba557e030567..b7b2eb49c8a989 100644 --- a/fs/tux3/writeback.c +++ b/fs/tux3/writeback.c @@ -417,7 +417,7 @@ static void tux3_state_read_and_clear(struct inode *inode, static inline int tux3_flush_buffers(struct inode *inode, struct tux3_iattr_data *idata, - unsigned delta) + unsigned delta, int req_flag) { struct list_head *dirty_buffers = tux3_dirty_buffers(inode, delta); int err; @@ -430,7 +430,7 @@ static inline int tux3_flush_buffers(struct inode *inode, return err; /* Apply page caches */ - return flush_list(mapping(inode), idata, dirty_buffers); + return flush_list(mapping(inode), idata, dirty_buffers, req_flag); } /* @@ -440,7 +440,7 @@ static inline int tux3_flush_buffers(struct inode *inode, * reclaim. Because we don't wait writeback on evict_inode(), and * instead we keeps the inode while writeback is running. */ -int tux3_flush_inode(struct inode *inode, unsigned delta) +int tux3_flush_inode(struct inode *inode, unsigned delta, int req_flag) { /* FIXME: linux writeback doesn't allow to control writeback * timing. */ @@ -485,7 +485,7 @@ int tux3_flush_inode(struct inode *inode, unsigned delta) ret = err; } - err = tux3_flush_buffers(inode, &idata, delta); + err = tux3_flush_buffers(inode, &idata, delta, req_flag); if (err && !ret) ret = err; @@ -520,7 +520,7 @@ int tux3_flush_inode(struct inode *inode, unsigned delta) * If inode is TUX3_INODE_NO_FLUSH, those can clear inode dirty flags * immediately. Because those inodes is pinned until umount. */ -int tux3_flush_inode_internal(struct inode *inode, unsigned delta) +int tux3_flush_inode_internal(struct inode *inode, unsigned delta, int req_flag) { int err; @@ -535,7 +535,7 @@ int tux3_flush_inode_internal(struct inode *inode, unsigned delta) if (!(inode->i_state & I_DIRTY)) return 0; - err = tux3_flush_inode(inode, delta); + err = tux3_flush_inode(inode, delta, req_flag); /* FIXME: error handling */ __tux3_clear_dirty_inode(inode, delta); @@ -578,7 +578,7 @@ int tux3_flush_inodes(struct sb *sb, unsigned delta) assert(!tux3_is_inode_no_flush(inode)); - err = tux3_flush_inode(inode, delta); + err = tux3_flush_inode(inode, delta, 0); if (err) goto error; } |