Lines Matching refs:rdata
3395 struct cifs_readdata *rdata; in cifs_readdata_direct_alloc() local
3397 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); in cifs_readdata_direct_alloc()
3398 if (rdata != NULL) { in cifs_readdata_direct_alloc()
3399 rdata->pages = pages; in cifs_readdata_direct_alloc()
3400 kref_init(&rdata->refcount); in cifs_readdata_direct_alloc()
3401 INIT_LIST_HEAD(&rdata->list); in cifs_readdata_direct_alloc()
3402 init_completion(&rdata->done); in cifs_readdata_direct_alloc()
3403 INIT_WORK(&rdata->work, complete); in cifs_readdata_direct_alloc()
3406 return rdata; in cifs_readdata_direct_alloc()
3428 struct cifs_readdata *rdata = container_of(refcount, in cifs_readdata_release() local
3431 if (rdata->mr) { in cifs_readdata_release()
3432 smbd_deregister_mr(rdata->mr); in cifs_readdata_release()
3433 rdata->mr = NULL; in cifs_readdata_release()
3436 if (rdata->cfile) in cifs_readdata_release()
3437 cifsFileInfo_put(rdata->cfile); in cifs_readdata_release()
3439 kvfree(rdata->pages); in cifs_readdata_release()
3440 kfree(rdata); in cifs_readdata_release()
3444 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages) in cifs_read_allocate_pages() argument
3456 rdata->pages[i] = page; in cifs_read_allocate_pages()
3463 put_page(rdata->pages[i]); in cifs_read_allocate_pages()
3464 rdata->pages[i] = NULL; in cifs_read_allocate_pages()
3473 struct cifs_readdata *rdata = container_of(refcount, in cifs_uncached_readdata_release() local
3477 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release); in cifs_uncached_readdata_release()
3478 for (i = 0; i < rdata->nr_pages; i++) { in cifs_uncached_readdata_release()
3479 put_page(rdata->pages[i]); in cifs_uncached_readdata_release()
3494 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter) in cifs_readdata_to_iov() argument
3496 size_t remaining = rdata->got_bytes; in cifs_readdata_to_iov()
3499 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readdata_to_iov()
3500 struct page *page = rdata->pages[i]; in cifs_readdata_to_iov()
3523 struct cifs_readdata *rdata = container_of(work, in cifs_uncached_readv_complete() local
3526 complete(&rdata->done); in cifs_uncached_readv_complete()
3527 collect_uncached_read_data(rdata->ctx); in cifs_uncached_readv_complete()
3529 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_uncached_readv_complete()
3534 struct cifs_readdata *rdata, struct iov_iter *iter, in uncached_fill_pages() argument
3539 unsigned int nr_pages = rdata->nr_pages; in uncached_fill_pages()
3540 unsigned int page_offset = rdata->page_offset; in uncached_fill_pages()
3542 rdata->got_bytes = 0; in uncached_fill_pages()
3543 rdata->tailsz = PAGE_SIZE; in uncached_fill_pages()
3545 struct page *page = rdata->pages[i]; in uncached_fill_pages()
3547 unsigned int segment_size = rdata->pagesz; in uncached_fill_pages()
3557 rdata->pages[i] = NULL; in uncached_fill_pages()
3558 rdata->nr_pages--; in uncached_fill_pages()
3568 rdata->tailsz = len; in uncached_fill_pages()
3575 else if (rdata->mr) in uncached_fill_pages()
3584 rdata->got_bytes += result; in uncached_fill_pages()
3587 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in uncached_fill_pages()
3588 rdata->got_bytes : result; in uncached_fill_pages()
3593 struct cifs_readdata *rdata, unsigned int len) in cifs_uncached_read_into_pages() argument
3595 return uncached_fill_pages(server, rdata, NULL, len); in cifs_uncached_read_into_pages()
3600 struct cifs_readdata *rdata, in cifs_uncached_copy_into_pages() argument
3603 return uncached_fill_pages(server, rdata, iter, iter->count); in cifs_uncached_copy_into_pages()
3606 static int cifs_resend_rdata(struct cifs_readdata *rdata, in cifs_resend_rdata() argument
3616 server = rdata->server; in cifs_resend_rdata()
3619 if (rdata->cfile->invalidHandle) { in cifs_resend_rdata()
3620 rc = cifs_reopen_file(rdata->cfile, true); in cifs_resend_rdata()
3633 rc = server->ops->wait_mtu_credits(server, rdata->bytes, in cifs_resend_rdata()
3639 if (rsize < rdata->bytes) { in cifs_resend_rdata()
3643 } while (rsize < rdata->bytes); in cifs_resend_rdata()
3644 rdata->credits = credits; in cifs_resend_rdata()
3646 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_resend_rdata()
3648 if (rdata->cfile->invalidHandle) in cifs_resend_rdata()
3652 if (rdata->mr) { in cifs_resend_rdata()
3653 rdata->mr->need_invalidate = true; in cifs_resend_rdata()
3654 smbd_deregister_mr(rdata->mr); in cifs_resend_rdata()
3655 rdata->mr = NULL; in cifs_resend_rdata()
3658 rc = server->ops->async_readv(rdata); in cifs_resend_rdata()
3665 list_add_tail(&rdata->list, rdata_list); in cifs_resend_rdata()
3670 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_resend_rdata()
3674 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_resend_rdata()
3683 struct cifs_readdata *rdata; in cifs_send_async_read() local
3742 rdata = cifs_readdata_direct_alloc( in cifs_send_async_read()
3744 if (!rdata) { in cifs_send_async_read()
3751 rdata->page_offset = start; in cifs_send_async_read()
3752 rdata->tailsz = npages > 1 ? in cifs_send_async_read()
3760 rdata = cifs_readdata_alloc(npages, in cifs_send_async_read()
3762 if (!rdata) { in cifs_send_async_read()
3768 rc = cifs_read_allocate_pages(rdata, npages); in cifs_send_async_read()
3770 kvfree(rdata->pages); in cifs_send_async_read()
3771 kfree(rdata); in cifs_send_async_read()
3776 rdata->tailsz = PAGE_SIZE; in cifs_send_async_read()
3779 rdata->server = server; in cifs_send_async_read()
3780 rdata->cfile = cifsFileInfo_get(open_file); in cifs_send_async_read()
3781 rdata->nr_pages = npages; in cifs_send_async_read()
3782 rdata->offset = offset; in cifs_send_async_read()
3783 rdata->bytes = cur_len; in cifs_send_async_read()
3784 rdata->pid = pid; in cifs_send_async_read()
3785 rdata->pagesz = PAGE_SIZE; in cifs_send_async_read()
3786 rdata->read_into_pages = cifs_uncached_read_into_pages; in cifs_send_async_read()
3787 rdata->copy_into_pages = cifs_uncached_copy_into_pages; in cifs_send_async_read()
3788 rdata->credits = credits_on_stack; in cifs_send_async_read()
3789 rdata->ctx = ctx; in cifs_send_async_read()
3792 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_send_async_read()
3795 if (rdata->cfile->invalidHandle) in cifs_send_async_read()
3798 rc = server->ops->async_readv(rdata); in cifs_send_async_read()
3802 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_send_async_read()
3803 kref_put(&rdata->refcount, in cifs_send_async_read()
3812 list_add_tail(&rdata->list, rdata_list); in cifs_send_async_read()
3823 struct cifs_readdata *rdata, *tmp; in collect_uncached_read_data() local
3840 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) { in collect_uncached_read_data()
3842 if (!try_wait_for_completion(&rdata->done)) { in collect_uncached_read_data()
3847 if (rdata->result == -EAGAIN) { in collect_uncached_read_data()
3850 unsigned int got_bytes = rdata->got_bytes; in collect_uncached_read_data()
3852 list_del_init(&rdata->list); in collect_uncached_read_data()
3860 if (got_bytes && got_bytes < rdata->bytes) { in collect_uncached_read_data()
3863 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3865 kref_put(&rdata->refcount, in collect_uncached_read_data()
3877 rdata, in collect_uncached_read_data()
3881 rdata->offset + got_bytes, in collect_uncached_read_data()
3882 rdata->bytes - got_bytes, in collect_uncached_read_data()
3883 rdata->cfile, cifs_sb, in collect_uncached_read_data()
3886 kref_put(&rdata->refcount, in collect_uncached_read_data()
3893 } else if (rdata->result) in collect_uncached_read_data()
3894 rc = rdata->result; in collect_uncached_read_data()
3896 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3899 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes) in collect_uncached_read_data()
3902 ctx->total_len += rdata->got_bytes; in collect_uncached_read_data()
3904 list_del_init(&rdata->list); in collect_uncached_read_data()
3905 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in collect_uncached_read_data()
4234 struct cifs_readdata *rdata = container_of(work, in cifs_readv_complete() local
4237 got_bytes = rdata->got_bytes; in cifs_readv_complete()
4238 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readv_complete()
4239 struct page *page = rdata->pages[i]; in cifs_readv_complete()
4243 if (rdata->result == 0 || in cifs_readv_complete()
4244 (rdata->result == -EAGAIN && got_bytes)) { in cifs_readv_complete()
4252 if (rdata->result == 0 || in cifs_readv_complete()
4253 (rdata->result == -EAGAIN && got_bytes)) in cifs_readv_complete()
4254 cifs_readpage_to_fscache(rdata->mapping->host, page); in cifs_readv_complete()
4256 cifs_fscache_uncache_page(rdata->mapping->host, page); in cifs_readv_complete()
4261 rdata->pages[i] = NULL; in cifs_readv_complete()
4263 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readv_complete()
4268 struct cifs_readdata *rdata, struct iov_iter *iter, in readpages_fill_pages() argument
4275 unsigned int nr_pages = rdata->nr_pages; in readpages_fill_pages()
4276 unsigned int page_offset = rdata->page_offset; in readpages_fill_pages()
4279 eof = CIFS_I(rdata->mapping->host)->server_eof; in readpages_fill_pages()
4283 rdata->got_bytes = 0; in readpages_fill_pages()
4284 rdata->tailsz = PAGE_SIZE; in readpages_fill_pages()
4286 struct page *page = rdata->pages[i]; in readpages_fill_pages()
4287 unsigned int to_read = rdata->pagesz; in readpages_fill_pages()
4302 n = rdata->tailsz = len; in readpages_fill_pages()
4319 rdata->pages[i] = NULL; in readpages_fill_pages()
4320 rdata->nr_pages--; in readpages_fill_pages()
4327 rdata->pages[i] = NULL; in readpages_fill_pages()
4328 rdata->nr_pages--; in readpages_fill_pages()
4336 else if (rdata->mr) in readpages_fill_pages()
4345 rdata->got_bytes += result; in readpages_fill_pages()
4348 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in readpages_fill_pages()
4349 rdata->got_bytes : result; in readpages_fill_pages()
4354 struct cifs_readdata *rdata, unsigned int len) in cifs_readpages_read_into_pages() argument
4356 return readpages_fill_pages(server, rdata, NULL, len); in cifs_readpages_read_into_pages()
4361 struct cifs_readdata *rdata, in cifs_readpages_copy_into_pages() argument
4364 return readpages_fill_pages(server, rdata, iter, iter->count); in cifs_readpages_copy_into_pages()
4480 struct cifs_readdata *rdata; in cifs_readpages() local
4517 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete); in cifs_readpages()
4518 if (!rdata) { in cifs_readpages()
4531 rdata->cfile = cifsFileInfo_get(open_file); in cifs_readpages()
4532 rdata->server = server; in cifs_readpages()
4533 rdata->mapping = mapping; in cifs_readpages()
4534 rdata->offset = offset; in cifs_readpages()
4535 rdata->bytes = bytes; in cifs_readpages()
4536 rdata->pid = pid; in cifs_readpages()
4537 rdata->pagesz = PAGE_SIZE; in cifs_readpages()
4538 rdata->tailsz = PAGE_SIZE; in cifs_readpages()
4539 rdata->read_into_pages = cifs_readpages_read_into_pages; in cifs_readpages()
4540 rdata->copy_into_pages = cifs_readpages_copy_into_pages; in cifs_readpages()
4541 rdata->credits = credits_on_stack; in cifs_readpages()
4545 rdata->pages[rdata->nr_pages++] = page; in cifs_readpages()
4548 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_readpages()
4551 if (rdata->cfile->invalidHandle) in cifs_readpages()
4554 rc = server->ops->async_readv(rdata); in cifs_readpages()
4558 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_readpages()
4559 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readpages()
4560 page = rdata->pages[i]; in cifs_readpages()
4566 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()
4570 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()