aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>2013-12-03 20:15:52 +0900
committerDaniel Phillips <daniel@tux3.org>2013-12-03 20:15:52 +0900
commit69a2779c81a14bd2d5057afce91396a1c4bc7383 (patch)
tree0a88073ffc30f0da8cf1ba24403485632b888918
parenteac69fd9d6fceea60e2836b5aaccd97138f69553 (diff)
downloadlinux-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.h2
-rw-r--r--fs/tux3/buffer_writeback.c4
-rw-r--r--fs/tux3/commit.c12
-rw-r--r--fs/tux3/tux3.h4
-rw-r--r--fs/tux3/writeback.c14
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;
}