[Devel] [PATCH RH7 v2 1/2] ploop: Add statistics of fastmap requests, which fails because of cache
Kirill Tkhai
ktkhai at virtuozzo.com
Mon Nov 9 13:25:34 MSK 2020
Normally, mapping_needs_writeback() should not be true. But in case
of some problem, or userspace touch root.hds without direct mode,
cache may populate. Count such the failed fastmaps.
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
drivers/block/ploop/io_kaio.c | 2 ++
fs/ext4/file.c | 5 ++++-
include/linux/ploop/ploop_stat.h | 1 +
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c
index 4c4a0c6a908c..be74b2ec344f 100644
--- a/drivers/block/ploop/io_kaio.c
+++ b/drivers/block/ploop/io_kaio.c
@@ -1236,6 +1236,8 @@ kaio_fastmap(struct ploop_io *io, struct bio *orig_bio,
orig_bio->bi_rw & REQ_WRITE);
if (ret < 0) {
io->plo->st.fast_neg_noem++;
+ if (ret == -EBUSY)
+ io->plo->st.write_back_pending++;
return 1;
}
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 8f5fb6d99d5e..67a385e9f716 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -132,6 +132,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec,
bool unaligned_aio, found, locked = false;
struct ext4_map_blocks map;
loff_t pos = lblk_sec << 9;
+ int err;
if (!S_ISREG(inode->i_mode))
return -ENOENT;
@@ -152,6 +153,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec,
locked = true;
}
+ err = -EBUSY;
if (unlikely(mapping_needs_writeback(mapping)))
goto err_maybe_unlock;
@@ -163,6 +165,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec,
locked = false;
}
+ err = -ENOENT;
if (unlikely(ext4_test_inode_state(inode,
EXT4_STATE_DIOREAD_LOCK))) {
goto err_dio_end;
@@ -181,7 +184,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec,
err_maybe_unlock:
if (locked)
mutex_unlock(&inode->i_mutex);
- return -ENOENT;
+ return err;
}
static ssize_t ext4_write_checks(struct kiocb *iocb, struct iov_iter *iter, loff_t *pos)
diff --git a/include/linux/ploop/ploop_stat.h b/include/linux/ploop/ploop_stat.h
index bed910acb39c..92543a9afe88 100644
--- a/include/linux/ploop/ploop_stat.h
+++ b/include/linux/ploop/ploop_stat.h
@@ -34,6 +34,7 @@ __DO(merge_neg_cluster)
__DO(merge_neg_disable)
__DO(fast_neg_nomap)
__DO(fast_neg_noem)
+__DO(write_back_pending)
__DO(fast_neg_shortem)
__DO(fast_neg_backing)
__DO(bio_lockouts)
More information about the Devel
mailing list