Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ocfs2: switch to iter_file_splice_write()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 6dc8bc0f 8d020765

+2 -80
+2 -80
fs/ocfs2/file.c
··· 2430 2430 return ret; 2431 2431 } 2432 2432 2433 - static int ocfs2_splice_to_file(struct pipe_inode_info *pipe, 2434 - struct file *out, 2435 - struct splice_desc *sd) 2436 - { 2437 - int ret; 2438 - 2439 - ret = ocfs2_prepare_inode_for_write(out, &sd->pos, 2440 - sd->total_len, 0, NULL, NULL); 2441 - if (ret < 0) { 2442 - mlog_errno(ret); 2443 - return ret; 2444 - } 2445 - 2446 - return splice_from_pipe_feed(pipe, sd, pipe_to_file); 2447 - } 2448 - 2449 - static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe, 2450 - struct file *out, 2451 - loff_t *ppos, 2452 - size_t len, 2453 - unsigned int flags) 2454 - { 2455 - int ret; 2456 - struct address_space *mapping = out->f_mapping; 2457 - struct inode *inode = mapping->host; 2458 - struct splice_desc sd = { 2459 - .total_len = len, 2460 - .flags = flags, 2461 - .pos = *ppos, 2462 - .u.file = out, 2463 - }; 2464 - 2465 - 2466 - trace_ocfs2_file_splice_write(inode, out, out->f_path.dentry, 2467 - (unsigned long long)OCFS2_I(inode)->ip_blkno, 2468 - out->f_path.dentry->d_name.len, 2469 - out->f_path.dentry->d_name.name, len); 2470 - 2471 - pipe_lock(pipe); 2472 - 2473 - splice_from_pipe_begin(&sd); 2474 - do { 2475 - ret = splice_from_pipe_next(pipe, &sd); 2476 - if (ret <= 0) 2477 - break; 2478 - 2479 - mutex_lock_nested(&inode->i_mutex, I_MUTEX_CHILD); 2480 - ret = ocfs2_rw_lock(inode, 1); 2481 - if (ret < 0) 2482 - mlog_errno(ret); 2483 - else { 2484 - ret = ocfs2_splice_to_file(pipe, out, &sd); 2485 - ocfs2_rw_unlock(inode, 1); 2486 - } 2487 - mutex_unlock(&inode->i_mutex); 2488 - } while (ret > 0); 2489 - splice_from_pipe_end(pipe, &sd); 2490 - 2491 - pipe_unlock(pipe); 2492 - 2493 - if (sd.num_spliced) 2494 - ret = sd.num_spliced; 2495 - 2496 - if (ret > 0) { 2497 - int err; 2498 - 2499 - err = generic_write_sync(out, *ppos, ret); 2500 - if (err) 2501 - ret = err; 2502 - else 2503 - *ppos += ret; 2504 - 2505 - balance_dirty_pages_ratelimited(mapping); 2506 - } 2507 - 2508 - return ret; 2509 - } 2510 - 2511 2433 static ssize_t ocfs2_file_splice_read(struct file *in, 2512 2434 loff_t *ppos, 2513 2435 struct pipe_inode_info *pipe, ··· 2630 2708 .lock = ocfs2_lock, 2631 2709 .flock = ocfs2_flock, 2632 2710 .splice_read = ocfs2_file_splice_read, 2633 - .splice_write = ocfs2_file_splice_write, 2711 + .splice_write = iter_file_splice_write, 2634 2712 .fallocate = ocfs2_fallocate, 2635 2713 }; 2636 2714 ··· 2677 2755 #endif 2678 2756 .flock = ocfs2_flock, 2679 2757 .splice_read = ocfs2_file_splice_read, 2680 - .splice_write = ocfs2_file_splice_write, 2758 + .splice_write = iter_file_splice_write, 2681 2759 .fallocate = ocfs2_fallocate, 2682 2760 }; 2683 2761