read_write.c (eb5bc2a213f96bd43b5f00a625acb0c669613645) read_write.c (66ee59af630fd8d5f4f56fb28162857e629aa0ab)
1/*
2 * linux/fs/read_write.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7#include <linux/slab.h>
8#include <linux/stat.h>

--- 329 unchanged lines hidden (view full) ---

338 struct kiocb kiocb;
339 ssize_t ret;
340
341 if (!file->f_op->read_iter)
342 return -EINVAL;
343
344 init_sync_kiocb(&kiocb, file);
345 kiocb.ki_pos = *ppos;
1/*
2 * linux/fs/read_write.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7#include <linux/slab.h>
8#include <linux/stat.h>

--- 329 unchanged lines hidden (view full) ---

338 struct kiocb kiocb;
339 ssize_t ret;
340
341 if (!file->f_op->read_iter)
342 return -EINVAL;
343
344 init_sync_kiocb(&kiocb, file);
345 kiocb.ki_pos = *ppos;
346 kiocb.ki_nbytes = iov_iter_count(iter);
347
348 iter->type |= READ;
349 ret = file->f_op->read_iter(&kiocb, iter);
350 if (ret == -EIOCBQUEUED)
351 ret = wait_on_sync_kiocb(&kiocb);
352
353 if (ret > 0)
354 *ppos = kiocb.ki_pos;

--- 6 unchanged lines hidden (view full) ---

361 struct kiocb kiocb;
362 ssize_t ret;
363
364 if (!file->f_op->write_iter)
365 return -EINVAL;
366
367 init_sync_kiocb(&kiocb, file);
368 kiocb.ki_pos = *ppos;
346
347 iter->type |= READ;
348 ret = file->f_op->read_iter(&kiocb, iter);
349 if (ret == -EIOCBQUEUED)
350 ret = wait_on_sync_kiocb(&kiocb);
351
352 if (ret > 0)
353 *ppos = kiocb.ki_pos;

--- 6 unchanged lines hidden (view full) ---

360 struct kiocb kiocb;
361 ssize_t ret;
362
363 if (!file->f_op->write_iter)
364 return -EINVAL;
365
366 init_sync_kiocb(&kiocb, file);
367 kiocb.ki_pos = *ppos;
369 kiocb.ki_nbytes = iov_iter_count(iter);
370
371 iter->type |= WRITE;
372 ret = file->f_op->write_iter(&kiocb, iter);
373 if (ret == -EIOCBQUEUED)
374 ret = wait_on_sync_kiocb(&kiocb);
375
376 if (ret > 0)
377 *ppos = kiocb.ki_pos;

--- 43 unchanged lines hidden (view full) ---

421ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
422{
423 struct iovec iov = { .iov_base = buf, .iov_len = len };
424 struct kiocb kiocb;
425 ssize_t ret;
426
427 init_sync_kiocb(&kiocb, filp);
428 kiocb.ki_pos = *ppos;
368
369 iter->type |= WRITE;
370 ret = file->f_op->write_iter(&kiocb, iter);
371 if (ret == -EIOCBQUEUED)
372 ret = wait_on_sync_kiocb(&kiocb);
373
374 if (ret > 0)
375 *ppos = kiocb.ki_pos;

--- 43 unchanged lines hidden (view full) ---

419ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
420{
421 struct iovec iov = { .iov_base = buf, .iov_len = len };
422 struct kiocb kiocb;
423 ssize_t ret;
424
425 init_sync_kiocb(&kiocb, filp);
426 kiocb.ki_pos = *ppos;
429 kiocb.ki_nbytes = len;
430
431 ret = filp->f_op->aio_read(&kiocb, &iov, 1, kiocb.ki_pos);
432 if (-EIOCBQUEUED == ret)
433 ret = wait_on_sync_kiocb(&kiocb);
434 *ppos = kiocb.ki_pos;
435 return ret;
436}
437
438EXPORT_SYMBOL(do_sync_read);
439
440ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
441{
442 struct iovec iov = { .iov_base = buf, .iov_len = len };
443 struct kiocb kiocb;
444 struct iov_iter iter;
445 ssize_t ret;
446
447 init_sync_kiocb(&kiocb, filp);
448 kiocb.ki_pos = *ppos;
427
428 ret = filp->f_op->aio_read(&kiocb, &iov, 1, kiocb.ki_pos);
429 if (-EIOCBQUEUED == ret)
430 ret = wait_on_sync_kiocb(&kiocb);
431 *ppos = kiocb.ki_pos;
432 return ret;
433}
434
435EXPORT_SYMBOL(do_sync_read);
436
437ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
438{
439 struct iovec iov = { .iov_base = buf, .iov_len = len };
440 struct kiocb kiocb;
441 struct iov_iter iter;
442 ssize_t ret;
443
444 init_sync_kiocb(&kiocb, filp);
445 kiocb.ki_pos = *ppos;
449 kiocb.ki_nbytes = len;
450 iov_iter_init(&iter, READ, &iov, 1, len);
451
452 ret = filp->f_op->read_iter(&kiocb, &iter);
453 if (-EIOCBQUEUED == ret)
454 ret = wait_on_sync_kiocb(&kiocb);
455 *ppos = kiocb.ki_pos;
456 return ret;
457}

--- 47 unchanged lines hidden (view full) ---

505ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
506{
507 struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
508 struct kiocb kiocb;
509 ssize_t ret;
510
511 init_sync_kiocb(&kiocb, filp);
512 kiocb.ki_pos = *ppos;
446 iov_iter_init(&iter, READ, &iov, 1, len);
447
448 ret = filp->f_op->read_iter(&kiocb, &iter);
449 if (-EIOCBQUEUED == ret)
450 ret = wait_on_sync_kiocb(&kiocb);
451 *ppos = kiocb.ki_pos;
452 return ret;
453}

--- 47 unchanged lines hidden (view full) ---

501ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
502{
503 struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
504 struct kiocb kiocb;
505 ssize_t ret;
506
507 init_sync_kiocb(&kiocb, filp);
508 kiocb.ki_pos = *ppos;
513 kiocb.ki_nbytes = len;
514
515 ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos);
516 if (-EIOCBQUEUED == ret)
517 ret = wait_on_sync_kiocb(&kiocb);
518 *ppos = kiocb.ki_pos;
519 return ret;
520}
521
522EXPORT_SYMBOL(do_sync_write);
523
524ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
525{
526 struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
527 struct kiocb kiocb;
528 struct iov_iter iter;
529 ssize_t ret;
530
531 init_sync_kiocb(&kiocb, filp);
532 kiocb.ki_pos = *ppos;
509
510 ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos);
511 if (-EIOCBQUEUED == ret)
512 ret = wait_on_sync_kiocb(&kiocb);
513 *ppos = kiocb.ki_pos;
514 return ret;
515}
516
517EXPORT_SYMBOL(do_sync_write);
518
519ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
520{
521 struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
522 struct kiocb kiocb;
523 struct iov_iter iter;
524 ssize_t ret;
525
526 init_sync_kiocb(&kiocb, filp);
527 kiocb.ki_pos = *ppos;
533 kiocb.ki_nbytes = len;
534 iov_iter_init(&iter, WRITE, &iov, 1, len);
535
536 ret = filp->f_op->write_iter(&kiocb, &iter);
537 if (-EIOCBQUEUED == ret)
538 ret = wait_on_sync_kiocb(&kiocb);
539 *ppos = kiocb.ki_pos;
540 return ret;
541}

--- 172 unchanged lines hidden (view full) ---

714 unsigned long nr_segs, size_t len, loff_t *ppos, iter_fn_t fn)
715{
716 struct kiocb kiocb;
717 struct iov_iter iter;
718 ssize_t ret;
719
720 init_sync_kiocb(&kiocb, filp);
721 kiocb.ki_pos = *ppos;
528 iov_iter_init(&iter, WRITE, &iov, 1, len);
529
530 ret = filp->f_op->write_iter(&kiocb, &iter);
531 if (-EIOCBQUEUED == ret)
532 ret = wait_on_sync_kiocb(&kiocb);
533 *ppos = kiocb.ki_pos;
534 return ret;
535}

--- 172 unchanged lines hidden (view full) ---

708 unsigned long nr_segs, size_t len, loff_t *ppos, iter_fn_t fn)
709{
710 struct kiocb kiocb;
711 struct iov_iter iter;
712 ssize_t ret;
713
714 init_sync_kiocb(&kiocb, filp);
715 kiocb.ki_pos = *ppos;
722 kiocb.ki_nbytes = len;
723
724 iov_iter_init(&iter, rw, iov, nr_segs, len);
725 ret = fn(&kiocb, &iter);
726 if (ret == -EIOCBQUEUED)
727 ret = wait_on_sync_kiocb(&kiocb);
728 *ppos = kiocb.ki_pos;
729 return ret;
730}
731
732static ssize_t do_sync_readv_writev(struct file *filp, const struct iovec *iov,
733 unsigned long nr_segs, size_t len, loff_t *ppos, iov_fn_t fn)
734{
735 struct kiocb kiocb;
736 ssize_t ret;
737
738 init_sync_kiocb(&kiocb, filp);
739 kiocb.ki_pos = *ppos;
716
717 iov_iter_init(&iter, rw, iov, nr_segs, len);
718 ret = fn(&kiocb, &iter);
719 if (ret == -EIOCBQUEUED)
720 ret = wait_on_sync_kiocb(&kiocb);
721 *ppos = kiocb.ki_pos;
722 return ret;
723}
724
725static ssize_t do_sync_readv_writev(struct file *filp, const struct iovec *iov,
726 unsigned long nr_segs, size_t len, loff_t *ppos, iov_fn_t fn)
727{
728 struct kiocb kiocb;
729 ssize_t ret;
730
731 init_sync_kiocb(&kiocb, filp);
732 kiocb.ki_pos = *ppos;
740 kiocb.ki_nbytes = len;
741
742 ret = fn(&kiocb, iov, nr_segs, kiocb.ki_pos);
743 if (ret == -EIOCBQUEUED)
744 ret = wait_on_sync_kiocb(&kiocb);
745 *ppos = kiocb.ki_pos;
746 return ret;
747}
748

--- 678 unchanged lines hidden ---
733
734 ret = fn(&kiocb, iov, nr_segs, kiocb.ki_pos);
735 if (ret == -EIOCBQUEUED)
736 ret = wait_on_sync_kiocb(&kiocb);
737 *ppos = kiocb.ki_pos;
738 return ret;
739}
740

--- 678 unchanged lines hidden ---