Skip to content

Commit 371098c

Browse files
author
Al Viro
committed
9p: switch ->writepage() to direct use of p9_client_write()
Don't mess with kmap() - just use ITER_BVEC. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 070b365 commit 371098c

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

fs/9p/vfs_addr.c

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -161,41 +161,32 @@ static void v9fs_invalidate_page(struct page *page, unsigned int offset,
161161

162162
static int v9fs_vfs_writepage_locked(struct page *page)
163163
{
164-
char *buffer;
165-
int retval, len;
166-
loff_t offset, size;
167-
mm_segment_t old_fs;
168-
struct v9fs_inode *v9inode;
169164
struct inode *inode = page->mapping->host;
165+
struct v9fs_inode *v9inode = V9FS_I(inode);
166+
loff_t size = i_size_read(inode);
167+
struct iov_iter from;
168+
struct bio_vec bvec;
169+
int err, len;
170170

171-
v9inode = V9FS_I(inode);
172-
size = i_size_read(inode);
173171
if (page->index == size >> PAGE_CACHE_SHIFT)
174172
len = size & ~PAGE_CACHE_MASK;
175173
else
176174
len = PAGE_CACHE_SIZE;
177175

178-
set_page_writeback(page);
179-
180-
buffer = kmap(page);
181-
offset = page_offset(page);
176+
bvec.bv_page = page;
177+
bvec.bv_offset = 0;
178+
bvec.bv_len = len;
179+
iov_iter_bvec(&from, ITER_BVEC | WRITE, &bvec, 1, len);
182180

183-
old_fs = get_fs();
184-
set_fs(get_ds());
185181
/* We should have writeback_fid always set */
186182
BUG_ON(!v9inode->writeback_fid);
187183

188-
retval = v9fs_file_write_internal(inode,
189-
v9inode->writeback_fid,
190-
(__force const char __user *)buffer,
191-
len, &offset, 0);
192-
if (retval > 0)
193-
retval = 0;
184+
set_page_writeback(page);
185+
186+
p9_client_write(v9inode->writeback_fid, page_offset(page), &from, &err);
194187

195-
set_fs(old_fs);
196-
kunmap(page);
197188
end_page_writeback(page);
198-
return retval;
189+
return err;
199190
}
200191

201192
static int v9fs_vfs_writepage(struct page *page, struct writeback_control *wbc)

0 commit comments

Comments
 (0)