Commit a28bca0f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jaegeuk Kim
Browse files

f2fs: factor the read/write tracing logic into a helper



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: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 88c9edfd
Loading
Loading
Loading
Loading
+26 −35
Original line number Diff line number Diff line
@@ -4341,6 +4341,27 @@ static ssize_t f2fs_dio_read_iter(struct kiocb *iocb, struct iov_iter *to)
	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)
{
	struct inode *inode = file_inode(iocb->ki_filp);
@@ -4350,24 +4371,9 @@ static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
	if (!f2fs_is_compress_backend_ready(inode))
		return -EOPNOTSUPP;

	if (trace_f2fs_dataread_start_enabled()) {
		char *p = f2fs_kmalloc(F2FS_I_SB(inode), PATH_MAX, GFP_KERNEL);
		char *path;

		if (!p)
			goto skip_read_trace;
	if (trace_f2fs_dataread_start_enabled())
		f2fs_trace_rw_file_path(iocb, iov_iter_count(to), READ);

		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)) {
		ret = f2fs_dio_read_iter(iocb, to);
	} else {
@@ -4673,24 +4679,9 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
	if (preallocated < 0) {
		ret = preallocated;
	} else {
		if (trace_f2fs_datawrite_start_enabled()) {
			char *p = f2fs_kmalloc(F2FS_I_SB(inode),
						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:
		if (trace_f2fs_datawrite_start_enabled())
			f2fs_trace_rw_file_path(iocb, orig_count, WRITE);

		/* Do the actual write. */
		ret = dio ?
			f2fs_dio_write_iter(iocb, from, &may_need_sync) :