Lines Matching refs:iocb

318 nfs_local_iocb_free(struct nfs_local_kiocb *iocb)
320 kfree(iocb->bvec);
321 kfree(iocb);
328 struct nfs_local_kiocb *iocb;
330 iocb = kmalloc(sizeof(*iocb), flags);
331 if (iocb == NULL)
333 iocb->bvec = nfs_bvec_alloc_and_import_pagevec(hdr->page_array.pagevec,
335 if (iocb->bvec == NULL) {
336 kfree(iocb);
342 iocb->kiocb.ki_filp = file;
343 iocb->kiocb.ki_flags = IOCB_DIRECT;
345 init_sync_kiocb(&iocb->kiocb, file);
347 iocb->kiocb.ki_pos = hdr->args.offset;
348 iocb->hdr = hdr;
349 iocb->kiocb.ki_flags &= ~IOCB_APPEND;
350 iocb->aio_complete_work = NULL;
352 return iocb;
356 nfs_local_iter_init(struct iov_iter *i, struct nfs_local_kiocb *iocb, int dir)
358 struct nfs_pgio_header *hdr = iocb->hdr;
360 iov_iter_bvec(i, dir, iocb->bvec, hdr->page_array.npages,
397 nfs_local_pgio_release(struct nfs_local_kiocb *iocb)
399 struct nfs_pgio_header *hdr = iocb->hdr;
401 nfs_local_file_put(iocb->localio);
402 nfs_local_iocb_free(iocb);
407 * Complete the I/O from iocb->kiocb.ki_complete()
412 static inline void nfs_local_pgio_aio_complete(struct nfs_local_kiocb *iocb)
414 INIT_WORK(&iocb->work, iocb->aio_complete_work);
415 queue_work(nfsiod_workqueue, &iocb->work);
419 nfs_local_read_done(struct nfs_local_kiocb *iocb, long status)
421 struct nfs_pgio_header *hdr = iocb->hdr;
422 struct file *filp = iocb->kiocb.ki_filp;
442 struct nfs_local_kiocb *iocb =
445 nfs_local_pgio_release(iocb);
450 struct nfs_local_kiocb *iocb =
453 nfs_local_read_done(iocb, ret);
454 nfs_local_pgio_aio_complete(iocb); /* Calls nfs_local_read_aio_complete_work */
459 struct nfs_local_kiocb *iocb =
461 struct file *filp = iocb->kiocb.ki_filp;
468 nfs_local_iter_init(&iter, iocb, READ);
470 status = filp->f_op->read_iter(&iocb->kiocb, &iter);
472 nfs_local_read_done(iocb, status);
473 nfs_local_pgio_release(iocb);
484 struct nfs_local_kiocb *iocb;
494 iocb = nfs_local_iocb_alloc(hdr, file, GFP_KERNEL);
495 if (iocb == NULL)
497 iocb->localio = localio;
502 if (iocb->kiocb.ki_flags & IOCB_DIRECT) {
503 iocb->kiocb.ki_complete = nfs_local_read_aio_complete;
504 iocb->aio_complete_work = nfs_local_read_aio_complete_work;
507 INIT_WORK(&iocb->work, nfs_local_call_read);
508 queue_work(nfslocaliod_workqueue, &iocb->work);
576 static void nfs_local_vfs_getattr(struct nfs_local_kiocb *iocb)
579 struct file *filp = iocb->kiocb.ki_filp;
580 struct nfs_pgio_header *hdr = iocb->hdr;
609 nfs_local_write_done(struct nfs_local_kiocb *iocb, long status)
611 struct nfs_pgio_header *hdr = iocb->hdr;
633 struct nfs_local_kiocb *iocb =
636 nfs_local_vfs_getattr(iocb);
637 nfs_local_pgio_release(iocb);
642 struct nfs_local_kiocb *iocb =
645 nfs_local_write_done(iocb, ret);
646 nfs_local_pgio_aio_complete(iocb); /* Calls nfs_local_write_aio_complete_work */
651 struct nfs_local_kiocb *iocb =
653 struct file *filp = iocb->kiocb.ki_filp;
662 nfs_local_iter_init(&iter, iocb, WRITE);
665 status = filp->f_op->write_iter(&iocb->kiocb, &iter);
668 nfs_local_write_done(iocb, status);
669 nfs_local_vfs_getattr(iocb);
670 nfs_local_pgio_release(iocb);
682 struct nfs_local_kiocb *iocb;
693 iocb = nfs_local_iocb_alloc(hdr, file, GFP_NOIO);
694 if (iocb == NULL)
696 iocb->localio = localio;
702 iocb->kiocb.ki_flags |= IOCB_DSYNC;
705 iocb->kiocb.ki_flags |= IOCB_DSYNC|IOCB_SYNC;
712 if (iocb->kiocb.ki_flags & IOCB_DIRECT) {
713 iocb->kiocb.ki_complete = nfs_local_write_aio_complete;
714 iocb->aio_complete_work = nfs_local_write_aio_complete_work;
717 INIT_WORK(&iocb->work, nfs_local_call_write);
718 queue_work(nfslocaliod_workqueue, &iocb->work);