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

orangefs: pass slot index back to readpage.

When userspace deposits more than a page of data into the shared buffer,
we'll need to know which slot it is in when we get back to readpage
so that we can try to use the extra data to fill some extra pages.

Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Signed-off-by: Martin Brandenburg <martin@omnibond.com>

+6 -6
+1 -1
fs/orangefs/file.c
··· 47 47 */ 48 48 ssize_t wait_for_direct_io(enum ORANGEFS_io_type type, struct inode *inode, 49 49 loff_t *offset, struct iov_iter *iter, size_t total_size, 50 - loff_t readahead_size, struct orangefs_write_range *wr) 50 + loff_t readahead_size, struct orangefs_write_range *wr, int *index_return) 51 51 { 52 52 struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode); 53 53 struct orangefs_khandle *handle = &orangefs_inode->refn.khandle;
+4 -4
fs/orangefs/inode.c
··· 55 55 iov_iter_bvec(&iter, WRITE, &bv, 1, wlen); 56 56 57 57 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, wlen, 58 - len, wr); 58 + len, wr, NULL); 59 59 if (ret < 0) { 60 60 SetPageError(page); 61 61 mapping_set_error(page->mapping, ret); ··· 126 126 wr.uid = ow->uid; 127 127 wr.gid = ow->gid; 128 128 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, 129 - 0, &wr); 129 + 0, &wr, NULL); 130 130 if (ret < 0) { 131 131 for (i = 0; i < ow->npages; i++) { 132 132 SetPageError(ow->pages[i]); ··· 265 265 orangefs_launder_page(page); 266 266 267 267 ret = wait_for_direct_io(ORANGEFS_IO_READ, inode, &off, &iter, 268 - PAGE_SIZE, inode->i_size, NULL); 268 + PAGE_SIZE, inode->i_size, NULL, NULL); 269 269 /* this will only zero remaining unread portions of the page data */ 270 270 iov_iter_zero(~0U, &iter); 271 271 /* takes care of potential aliasing */ ··· 552 552 (int)*offset); 553 553 554 554 ret = wait_for_direct_io(type, inode, offset, iter, 555 - each_count, 0, NULL); 555 + each_count, 0, NULL, NULL); 556 556 gossip_debug(GOSSIP_FILE_DEBUG, 557 557 "%s(%pU): return from wait_for_io:%d\n", 558 558 __func__,
+1 -1
fs/orangefs/orangefs-kernel.h
··· 398 398 */ 399 399 int orangefs_revalidate_mapping(struct inode *); 400 400 ssize_t wait_for_direct_io(enum ORANGEFS_io_type, struct inode *, loff_t *, 401 - struct iov_iter *, size_t, loff_t, struct orangefs_write_range *); 401 + struct iov_iter *, size_t, loff_t, struct orangefs_write_range *, int *); 402 402 ssize_t do_readv_writev(enum ORANGEFS_io_type, struct file *, loff_t *, 403 403 struct iov_iter *); 404 404