Lines Matching refs:wdata
2286 struct cifs_writedata *wdata = container_of(refcount, in cifs_writedata_release() local
2289 if (wdata->mr) { in cifs_writedata_release()
2290 smbd_deregister_mr(wdata->mr); in cifs_writedata_release()
2291 wdata->mr = NULL; in cifs_writedata_release()
2295 if (wdata->cfile) in cifs_writedata_release()
2296 cifsFileInfo_put(wdata->cfile); in cifs_writedata_release()
2298 kvfree(wdata->pages); in cifs_writedata_release()
2299 kfree(wdata); in cifs_writedata_release()
2307 cifs_writev_requeue(struct cifs_writedata *wdata) in cifs_writev_requeue() argument
2310 struct inode *inode = d_inode(wdata->cfile->dentry); in cifs_writev_requeue()
2314 server = tlink_tcon(wdata->cfile->tlink)->ses->server; in cifs_writev_requeue()
2316 rest_len = wdata->bytes; in cifs_writev_requeue()
2343 wdata2->pages[j] = wdata->pages[i + j]; in cifs_writev_requeue()
2348 wdata2->sync_mode = wdata->sync_mode; in cifs_writev_requeue()
2387 } while (i < wdata->nr_pages); in cifs_writev_requeue()
2390 for (; i < wdata->nr_pages; i++) { in cifs_writev_requeue()
2391 SetPageError(wdata->pages[i]); in cifs_writev_requeue()
2392 end_page_writeback(wdata->pages[i]); in cifs_writev_requeue()
2393 put_page(wdata->pages[i]); in cifs_writev_requeue()
2398 kref_put(&wdata->refcount, cifs_writedata_release); in cifs_writev_requeue()
2404 struct cifs_writedata *wdata = container_of(work, in cifs_writev_complete() local
2406 struct inode *inode = d_inode(wdata->cfile->dentry); in cifs_writev_complete()
2409 if (wdata->result == 0) { in cifs_writev_complete()
2411 cifs_update_eof(CIFS_I(inode), wdata->offset, wdata->bytes); in cifs_writev_complete()
2413 cifs_stats_bytes_written(tlink_tcon(wdata->cfile->tlink), in cifs_writev_complete()
2414 wdata->bytes); in cifs_writev_complete()
2415 } else if (wdata->sync_mode == WB_SYNC_ALL && wdata->result == -EAGAIN) in cifs_writev_complete()
2416 return cifs_writev_requeue(wdata); in cifs_writev_complete()
2418 for (i = 0; i < wdata->nr_pages; i++) { in cifs_writev_complete()
2419 struct page *page = wdata->pages[i]; in cifs_writev_complete()
2421 if (wdata->result == -EAGAIN) in cifs_writev_complete()
2423 else if (wdata->result < 0) in cifs_writev_complete()
2429 if (wdata->result != -EAGAIN) in cifs_writev_complete()
2430 mapping_set_error(inode->i_mapping, wdata->result); in cifs_writev_complete()
2431 kref_put(&wdata->refcount, cifs_writedata_release); in cifs_writev_complete()
2452 struct cifs_writedata *wdata; in cifs_writedata_direct_alloc() local
2454 wdata = kzalloc(sizeof(*wdata), GFP_NOFS); in cifs_writedata_direct_alloc()
2455 if (wdata != NULL) { in cifs_writedata_direct_alloc()
2456 wdata->pages = pages; in cifs_writedata_direct_alloc()
2457 kref_init(&wdata->refcount); in cifs_writedata_direct_alloc()
2458 INIT_LIST_HEAD(&wdata->list); in cifs_writedata_direct_alloc()
2459 init_completion(&wdata->done); in cifs_writedata_direct_alloc()
2460 INIT_WORK(&wdata->work, complete); in cifs_writedata_direct_alloc()
2462 return wdata; in cifs_writedata_direct_alloc()
2529 struct cifs_writedata *wdata; in wdata_alloc_and_fillpages() local
2531 wdata = cifs_writedata_alloc((unsigned int)tofind, in wdata_alloc_and_fillpages()
2533 if (!wdata) in wdata_alloc_and_fillpages()
2537 PAGECACHE_TAG_DIRTY, tofind, wdata->pages); in wdata_alloc_and_fillpages()
2538 return wdata; in wdata_alloc_and_fillpages()
2542 wdata_prepare_pages(struct cifs_writedata *wdata, unsigned int found_pages, in wdata_prepare_pages() argument
2551 page = wdata->pages[i]; in wdata_prepare_pages()
2602 wdata->pages[i] = page; in wdata_prepare_pages()
2609 *index = wdata->pages[0]->index + 1; in wdata_prepare_pages()
2613 put_page(wdata->pages[i]); in wdata_prepare_pages()
2614 wdata->pages[i] = NULL; in wdata_prepare_pages()
2621 wdata_send_pages(struct cifs_writedata *wdata, unsigned int nr_pages, in wdata_send_pages() argument
2626 wdata->sync_mode = wbc->sync_mode; in wdata_send_pages()
2627 wdata->nr_pages = nr_pages; in wdata_send_pages()
2628 wdata->offset = page_offset(wdata->pages[0]); in wdata_send_pages()
2629 wdata->pagesz = PAGE_SIZE; in wdata_send_pages()
2630 wdata->tailsz = min(i_size_read(mapping->host) - in wdata_send_pages()
2631 page_offset(wdata->pages[nr_pages - 1]), in wdata_send_pages()
2633 wdata->bytes = ((nr_pages - 1) * PAGE_SIZE) + wdata->tailsz; in wdata_send_pages()
2634 wdata->pid = wdata->cfile->pid; in wdata_send_pages()
2636 rc = adjust_credits(wdata->server, &wdata->credits, wdata->bytes); in wdata_send_pages()
2640 if (wdata->cfile->invalidHandle) in wdata_send_pages()
2643 rc = wdata->server->ops->async_writev(wdata, in wdata_send_pages()
2657 struct cifs_writedata *wdata; in cifs_writepages() local
2709 wdata = wdata_alloc_and_fillpages(tofind, mapping, end, &index, in cifs_writepages()
2711 if (!wdata) { in cifs_writepages()
2719 kref_put(&wdata->refcount, cifs_writedata_release); in cifs_writepages()
2724 nr_pages = wdata_prepare_pages(wdata, found_pages, mapping, wbc, in cifs_writepages()
2729 kref_put(&wdata->refcount, cifs_writedata_release); in cifs_writepages()
2734 wdata->credits = credits_on_stack; in cifs_writepages()
2735 wdata->cfile = cfile; in cifs_writepages()
2736 wdata->server = server; in cifs_writepages()
2739 if (!wdata->cfile) { in cifs_writepages()
2747 rc = wdata_send_pages(wdata, nr_pages, mapping, wbc); in cifs_writepages()
2750 unlock_page(wdata->pages[i]); in cifs_writepages()
2754 add_credits_and_wake_if(server, &wdata->credits, 0); in cifs_writepages()
2758 wdata->pages[i]); in cifs_writepages()
2760 SetPageError(wdata->pages[i]); in cifs_writepages()
2761 end_page_writeback(wdata->pages[i]); in cifs_writepages()
2762 put_page(wdata->pages[i]); in cifs_writepages()
2767 kref_put(&wdata->refcount, cifs_writedata_release); in cifs_writepages()
3092 struct cifs_writedata *wdata = container_of(refcount, in cifs_uncached_writedata_release() local
3095 kref_put(&wdata->ctx->refcount, cifs_aio_ctx_release); in cifs_uncached_writedata_release()
3096 for (i = 0; i < wdata->nr_pages; i++) in cifs_uncached_writedata_release()
3097 put_page(wdata->pages[i]); in cifs_uncached_writedata_release()
3106 struct cifs_writedata *wdata = container_of(work, in cifs_uncached_writev_complete() local
3108 struct inode *inode = d_inode(wdata->cfile->dentry); in cifs_uncached_writev_complete()
3112 cifs_update_eof(cifsi, wdata->offset, wdata->bytes); in cifs_uncached_writev_complete()
3117 complete(&wdata->done); in cifs_uncached_writev_complete()
3118 collect_uncached_write_data(wdata->ctx); in cifs_uncached_writev_complete()
3120 kref_put(&wdata->refcount, cifs_uncached_writedata_release); in cifs_uncached_writev_complete()
3124 wdata_fill_from_iovec(struct cifs_writedata *wdata, struct iov_iter *from, in wdata_fill_from_iovec() argument
3133 copied = copy_page_from_iter(wdata->pages[i], 0, bytes, from); in wdata_fill_from_iovec()
3166 cifs_resend_wdata(struct cifs_writedata *wdata, struct list_head *wdata_list, in cifs_resend_wdata() argument
3172 struct TCP_Server_Info *server = wdata->server; in cifs_resend_wdata()
3175 if (wdata->cfile->invalidHandle) { in cifs_resend_wdata()
3176 rc = cifs_reopen_file(wdata->cfile, false); in cifs_resend_wdata()
3190 rc = server->ops->wait_mtu_credits(server, wdata->bytes, in cifs_resend_wdata()
3195 if (wsize < wdata->bytes) { in cifs_resend_wdata()
3199 } while (wsize < wdata->bytes); in cifs_resend_wdata()
3200 wdata->credits = credits; in cifs_resend_wdata()
3202 rc = adjust_credits(server, &wdata->credits, wdata->bytes); in cifs_resend_wdata()
3205 if (wdata->cfile->invalidHandle) in cifs_resend_wdata()
3209 if (wdata->mr) { in cifs_resend_wdata()
3210 wdata->mr->need_invalidate = true; in cifs_resend_wdata()
3211 smbd_deregister_mr(wdata->mr); in cifs_resend_wdata()
3212 wdata->mr = NULL; in cifs_resend_wdata()
3215 rc = server->ops->async_writev(wdata, in cifs_resend_wdata()
3222 list_add_tail(&wdata->list, wdata_list); in cifs_resend_wdata()
3227 add_credits_and_wake_if(server, &wdata->credits, 0); in cifs_resend_wdata()
3231 kref_put(&wdata->refcount, cifs_uncached_writedata_release); in cifs_resend_wdata()
3244 struct cifs_writedata *wdata; in cifs_write_from_iter() local
3302 wdata = cifs_writedata_direct_alloc(pagevec, in cifs_write_from_iter()
3304 if (!wdata) { in cifs_write_from_iter()
3314 wdata->page_offset = start; in cifs_write_from_iter()
3315 wdata->tailsz = in cifs_write_from_iter()
3322 wdata = cifs_writedata_alloc(nr_pages, in cifs_write_from_iter()
3324 if (!wdata) { in cifs_write_from_iter()
3330 rc = cifs_write_allocate_pages(wdata->pages, nr_pages); in cifs_write_from_iter()
3332 kvfree(wdata->pages); in cifs_write_from_iter()
3333 kfree(wdata); in cifs_write_from_iter()
3340 wdata, from, &cur_len, &num_pages); in cifs_write_from_iter()
3343 put_page(wdata->pages[i]); in cifs_write_from_iter()
3344 kvfree(wdata->pages); in cifs_write_from_iter()
3345 kfree(wdata); in cifs_write_from_iter()
3355 put_page(wdata->pages[nr_pages - 1]); in cifs_write_from_iter()
3357 wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE); in cifs_write_from_iter()
3360 wdata->sync_mode = WB_SYNC_ALL; in cifs_write_from_iter()
3361 wdata->nr_pages = nr_pages; in cifs_write_from_iter()
3362 wdata->offset = (__u64)offset; in cifs_write_from_iter()
3363 wdata->cfile = cifsFileInfo_get(open_file); in cifs_write_from_iter()
3364 wdata->server = server; in cifs_write_from_iter()
3365 wdata->pid = pid; in cifs_write_from_iter()
3366 wdata->bytes = cur_len; in cifs_write_from_iter()
3367 wdata->pagesz = PAGE_SIZE; in cifs_write_from_iter()
3368 wdata->credits = credits_on_stack; in cifs_write_from_iter()
3369 wdata->ctx = ctx; in cifs_write_from_iter()
3372 rc = adjust_credits(server, &wdata->credits, wdata->bytes); in cifs_write_from_iter()
3375 if (wdata->cfile->invalidHandle) in cifs_write_from_iter()
3378 rc = server->ops->async_writev(wdata, in cifs_write_from_iter()
3383 add_credits_and_wake_if(server, &wdata->credits, 0); in cifs_write_from_iter()
3384 kref_put(&wdata->refcount, in cifs_write_from_iter()
3394 list_add_tail(&wdata->list, wdata_list); in cifs_write_from_iter()
3405 struct cifs_writedata *wdata, *tmp; in collect_uncached_write_data() local
3428 list_for_each_entry_safe(wdata, tmp, &ctx->list, list) { in collect_uncached_write_data()
3430 if (!try_wait_for_completion(&wdata->done)) { in collect_uncached_write_data()
3435 if (wdata->result) in collect_uncached_write_data()
3436 rc = wdata->result; in collect_uncached_write_data()
3438 ctx->total_len += wdata->bytes; in collect_uncached_write_data()
3446 list_del_init(&wdata->list); in collect_uncached_write_data()
3450 wdata, &tmp_list, ctx); in collect_uncached_write_data()
3453 wdata->offset - ctx->pos); in collect_uncached_write_data()
3455 rc = cifs_write_from_iter(wdata->offset, in collect_uncached_write_data()
3456 wdata->bytes, &tmp_from, in collect_uncached_write_data()
3460 kref_put(&wdata->refcount, in collect_uncached_write_data()
3468 list_del_init(&wdata->list); in collect_uncached_write_data()
3469 kref_put(&wdata->refcount, cifs_uncached_writedata_release); in collect_uncached_write_data()