mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
f2fs: factor the read/write tracing logic into a helper
[ Upstream commit a28bca0f47 ]
Factor the logic to log a path for reads and writs into a helper
shared between the read_iter and write_iter methods.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Stable-dep-of: 0cac51185e65 ("f2fs: fix to avoid racing in between read and OPU dio write")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
09a37294fb
commit
bbedc64de0
@@ -4457,6 +4457,27 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void f2fs_trace_rw_file_path(struct kiocb *iocb, size_t count, int rw)
|
||||||
|
{
|
||||||
|
struct inode *inode = file_inode(iocb->ki_filp);
|
||||||
|
char *buf, *path;
|
||||||
|
|
||||||
|
buf = f2fs_kmalloc(F2FS_I_SB(inode), PATH_MAX, GFP_KERNEL);
|
||||||
|
if (!buf)
|
||||||
|
return;
|
||||||
|
path = dentry_path_raw(file_dentry(iocb->ki_filp), buf, PATH_MAX);
|
||||||
|
if (IS_ERR(path))
|
||||||
|
goto free_buf;
|
||||||
|
if (rw == WRITE)
|
||||||
|
trace_f2fs_datawrite_start(inode, iocb->ki_pos, count,
|
||||||
|
current->pid, path, current->comm);
|
||||||
|
else
|
||||||
|
trace_f2fs_dataread_start(inode, iocb->ki_pos, count,
|
||||||
|
current->pid, path, current->comm);
|
||||||
|
free_buf:
|
||||||
|
kfree(buf);
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
||||||
{
|
{
|
||||||
struct inode *inode = file_inode(iocb->ki_filp);
|
struct inode *inode = file_inode(iocb->ki_filp);
|
||||||
@@ -4466,24 +4487,9 @@ static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
|||||||
if (!f2fs_is_compress_backend_ready(inode))
|
if (!f2fs_is_compress_backend_ready(inode))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (trace_f2fs_dataread_start_enabled()) {
|
if (trace_f2fs_dataread_start_enabled())
|
||||||
char *p = f2fs_kmalloc(F2FS_I_SB(inode), PATH_MAX, GFP_KERNEL);
|
f2fs_trace_rw_file_path(iocb, iov_iter_count(to), READ);
|
||||||
char *path;
|
|
||||||
|
|
||||||
if (!p)
|
|
||||||
goto skip_read_trace;
|
|
||||||
|
|
||||||
path = dentry_path_raw(file_dentry(iocb->ki_filp), p, PATH_MAX);
|
|
||||||
if (IS_ERR(path)) {
|
|
||||||
kfree(p);
|
|
||||||
goto skip_read_trace;
|
|
||||||
}
|
|
||||||
|
|
||||||
trace_f2fs_dataread_start(inode, pos, iov_iter_count(to),
|
|
||||||
current->pid, path, current->comm);
|
|
||||||
kfree(p);
|
|
||||||
}
|
|
||||||
skip_read_trace:
|
|
||||||
if (f2fs_should_use_dio(inode, iocb, to)) {
|
if (f2fs_should_use_dio(inode, iocb, to)) {
|
||||||
ret = f2fs_dio_read_iter(iocb, to);
|
ret = f2fs_dio_read_iter(iocb, to);
|
||||||
} else {
|
} else {
|
||||||
@@ -4789,24 +4795,9 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
|||||||
if (preallocated < 0) {
|
if (preallocated < 0) {
|
||||||
ret = preallocated;
|
ret = preallocated;
|
||||||
} else {
|
} else {
|
||||||
if (trace_f2fs_datawrite_start_enabled()) {
|
if (trace_f2fs_datawrite_start_enabled())
|
||||||
char *p = f2fs_kmalloc(F2FS_I_SB(inode),
|
f2fs_trace_rw_file_path(iocb, orig_count, WRITE);
|
||||||
PATH_MAX, GFP_KERNEL);
|
|
||||||
char *path;
|
|
||||||
|
|
||||||
if (!p)
|
|
||||||
goto skip_write_trace;
|
|
||||||
path = dentry_path_raw(file_dentry(iocb->ki_filp),
|
|
||||||
p, PATH_MAX);
|
|
||||||
if (IS_ERR(path)) {
|
|
||||||
kfree(p);
|
|
||||||
goto skip_write_trace;
|
|
||||||
}
|
|
||||||
trace_f2fs_datawrite_start(inode, orig_pos, orig_count,
|
|
||||||
current->pid, path, current->comm);
|
|
||||||
kfree(p);
|
|
||||||
}
|
|
||||||
skip_write_trace:
|
|
||||||
/* Do the actual write. */
|
/* Do the actual write. */
|
||||||
ret = dio ?
|
ret = dio ?
|
||||||
f2fs_dio_write_iter(iocb, from, &may_need_sync) :
|
f2fs_dio_write_iter(iocb, from, &may_need_sync) :
|
||||||
|
|||||||
Reference in New Issue
Block a user