@@ -161,41 +161,32 @@ static void v9fs_invalidate_page(struct page *page, unsigned int offset,
161
161
162
162
static int v9fs_vfs_writepage_locked (struct page * page )
163
163
{
164
- char * buffer ;
165
- int retval , len ;
166
- loff_t offset , size ;
167
- mm_segment_t old_fs ;
168
- struct v9fs_inode * v9inode ;
169
164
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 ;
170
170
171
- v9inode = V9FS_I (inode );
172
- size = i_size_read (inode );
173
171
if (page -> index == size >> PAGE_CACHE_SHIFT )
174
172
len = size & ~PAGE_CACHE_MASK ;
175
173
else
176
174
len = PAGE_CACHE_SIZE ;
177
175
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 );
182
180
183
- old_fs = get_fs ();
184
- set_fs (get_ds ());
185
181
/* We should have writeback_fid always set */
186
182
BUG_ON (!v9inode -> writeback_fid );
187
183
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 );
194
187
195
- set_fs (old_fs );
196
- kunmap (page );
197
188
end_page_writeback (page );
198
- return retval ;
189
+ return err ;
199
190
}
200
191
201
192
static int v9fs_vfs_writepage (struct page * page , struct writeback_control * wbc )
0 commit comments