pass iov_iter to ->direct_IO()
unmodified, for now Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Этот коммит содержится в:
@@ -1699,10 +1699,9 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
||||
size = i_size_read(inode);
|
||||
retval = filemap_write_and_wait_range(mapping, pos,
|
||||
pos + iov_length(iov, nr_segs) - 1);
|
||||
if (!retval) {
|
||||
retval = mapping->a_ops->direct_IO(READ, iocb,
|
||||
iov, pos, nr_segs);
|
||||
}
|
||||
if (!retval)
|
||||
retval = mapping->a_ops->direct_IO(READ, iocb, &i, pos);
|
||||
|
||||
if (retval > 0) {
|
||||
*ppos = pos + retval;
|
||||
count -= retval;
|
||||
@@ -2383,7 +2382,7 @@ generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from,
|
||||
}
|
||||
}
|
||||
|
||||
written = mapping->a_ops->direct_IO(WRITE, iocb, from->iov, pos, from->nr_segs);
|
||||
written = mapping->a_ops->direct_IO(WRITE, iocb, from, pos);
|
||||
|
||||
/*
|
||||
* Finally, try again to invalidate clean pages which might have been
|
||||
|
@@ -263,16 +263,18 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc,
|
||||
.iov_base = kmap(page),
|
||||
.iov_len = PAGE_SIZE,
|
||||
};
|
||||
struct iov_iter from;
|
||||
|
||||
init_sync_kiocb(&kiocb, swap_file);
|
||||
kiocb.ki_pos = page_file_offset(page);
|
||||
kiocb.ki_nbytes = PAGE_SIZE;
|
||||
iov_iter_init(&from, &iov, 1, PAGE_SIZE, 0);
|
||||
|
||||
set_page_writeback(page);
|
||||
unlock_page(page);
|
||||
ret = mapping->a_ops->direct_IO(KERNEL_WRITE,
|
||||
&kiocb, &iov,
|
||||
kiocb.ki_pos, 1);
|
||||
&kiocb, &from,
|
||||
kiocb.ki_pos);
|
||||
kunmap(page);
|
||||
if (ret == PAGE_SIZE) {
|
||||
count_vm_event(PSWPOUT);
|
||||
|
Ссылка в новой задаче
Block a user