Lines Matching refs:rdata

3418 	struct cifs_readdata *rdata;  in cifs_readdata_direct_alloc()  local
3420 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); in cifs_readdata_direct_alloc()
3421 if (rdata != NULL) { in cifs_readdata_direct_alloc()
3422 rdata->pages = pages; in cifs_readdata_direct_alloc()
3423 kref_init(&rdata->refcount); in cifs_readdata_direct_alloc()
3424 INIT_LIST_HEAD(&rdata->list); in cifs_readdata_direct_alloc()
3425 init_completion(&rdata->done); in cifs_readdata_direct_alloc()
3426 INIT_WORK(&rdata->work, complete); in cifs_readdata_direct_alloc()
3429 return rdata; in cifs_readdata_direct_alloc()
3451 struct cifs_readdata *rdata = container_of(refcount, in cifs_readdata_release() local
3454 if (rdata->mr) { in cifs_readdata_release()
3455 smbd_deregister_mr(rdata->mr); in cifs_readdata_release()
3456 rdata->mr = NULL; in cifs_readdata_release()
3459 if (rdata->cfile) in cifs_readdata_release()
3460 cifsFileInfo_put(rdata->cfile); in cifs_readdata_release()
3462 kvfree(rdata->pages); in cifs_readdata_release()
3463 kfree(rdata); in cifs_readdata_release()
3467 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages) in cifs_read_allocate_pages() argument
3479 rdata->pages[i] = page; in cifs_read_allocate_pages()
3486 put_page(rdata->pages[i]); in cifs_read_allocate_pages()
3487 rdata->pages[i] = NULL; in cifs_read_allocate_pages()
3496 struct cifs_readdata *rdata = container_of(refcount, in cifs_uncached_readdata_release() local
3500 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release); in cifs_uncached_readdata_release()
3501 for (i = 0; i < rdata->nr_pages; i++) { in cifs_uncached_readdata_release()
3502 put_page(rdata->pages[i]); in cifs_uncached_readdata_release()
3517 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter) in cifs_readdata_to_iov() argument
3519 size_t remaining = rdata->got_bytes; in cifs_readdata_to_iov()
3522 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readdata_to_iov()
3523 struct page *page = rdata->pages[i]; in cifs_readdata_to_iov()
3546 struct cifs_readdata *rdata = container_of(work, in cifs_uncached_readv_complete() local
3549 complete(&rdata->done); in cifs_uncached_readv_complete()
3550 collect_uncached_read_data(rdata->ctx); in cifs_uncached_readv_complete()
3552 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_uncached_readv_complete()
3557 struct cifs_readdata *rdata, struct iov_iter *iter, in uncached_fill_pages() argument
3562 unsigned int nr_pages = rdata->nr_pages; in uncached_fill_pages()
3563 unsigned int page_offset = rdata->page_offset; in uncached_fill_pages()
3565 rdata->got_bytes = 0; in uncached_fill_pages()
3566 rdata->tailsz = PAGE_SIZE; in uncached_fill_pages()
3568 struct page *page = rdata->pages[i]; in uncached_fill_pages()
3570 unsigned int segment_size = rdata->pagesz; in uncached_fill_pages()
3580 rdata->pages[i] = NULL; in uncached_fill_pages()
3581 rdata->nr_pages--; in uncached_fill_pages()
3591 rdata->tailsz = len; in uncached_fill_pages()
3598 else if (rdata->mr) in uncached_fill_pages()
3607 rdata->got_bytes += result; in uncached_fill_pages()
3610 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in uncached_fill_pages()
3611 rdata->got_bytes : result; in uncached_fill_pages()
3616 struct cifs_readdata *rdata, unsigned int len) in cifs_uncached_read_into_pages() argument
3618 return uncached_fill_pages(server, rdata, NULL, len); in cifs_uncached_read_into_pages()
3623 struct cifs_readdata *rdata, in cifs_uncached_copy_into_pages() argument
3626 return uncached_fill_pages(server, rdata, iter, iter->count); in cifs_uncached_copy_into_pages()
3629 static int cifs_resend_rdata(struct cifs_readdata *rdata, in cifs_resend_rdata() argument
3639 server = rdata->server; in cifs_resend_rdata()
3642 if (rdata->cfile->invalidHandle) { in cifs_resend_rdata()
3643 rc = cifs_reopen_file(rdata->cfile, true); in cifs_resend_rdata()
3656 rc = server->ops->wait_mtu_credits(server, rdata->bytes, in cifs_resend_rdata()
3662 if (rsize < rdata->bytes) { in cifs_resend_rdata()
3666 } while (rsize < rdata->bytes); in cifs_resend_rdata()
3667 rdata->credits = credits; in cifs_resend_rdata()
3669 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_resend_rdata()
3671 if (rdata->cfile->invalidHandle) in cifs_resend_rdata()
3675 if (rdata->mr) { in cifs_resend_rdata()
3676 rdata->mr->need_invalidate = true; in cifs_resend_rdata()
3677 smbd_deregister_mr(rdata->mr); in cifs_resend_rdata()
3678 rdata->mr = NULL; in cifs_resend_rdata()
3681 rc = server->ops->async_readv(rdata); in cifs_resend_rdata()
3688 list_add_tail(&rdata->list, rdata_list); in cifs_resend_rdata()
3693 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_resend_rdata()
3697 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_resend_rdata()
3706 struct cifs_readdata *rdata; in cifs_send_async_read() local
3765 rdata = cifs_readdata_direct_alloc( in cifs_send_async_read()
3767 if (!rdata) { in cifs_send_async_read()
3774 rdata->page_offset = start; in cifs_send_async_read()
3775 rdata->tailsz = npages > 1 ? in cifs_send_async_read()
3783 rdata = cifs_readdata_alloc(npages, in cifs_send_async_read()
3785 if (!rdata) { in cifs_send_async_read()
3791 rc = cifs_read_allocate_pages(rdata, npages); in cifs_send_async_read()
3793 kvfree(rdata->pages); in cifs_send_async_read()
3794 kfree(rdata); in cifs_send_async_read()
3799 rdata->tailsz = PAGE_SIZE; in cifs_send_async_read()
3802 rdata->server = server; in cifs_send_async_read()
3803 rdata->cfile = cifsFileInfo_get(open_file); in cifs_send_async_read()
3804 rdata->nr_pages = npages; in cifs_send_async_read()
3805 rdata->offset = offset; in cifs_send_async_read()
3806 rdata->bytes = cur_len; in cifs_send_async_read()
3807 rdata->pid = pid; in cifs_send_async_read()
3808 rdata->pagesz = PAGE_SIZE; in cifs_send_async_read()
3809 rdata->read_into_pages = cifs_uncached_read_into_pages; in cifs_send_async_read()
3810 rdata->copy_into_pages = cifs_uncached_copy_into_pages; in cifs_send_async_read()
3811 rdata->credits = credits_on_stack; in cifs_send_async_read()
3812 rdata->ctx = ctx; in cifs_send_async_read()
3815 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_send_async_read()
3818 if (rdata->cfile->invalidHandle) in cifs_send_async_read()
3821 rc = server->ops->async_readv(rdata); in cifs_send_async_read()
3825 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_send_async_read()
3826 kref_put(&rdata->refcount, in cifs_send_async_read()
3835 list_add_tail(&rdata->list, rdata_list); in cifs_send_async_read()
3846 struct cifs_readdata *rdata, *tmp; in collect_uncached_read_data() local
3863 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) { in collect_uncached_read_data()
3865 if (!try_wait_for_completion(&rdata->done)) { in collect_uncached_read_data()
3870 if (rdata->result == -EAGAIN) { in collect_uncached_read_data()
3873 unsigned int got_bytes = rdata->got_bytes; in collect_uncached_read_data()
3875 list_del_init(&rdata->list); in collect_uncached_read_data()
3883 if (got_bytes && got_bytes < rdata->bytes) { in collect_uncached_read_data()
3886 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3888 kref_put(&rdata->refcount, in collect_uncached_read_data()
3900 rdata, in collect_uncached_read_data()
3904 rdata->offset + got_bytes, in collect_uncached_read_data()
3905 rdata->bytes - got_bytes, in collect_uncached_read_data()
3906 rdata->cfile, cifs_sb, in collect_uncached_read_data()
3909 kref_put(&rdata->refcount, in collect_uncached_read_data()
3916 } else if (rdata->result) in collect_uncached_read_data()
3917 rc = rdata->result; in collect_uncached_read_data()
3919 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3922 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes) in collect_uncached_read_data()
3925 ctx->total_len += rdata->got_bytes; in collect_uncached_read_data()
3927 list_del_init(&rdata->list); in collect_uncached_read_data()
3928 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in collect_uncached_read_data()
4257 struct cifs_readdata *rdata = container_of(work, in cifs_readv_complete() local
4260 got_bytes = rdata->got_bytes; in cifs_readv_complete()
4261 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readv_complete()
4262 struct page *page = rdata->pages[i]; in cifs_readv_complete()
4266 if (rdata->result == 0 || in cifs_readv_complete()
4267 (rdata->result == -EAGAIN && got_bytes)) { in cifs_readv_complete()
4275 if (rdata->result == 0 || in cifs_readv_complete()
4276 (rdata->result == -EAGAIN && got_bytes)) in cifs_readv_complete()
4277 cifs_readpage_to_fscache(rdata->mapping->host, page); in cifs_readv_complete()
4279 cifs_fscache_uncache_page(rdata->mapping->host, page); in cifs_readv_complete()
4284 rdata->pages[i] = NULL; in cifs_readv_complete()
4286 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readv_complete()
4291 struct cifs_readdata *rdata, struct iov_iter *iter, in readpages_fill_pages() argument
4298 unsigned int nr_pages = rdata->nr_pages; in readpages_fill_pages()
4299 unsigned int page_offset = rdata->page_offset; in readpages_fill_pages()
4302 eof = CIFS_I(rdata->mapping->host)->server_eof; in readpages_fill_pages()
4306 rdata->got_bytes = 0; in readpages_fill_pages()
4307 rdata->tailsz = PAGE_SIZE; in readpages_fill_pages()
4309 struct page *page = rdata->pages[i]; in readpages_fill_pages()
4310 unsigned int to_read = rdata->pagesz; in readpages_fill_pages()
4325 n = rdata->tailsz = len; in readpages_fill_pages()
4342 rdata->pages[i] = NULL; in readpages_fill_pages()
4343 rdata->nr_pages--; in readpages_fill_pages()
4350 rdata->pages[i] = NULL; in readpages_fill_pages()
4351 rdata->nr_pages--; in readpages_fill_pages()
4359 else if (rdata->mr) in readpages_fill_pages()
4368 rdata->got_bytes += result; in readpages_fill_pages()
4371 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in readpages_fill_pages()
4372 rdata->got_bytes : result; in readpages_fill_pages()
4377 struct cifs_readdata *rdata, unsigned int len) in cifs_readpages_read_into_pages() argument
4379 return readpages_fill_pages(server, rdata, NULL, len); in cifs_readpages_read_into_pages()
4384 struct cifs_readdata *rdata, in cifs_readpages_copy_into_pages() argument
4387 return readpages_fill_pages(server, rdata, iter, iter->count); in cifs_readpages_copy_into_pages()
4503 struct cifs_readdata *rdata; in cifs_readpages() local
4540 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete); in cifs_readpages()
4541 if (!rdata) { in cifs_readpages()
4554 rdata->cfile = cifsFileInfo_get(open_file); in cifs_readpages()
4555 rdata->server = server; in cifs_readpages()
4556 rdata->mapping = mapping; in cifs_readpages()
4557 rdata->offset = offset; in cifs_readpages()
4558 rdata->bytes = bytes; in cifs_readpages()
4559 rdata->pid = pid; in cifs_readpages()
4560 rdata->pagesz = PAGE_SIZE; in cifs_readpages()
4561 rdata->tailsz = PAGE_SIZE; in cifs_readpages()
4562 rdata->read_into_pages = cifs_readpages_read_into_pages; in cifs_readpages()
4563 rdata->copy_into_pages = cifs_readpages_copy_into_pages; in cifs_readpages()
4564 rdata->credits = credits_on_stack; in cifs_readpages()
4568 rdata->pages[rdata->nr_pages++] = page; in cifs_readpages()
4571 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_readpages()
4574 if (rdata->cfile->invalidHandle) in cifs_readpages()
4577 rc = server->ops->async_readv(rdata); in cifs_readpages()
4581 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_readpages()
4582 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readpages()
4583 page = rdata->pages[i]; in cifs_readpages()
4589 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()
4593 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()