Loading fs/f2fs/file.c +26 −35 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 { Loading Loading @@ -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) : Loading Loading
fs/f2fs/file.c +26 −35 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 { Loading Loading @@ -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) : Loading