@@ -80,7 +80,7 @@ struct backing_aio {
8080 refcount_t ref ;
8181 struct kiocb * orig_iocb ;
8282 /* used for aio completion */
83- void (* end_write )(struct file * , loff_t , ssize_t );
83+ void (* end_write )(struct kiocb * iocb , ssize_t );
8484 struct work_struct work ;
8585 long res ;
8686};
@@ -108,10 +108,10 @@ static void backing_aio_cleanup(struct backing_aio *aio, long res)
108108 struct kiocb * iocb = & aio -> iocb ;
109109 struct kiocb * orig_iocb = aio -> orig_iocb ;
110110
111+ orig_iocb -> ki_pos = iocb -> ki_pos ;
111112 if (aio -> end_write )
112- aio -> end_write (orig_iocb -> ki_filp , iocb -> ki_pos , res );
113+ aio -> end_write (orig_iocb , res );
113114
114- orig_iocb -> ki_pos = iocb -> ki_pos ;
115115 backing_aio_put (aio );
116116}
117117
@@ -200,7 +200,7 @@ ssize_t backing_file_read_iter(struct file *file, struct iov_iter *iter,
200200 revert_creds (old_cred );
201201
202202 if (ctx -> accessed )
203- ctx -> accessed (ctx -> user_file );
203+ ctx -> accessed (iocb -> ki_filp );
204204
205205 return ret ;
206206}
@@ -219,7 +219,7 @@ ssize_t backing_file_write_iter(struct file *file, struct iov_iter *iter,
219219 if (!iov_iter_count (iter ))
220220 return 0 ;
221221
222- ret = file_remove_privs (ctx -> user_file );
222+ ret = file_remove_privs (iocb -> ki_filp );
223223 if (ret )
224224 return ret ;
225225
@@ -239,7 +239,7 @@ ssize_t backing_file_write_iter(struct file *file, struct iov_iter *iter,
239239
240240 ret = vfs_iter_write (file , iter , & iocb -> ki_pos , rwf );
241241 if (ctx -> end_write )
242- ctx -> end_write (ctx -> user_file , iocb -> ki_pos , ret );
242+ ctx -> end_write (iocb , ret );
243243 } else {
244244 struct backing_aio * aio ;
245245
@@ -270,7 +270,7 @@ ssize_t backing_file_write_iter(struct file *file, struct iov_iter *iter,
270270}
271271EXPORT_SYMBOL_GPL (backing_file_write_iter );
272272
273- ssize_t backing_file_splice_read (struct file * in , loff_t * ppos ,
273+ ssize_t backing_file_splice_read (struct file * in , struct kiocb * iocb ,
274274 struct pipe_inode_info * pipe , size_t len ,
275275 unsigned int flags ,
276276 struct backing_file_ctx * ctx )
@@ -282,19 +282,19 @@ ssize_t backing_file_splice_read(struct file *in, loff_t *ppos,
282282 return - EIO ;
283283
284284 old_cred = override_creds (ctx -> cred );
285- ret = vfs_splice_read (in , ppos , pipe , len , flags );
285+ ret = vfs_splice_read (in , & iocb -> ki_pos , pipe , len , flags );
286286 revert_creds (old_cred );
287287
288288 if (ctx -> accessed )
289- ctx -> accessed (ctx -> user_file );
289+ ctx -> accessed (iocb -> ki_filp );
290290
291291 return ret ;
292292}
293293EXPORT_SYMBOL_GPL (backing_file_splice_read );
294294
295295ssize_t backing_file_splice_write (struct pipe_inode_info * pipe ,
296- struct file * out , loff_t * ppos , size_t len ,
297- unsigned int flags ,
296+ struct file * out , struct kiocb * iocb ,
297+ size_t len , unsigned int flags ,
298298 struct backing_file_ctx * ctx )
299299{
300300 const struct cred * old_cred ;
@@ -306,18 +306,18 @@ ssize_t backing_file_splice_write(struct pipe_inode_info *pipe,
306306 if (!out -> f_op -> splice_write )
307307 return - EINVAL ;
308308
309- ret = file_remove_privs (ctx -> user_file );
309+ ret = file_remove_privs (iocb -> ki_filp );
310310 if (ret )
311311 return ret ;
312312
313313 old_cred = override_creds (ctx -> cred );
314314 file_start_write (out );
315- ret = out -> f_op -> splice_write (pipe , out , ppos , len , flags );
315+ ret = out -> f_op -> splice_write (pipe , out , & iocb -> ki_pos , len , flags );
316316 file_end_write (out );
317317 revert_creds (old_cred );
318318
319319 if (ctx -> end_write )
320- ctx -> end_write (ctx -> user_file , ppos ? * ppos : 0 , ret );
320+ ctx -> end_write (iocb , ret );
321321
322322 return ret ;
323323}
@@ -329,8 +329,7 @@ int backing_file_mmap(struct file *file, struct vm_area_struct *vma,
329329 const struct cred * old_cred ;
330330 int ret ;
331331
332- if (WARN_ON_ONCE (!(file -> f_mode & FMODE_BACKING )) ||
333- WARN_ON_ONCE (ctx -> user_file != vma -> vm_file ))
332+ if (WARN_ON_ONCE (!(file -> f_mode & FMODE_BACKING )))
334333 return - EIO ;
335334
336335 if (!file -> f_op -> mmap )
@@ -343,7 +342,7 @@ int backing_file_mmap(struct file *file, struct vm_area_struct *vma,
343342 revert_creds (old_cred );
344343
345344 if (ctx -> accessed )
346- ctx -> accessed (ctx -> user_file );
345+ ctx -> accessed (vma -> vm_file );
347346
348347 return ret ;
349348}
0 commit comments