Lines Matching refs:rdata
3232 struct cifs_readdata *rdata; in cifs_readdata_direct_alloc() local
3234 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); in cifs_readdata_direct_alloc()
3235 if (rdata != NULL) { in cifs_readdata_direct_alloc()
3236 rdata->pages = pages; in cifs_readdata_direct_alloc()
3237 kref_init(&rdata->refcount); in cifs_readdata_direct_alloc()
3238 INIT_LIST_HEAD(&rdata->list); in cifs_readdata_direct_alloc()
3239 init_completion(&rdata->done); in cifs_readdata_direct_alloc()
3240 INIT_WORK(&rdata->work, complete); in cifs_readdata_direct_alloc()
3243 return rdata; in cifs_readdata_direct_alloc()
3265 struct cifs_readdata *rdata = container_of(refcount, in cifs_readdata_release() local
3268 if (rdata->mr) { in cifs_readdata_release()
3269 smbd_deregister_mr(rdata->mr); in cifs_readdata_release()
3270 rdata->mr = NULL; in cifs_readdata_release()
3273 if (rdata->cfile) in cifs_readdata_release()
3274 cifsFileInfo_put(rdata->cfile); in cifs_readdata_release()
3276 kvfree(rdata->pages); in cifs_readdata_release()
3277 kfree(rdata); in cifs_readdata_release()
3281 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages) in cifs_read_allocate_pages() argument
3293 rdata->pages[i] = page; in cifs_read_allocate_pages()
3300 put_page(rdata->pages[i]); in cifs_read_allocate_pages()
3301 rdata->pages[i] = NULL; in cifs_read_allocate_pages()
3310 struct cifs_readdata *rdata = container_of(refcount, in cifs_uncached_readdata_release() local
3314 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release); in cifs_uncached_readdata_release()
3315 for (i = 0; i < rdata->nr_pages; i++) { in cifs_uncached_readdata_release()
3316 put_page(rdata->pages[i]); in cifs_uncached_readdata_release()
3331 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter) in cifs_readdata_to_iov() argument
3333 size_t remaining = rdata->got_bytes; in cifs_readdata_to_iov()
3336 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readdata_to_iov()
3337 struct page *page = rdata->pages[i]; in cifs_readdata_to_iov()
3360 struct cifs_readdata *rdata = container_of(work, in cifs_uncached_readv_complete() local
3363 complete(&rdata->done); in cifs_uncached_readv_complete()
3364 collect_uncached_read_data(rdata->ctx); in cifs_uncached_readv_complete()
3366 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_uncached_readv_complete()
3371 struct cifs_readdata *rdata, struct iov_iter *iter, in uncached_fill_pages() argument
3376 unsigned int nr_pages = rdata->nr_pages; in uncached_fill_pages()
3377 unsigned int page_offset = rdata->page_offset; in uncached_fill_pages()
3379 rdata->got_bytes = 0; in uncached_fill_pages()
3380 rdata->tailsz = PAGE_SIZE; in uncached_fill_pages()
3382 struct page *page = rdata->pages[i]; in uncached_fill_pages()
3384 unsigned int segment_size = rdata->pagesz; in uncached_fill_pages()
3394 rdata->pages[i] = NULL; in uncached_fill_pages()
3395 rdata->nr_pages--; in uncached_fill_pages()
3405 rdata->tailsz = len; in uncached_fill_pages()
3412 else if (rdata->mr) in uncached_fill_pages()
3421 rdata->got_bytes += result; in uncached_fill_pages()
3424 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in uncached_fill_pages()
3425 rdata->got_bytes : result; in uncached_fill_pages()
3430 struct cifs_readdata *rdata, unsigned int len) in cifs_uncached_read_into_pages() argument
3432 return uncached_fill_pages(server, rdata, NULL, len); in cifs_uncached_read_into_pages()
3437 struct cifs_readdata *rdata, in cifs_uncached_copy_into_pages() argument
3440 return uncached_fill_pages(server, rdata, iter, iter->count); in cifs_uncached_copy_into_pages()
3443 static int cifs_resend_rdata(struct cifs_readdata *rdata, in cifs_resend_rdata() argument
3451 tlink_tcon(rdata->cfile->tlink)->ses->server; in cifs_resend_rdata()
3454 if (rdata->cfile->invalidHandle) { in cifs_resend_rdata()
3455 rc = cifs_reopen_file(rdata->cfile, true); in cifs_resend_rdata()
3468 rc = server->ops->wait_mtu_credits(server, rdata->bytes, in cifs_resend_rdata()
3474 if (rsize < rdata->bytes) { in cifs_resend_rdata()
3478 } while (rsize < rdata->bytes); in cifs_resend_rdata()
3479 rdata->credits = credits; in cifs_resend_rdata()
3481 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_resend_rdata()
3483 if (rdata->cfile->invalidHandle) in cifs_resend_rdata()
3486 rc = server->ops->async_readv(rdata); in cifs_resend_rdata()
3492 list_add_tail(&rdata->list, rdata_list); in cifs_resend_rdata()
3497 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_resend_rdata()
3501 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in cifs_resend_rdata()
3510 struct cifs_readdata *rdata; in cifs_send_async_read() local
3571 rdata = cifs_readdata_direct_alloc( in cifs_send_async_read()
3573 if (!rdata) { in cifs_send_async_read()
3580 rdata->page_offset = start; in cifs_send_async_read()
3581 rdata->tailsz = npages > 1 ? in cifs_send_async_read()
3589 rdata = cifs_readdata_alloc(npages, in cifs_send_async_read()
3591 if (!rdata) { in cifs_send_async_read()
3597 rc = cifs_read_allocate_pages(rdata, npages); in cifs_send_async_read()
3599 kvfree(rdata->pages); in cifs_send_async_read()
3600 kfree(rdata); in cifs_send_async_read()
3605 rdata->tailsz = PAGE_SIZE; in cifs_send_async_read()
3608 rdata->cfile = cifsFileInfo_get(open_file); in cifs_send_async_read()
3609 rdata->nr_pages = npages; in cifs_send_async_read()
3610 rdata->offset = offset; in cifs_send_async_read()
3611 rdata->bytes = cur_len; in cifs_send_async_read()
3612 rdata->pid = pid; in cifs_send_async_read()
3613 rdata->pagesz = PAGE_SIZE; in cifs_send_async_read()
3614 rdata->read_into_pages = cifs_uncached_read_into_pages; in cifs_send_async_read()
3615 rdata->copy_into_pages = cifs_uncached_copy_into_pages; in cifs_send_async_read()
3616 rdata->credits = credits_on_stack; in cifs_send_async_read()
3617 rdata->ctx = ctx; in cifs_send_async_read()
3620 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_send_async_read()
3623 if (rdata->cfile->invalidHandle) in cifs_send_async_read()
3626 rc = server->ops->async_readv(rdata); in cifs_send_async_read()
3630 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_send_async_read()
3631 kref_put(&rdata->refcount, in cifs_send_async_read()
3640 list_add_tail(&rdata->list, rdata_list); in cifs_send_async_read()
3651 struct cifs_readdata *rdata, *tmp; in collect_uncached_read_data() local
3668 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) { in collect_uncached_read_data()
3670 if (!try_wait_for_completion(&rdata->done)) { in collect_uncached_read_data()
3675 if (rdata->result == -EAGAIN) { in collect_uncached_read_data()
3678 unsigned int got_bytes = rdata->got_bytes; in collect_uncached_read_data()
3680 list_del_init(&rdata->list); in collect_uncached_read_data()
3688 if (got_bytes && got_bytes < rdata->bytes) { in collect_uncached_read_data()
3691 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3693 kref_put(&rdata->refcount, in collect_uncached_read_data()
3705 rdata, in collect_uncached_read_data()
3709 rdata->offset + got_bytes, in collect_uncached_read_data()
3710 rdata->bytes - got_bytes, in collect_uncached_read_data()
3711 rdata->cfile, cifs_sb, in collect_uncached_read_data()
3714 kref_put(&rdata->refcount, in collect_uncached_read_data()
3721 } else if (rdata->result) in collect_uncached_read_data()
3722 rc = rdata->result; in collect_uncached_read_data()
3724 rc = cifs_readdata_to_iov(rdata, to); in collect_uncached_read_data()
3727 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes) in collect_uncached_read_data()
3730 ctx->total_len += rdata->got_bytes; in collect_uncached_read_data()
3732 list_del_init(&rdata->list); in collect_uncached_read_data()
3733 kref_put(&rdata->refcount, cifs_uncached_readdata_release); in collect_uncached_read_data()
4057 struct cifs_readdata *rdata = container_of(work, in cifs_readv_complete() local
4060 got_bytes = rdata->got_bytes; in cifs_readv_complete()
4061 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readv_complete()
4062 struct page *page = rdata->pages[i]; in cifs_readv_complete()
4066 if (rdata->result == 0 || in cifs_readv_complete()
4067 (rdata->result == -EAGAIN && got_bytes)) { in cifs_readv_complete()
4074 if (rdata->result == 0 || in cifs_readv_complete()
4075 (rdata->result == -EAGAIN && got_bytes)) in cifs_readv_complete()
4076 cifs_readpage_to_fscache(rdata->mapping->host, page); in cifs_readv_complete()
4081 rdata->pages[i] = NULL; in cifs_readv_complete()
4083 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readv_complete()
4088 struct cifs_readdata *rdata, struct iov_iter *iter, in readpages_fill_pages() argument
4095 unsigned int nr_pages = rdata->nr_pages; in readpages_fill_pages()
4096 unsigned int page_offset = rdata->page_offset; in readpages_fill_pages()
4099 eof = CIFS_I(rdata->mapping->host)->server_eof; in readpages_fill_pages()
4103 rdata->got_bytes = 0; in readpages_fill_pages()
4104 rdata->tailsz = PAGE_SIZE; in readpages_fill_pages()
4106 struct page *page = rdata->pages[i]; in readpages_fill_pages()
4107 unsigned int to_read = rdata->pagesz; in readpages_fill_pages()
4122 n = rdata->tailsz = len; in readpages_fill_pages()
4139 rdata->pages[i] = NULL; in readpages_fill_pages()
4140 rdata->nr_pages--; in readpages_fill_pages()
4147 rdata->pages[i] = NULL; in readpages_fill_pages()
4148 rdata->nr_pages--; in readpages_fill_pages()
4156 else if (rdata->mr) in readpages_fill_pages()
4165 rdata->got_bytes += result; in readpages_fill_pages()
4168 return rdata->got_bytes > 0 && result != -ECONNABORTED ? in readpages_fill_pages()
4169 rdata->got_bytes : result; in readpages_fill_pages()
4174 struct cifs_readdata *rdata, unsigned int len) in cifs_readpages_read_into_pages() argument
4176 return readpages_fill_pages(server, rdata, NULL, len); in cifs_readpages_read_into_pages()
4181 struct cifs_readdata *rdata, in cifs_readpages_copy_into_pages() argument
4184 return readpages_fill_pages(server, rdata, iter, iter->count); in cifs_readpages_copy_into_pages()
4298 struct cifs_readdata *rdata; in cifs_readpages() local
4334 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete); in cifs_readpages()
4335 if (!rdata) { in cifs_readpages()
4348 rdata->cfile = cifsFileInfo_get(open_file); in cifs_readpages()
4349 rdata->mapping = mapping; in cifs_readpages()
4350 rdata->offset = offset; in cifs_readpages()
4351 rdata->bytes = bytes; in cifs_readpages()
4352 rdata->pid = pid; in cifs_readpages()
4353 rdata->pagesz = PAGE_SIZE; in cifs_readpages()
4354 rdata->tailsz = PAGE_SIZE; in cifs_readpages()
4355 rdata->read_into_pages = cifs_readpages_read_into_pages; in cifs_readpages()
4356 rdata->copy_into_pages = cifs_readpages_copy_into_pages; in cifs_readpages()
4357 rdata->credits = credits_on_stack; in cifs_readpages()
4361 rdata->pages[rdata->nr_pages++] = page; in cifs_readpages()
4364 rc = adjust_credits(server, &rdata->credits, rdata->bytes); in cifs_readpages()
4367 if (rdata->cfile->invalidHandle) in cifs_readpages()
4370 rc = server->ops->async_readv(rdata); in cifs_readpages()
4374 add_credits_and_wake_if(server, &rdata->credits, 0); in cifs_readpages()
4375 for (i = 0; i < rdata->nr_pages; i++) { in cifs_readpages()
4376 page = rdata->pages[i]; in cifs_readpages()
4382 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()
4386 kref_put(&rdata->refcount, cifs_readdata_release); in cifs_readpages()