Lines Matching refs:rdata
3350 struct cifs_readdata *rdata; in cifs_readdata_direct_alloc() local
3352 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); in cifs_readdata_direct_alloc()
3353 if (rdata != NULL) { in cifs_readdata_direct_alloc()
3354 rdata->pages = pages; in cifs_readdata_direct_alloc()
3355 kref_init(&rdata->refcount); in cifs_readdata_direct_alloc()
3356 INIT_LIST_HEAD(&rdata->list); in cifs_readdata_direct_alloc()
3357 init_completion(&rdata->done); in cifs_readdata_direct_alloc()
3358 INIT_WORK(&rdata->work, complete); in cifs_readdata_direct_alloc()
3361 return rdata; in cifs_readdata_direct_alloc()
3383 struct cifs_readdata *rdata = container_of(refcount, in cifs_readdata_release() local
3386 if (rdata->mr) { in cifs_readdata_release()
3387 smbd_deregister_mr(rdata->mr); in cifs_readdata_release()
3388 rdata->mr = NULL; in cifs_readdata_release()
3391 if (rdata->cfile) in cifs_readdata_release()
3392 cifsFileInfo_put(rdata->cfile); in cifs_readdata_release()
3394 kvfree(rdata->pages); in cifs_readdata_release()
3395 kfree(rdata); in cifs_readdata_release()
3399 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages) in cifs_read_allocate_pages() argument
3411 rdata->pages[i] = page; in cifs_read_allocate_pages()
3418 put_page(rdata->pages[i]); in cifs_read_allocate_pages()
3419 rdata->pages[i] = NULL; in cifs_read_allocate_pages()
3428 struct cifs_readdata *rdata = container_of(refcount, in cifs_uncached_readdata_release() local
3432 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release); in cifs_uncached_readdata_release()
3433 for (i = 0; i < rdata->nr_pages; i++) { in cifs_uncached_readdata_release()
3434 put_page(rdata->pages[i]); in cifs_uncached_readdata_release()
3449 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter) in cifs_readdata_to_iov() argument
3451 size_t remaining = rdata->got_bytes; in cifs_readdata_to_iov()
3454 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readdata_to_iov()
3455 struct page *page = rdata->pages[i]; in cifs_readdata_to_iov()
3478 struct cifs_readdata *rdata = container_of(work, in cifs_uncached_readv_complete() local
3481 complete(&rdata->done); in cifs_uncached_readv_complete()
3482 collect_uncached_read_data(rdata->ctx); in cifs_uncached_readv_complete()
3484 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_uncached_readv_complete()
3489 struct cifs_readdata *rdata, struct iov_iter *iter, in uncached_fill_pages() argument
3494 unsigned int nr_pages = rdata->nr_pages; in uncached_fill_pages()
3495 unsigned int page_offset = rdata->page_offset; in uncached_fill_pages()
3497 rdata->got_bytes = 0; in uncached_fill_pages()
3498 rdata->tailsz = PAGE_SIZE; in uncached_fill_pages()
3500 struct page *page = rdata->pages[i]; in uncached_fill_pages()
3502 unsigned int segment_size = rdata->pagesz; in uncached_fill_pages()
3512 rdata->pages[i] = NULL; in uncached_fill_pages()
3513 rdata->nr_pages--; in uncached_fill_pages()
3523 rdata->tailsz = len; in uncached_fill_pages()
3530 else if (rdata->mr) in uncached_fill_pages()
3539 rdata->got_bytes += result; in uncached_fill_pages()
3542 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in uncached_fill_pages()
3543 rdata->got_bytes : result; in uncached_fill_pages()
3548 struct cifs_readdata *rdata, unsigned int len) in cifs_uncached_read_into_pages() argument
3550 return uncached_fill_pages(server, rdata, NULL, len); in cifs_uncached_read_into_pages()
3555 struct cifs_readdata *rdata, in cifs_uncached_copy_into_pages() argument
3558 return uncached_fill_pages(server, rdata, iter, iter->count); in cifs_uncached_copy_into_pages()
3561 static int cifs_resend_rdata(struct cifs_readdata *rdata, in cifs_resend_rdata() argument
3571 server = rdata->server; in cifs_resend_rdata()
3574 if (rdata->cfile->invalidHandle) { in cifs_resend_rdata()
3575 rc = cifs_reopen_file(rdata->cfile, true); in cifs_resend_rdata()
3588 rc = server->ops->wait_mtu_credits(server, rdata->bytes, in cifs_resend_rdata()
3594 if (rsize < rdata->bytes) { in cifs_resend_rdata()
3598 } while (rsize < rdata->bytes); in cifs_resend_rdata()
3599 rdata->credits = credits; in cifs_resend_rdata()
3601 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_resend_rdata()
3603 if (rdata->cfile->invalidHandle) in cifs_resend_rdata()
3607 if (rdata->mr) { in cifs_resend_rdata()
3608 rdata->mr->need_invalidate = true; in cifs_resend_rdata()
3609 smbd_deregister_mr(rdata->mr); in cifs_resend_rdata()
3610 rdata->mr = NULL; in cifs_resend_rdata()
3613 rc = server->ops->async_readv(rdata); in cifs_resend_rdata()
3620 list_add_tail(&rdata->list, rdata_list); in cifs_resend_rdata()
3625 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_resend_rdata()
3629 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_resend_rdata()
3638 struct cifs_readdata *rdata; in cifs_send_async_read() local
3697 rdata = cifs_readdata_direct_alloc( in cifs_send_async_read()
3699 if (!rdata) { in cifs_send_async_read()
3706 rdata->page_offset = start; in cifs_send_async_read()
3707 rdata->tailsz = npages > 1 ? in cifs_send_async_read()
3715 rdata = cifs_readdata_alloc(npages, in cifs_send_async_read()
3717 if (!rdata) { in cifs_send_async_read()
3723 rc = cifs_read_allocate_pages(rdata, npages); in cifs_send_async_read()
3725 kvfree(rdata->pages); in cifs_send_async_read()
3726 kfree(rdata); in cifs_send_async_read()
3731 rdata->tailsz = PAGE_SIZE; in cifs_send_async_read()
3734 rdata->server = server; in cifs_send_async_read()
3735 rdata->cfile = cifsFileInfo_get(open_file); in cifs_send_async_read()
3736 rdata->nr_pages = npages; in cifs_send_async_read()
3737 rdata->offset = offset; in cifs_send_async_read()
3738 rdata->bytes = cur_len; in cifs_send_async_read()
3739 rdata->pid = pid; in cifs_send_async_read()
3740 rdata->pagesz = PAGE_SIZE; in cifs_send_async_read()
3741 rdata->read_into_pages = cifs_uncached_read_into_pages; in cifs_send_async_read()
3742 rdata->copy_into_pages = cifs_uncached_copy_into_pages; in cifs_send_async_read()
3743 rdata->credits = credits_on_stack; in cifs_send_async_read()
3744 rdata->ctx = ctx; in cifs_send_async_read()
3747 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_send_async_read()
3750 if (rdata->cfile->invalidHandle) in cifs_send_async_read()
3753 rc = server->ops->async_readv(rdata); in cifs_send_async_read()
3757 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_send_async_read()
3758 kref_put(&rdata->refcount, in cifs_send_async_read()
3767 list_add_tail(&rdata->list, rdata_list); in cifs_send_async_read()
3778 struct cifs_readdata *rdata, *tmp; in collect_uncached_read_data() local
3795 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) { in collect_uncached_read_data()
3797 if (!try_wait_for_completion(&rdata->done)) { in collect_uncached_read_data()
3802 if (rdata->result == -EAGAIN) { in collect_uncached_read_data()
3805 unsigned int got_bytes = rdata->got_bytes; in collect_uncached_read_data()
3807 list_del_init(&rdata->list); in collect_uncached_read_data()
3815 if (got_bytes && got_bytes < rdata->bytes) { in collect_uncached_read_data()
3818 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3820 kref_put(&rdata->refcount, in collect_uncached_read_data()
3832 rdata, in collect_uncached_read_data()
3836 rdata->offset + got_bytes, in collect_uncached_read_data()
3837 rdata->bytes - got_bytes, in collect_uncached_read_data()
3838 rdata->cfile, cifs_sb, in collect_uncached_read_data()
3841 kref_put(&rdata->refcount, in collect_uncached_read_data()
3848 } else if (rdata->result) in collect_uncached_read_data()
3849 rc = rdata->result; in collect_uncached_read_data()
3851 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3854 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes) in collect_uncached_read_data()
3857 ctx->total_len += rdata->got_bytes; in collect_uncached_read_data()
3859 list_del_init(&rdata->list); in collect_uncached_read_data()
3860 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in collect_uncached_read_data()
4194 struct cifs_readdata *rdata = container_of(work, in cifs_readv_complete() local
4197 got_bytes = rdata->got_bytes; in cifs_readv_complete()
4198 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readv_complete()
4199 struct page *page = rdata->pages[i]; in cifs_readv_complete()
4203 if (rdata->result == 0 || in cifs_readv_complete()
4204 (rdata->result == -EAGAIN && got_bytes)) { in cifs_readv_complete()
4211 if (rdata->result == 0 || in cifs_readv_complete()
4212 (rdata->result == -EAGAIN && got_bytes)) in cifs_readv_complete()
4213 cifs_readpage_to_fscache(rdata->mapping->host, page); in cifs_readv_complete()
4218 rdata->pages[i] = NULL; in cifs_readv_complete()
4220 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readv_complete()
4225 struct cifs_readdata *rdata, struct iov_iter *iter, in readpages_fill_pages() argument
4232 unsigned int nr_pages = rdata->nr_pages; in readpages_fill_pages()
4233 unsigned int page_offset = rdata->page_offset; in readpages_fill_pages()
4236 eof = CIFS_I(rdata->mapping->host)->server_eof; in readpages_fill_pages()
4240 rdata->got_bytes = 0; in readpages_fill_pages()
4241 rdata->tailsz = PAGE_SIZE; in readpages_fill_pages()
4243 struct page *page = rdata->pages[i]; in readpages_fill_pages()
4244 unsigned int to_read = rdata->pagesz; in readpages_fill_pages()
4259 n = rdata->tailsz = len; in readpages_fill_pages()
4276 rdata->pages[i] = NULL; in readpages_fill_pages()
4277 rdata->nr_pages--; in readpages_fill_pages()
4284 rdata->pages[i] = NULL; in readpages_fill_pages()
4285 rdata->nr_pages--; in readpages_fill_pages()
4293 else if (rdata->mr) in readpages_fill_pages()
4302 rdata->got_bytes += result; in readpages_fill_pages()
4305 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in readpages_fill_pages()
4306 rdata->got_bytes : result; in readpages_fill_pages()
4311 struct cifs_readdata *rdata, unsigned int len) in cifs_readpages_read_into_pages() argument
4313 return readpages_fill_pages(server, rdata, NULL, len); in cifs_readpages_read_into_pages()
4318 struct cifs_readdata *rdata, in cifs_readpages_copy_into_pages() argument
4321 return readpages_fill_pages(server, rdata, iter, iter->count); in cifs_readpages_copy_into_pages()
4437 struct cifs_readdata *rdata; in cifs_readpages() local
4474 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete); in cifs_readpages()
4475 if (!rdata) { in cifs_readpages()
4488 rdata->cfile = cifsFileInfo_get(open_file); in cifs_readpages()
4489 rdata->server = server; in cifs_readpages()
4490 rdata->mapping = mapping; in cifs_readpages()
4491 rdata->offset = offset; in cifs_readpages()
4492 rdata->bytes = bytes; in cifs_readpages()
4493 rdata->pid = pid; in cifs_readpages()
4494 rdata->pagesz = PAGE_SIZE; in cifs_readpages()
4495 rdata->tailsz = PAGE_SIZE; in cifs_readpages()
4496 rdata->read_into_pages = cifs_readpages_read_into_pages; in cifs_readpages()
4497 rdata->copy_into_pages = cifs_readpages_copy_into_pages; in cifs_readpages()
4498 rdata->credits = credits_on_stack; in cifs_readpages()
4502 rdata->pages[rdata->nr_pages++] = page; in cifs_readpages()
4505 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_readpages()
4508 if (rdata->cfile->invalidHandle) in cifs_readpages()
4511 rc = server->ops->async_readv(rdata); in cifs_readpages()
4515 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_readpages()
4516 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readpages()
4517 page = rdata->pages[i]; in cifs_readpages()
4523 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()
4527 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()