From nobody Tue Dec 16 20:30:03 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11041C4167B for ; Thu, 7 Dec 2023 21:34:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1444004AbjLGVeL (ORCPT ); Thu, 7 Dec 2023 16:34:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235820AbjLGVdu (ORCPT ); Thu, 7 Dec 2023 16:33:50 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0B2D23843 for ; Thu, 7 Dec 2023 13:27:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1701984421; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k5pevVMppau2qNN22sVObO0Q0oUjM6ryE0X8UJ4Gbj0=; b=b/EYgcIrDnr59iOOqL7VefAu+fdAnYal1+R7NH5ohC7GvsNdSpq8Hjvnvac7H5a/b4Y32N xE9HVqcnasl/IgjUPL83rR5lTtc6FNhkZ2cTbSa4EJ8bE4Cddos2/kwS0vJWn3VF4vRHxH egGAsTt94cLZIaXooKZ3JVi5fZ2cjnM= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-562-km6B9U1VN4iYbU1qlTy9iA-1; Thu, 07 Dec 2023 16:25:11 -0500 X-MC-Unique: km6B9U1VN4iYbU1qlTy9iA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1DD8E101A551; Thu, 7 Dec 2023 21:25:10 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.161]) by smtp.corp.redhat.com (Postfix) with ESMTP id C9BBB3C2E; Thu, 7 Dec 2023 21:25:06 +0000 (UTC) From: David Howells To: Jeff Layton , Steve French Cc: David Howells , Matthew Wilcox , Marc Dionne , Paulo Alcantara , Shyam Prasad N , Tom Talpey , Dominique Martinet , Eric Van Hensbergen , Ilya Dryomov , Christian Brauner , linux-cachefs@redhat.com, linux-afs@lists.infradead.org, linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Steve French , Shyam Prasad N , Rohith Surabattula Subject: [PATCH v3 51/59] cifs: Use more fields from netfs_io_subrequest Date: Thu, 7 Dec 2023 21:21:58 +0000 Message-ID: <20231207212206.1379128-52-dhowells@redhat.com> In-Reply-To: <20231207212206.1379128-1-dhowells@redhat.com> References: <20231207212206.1379128-1-dhowells@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Use more fields from netfs_io_subrequest instead of those incorporated into cifs_io_subrequest from cifs_readdata and cifs_writedata. Signed-off-by: David Howells cc: Steve French cc: Shyam Prasad N cc: Rohith Surabattula cc: Jeff Layton cc: linux-cifs@vger.kernel.org cc: linux-cachefs@redhat.com cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org --- fs/smb/client/cifsglob.h | 3 - fs/smb/client/cifssmb.c | 52 +++++++++--------- fs/smb/client/file.c | 112 +++++++++++++++++++------------------- fs/smb/client/smb2ops.c | 4 +- fs/smb/client/smb2pdu.c | 52 +++++++++--------- fs/smb/client/transport.c | 6 +- 6 files changed, 113 insertions(+), 116 deletions(-) diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h index 0ca70c0581af..80a9f15828cc 100644 --- a/fs/smb/client/cifsglob.h +++ b/fs/smb/client/cifsglob.h @@ -1456,9 +1456,6 @@ struct cifs_io_subrequest { struct list_head list; struct completion done; struct work_struct work; - struct iov_iter iter; - __u64 offset; - unsigned int bytes; }; =20 /* diff --git a/fs/smb/client/cifssmb.c b/fs/smb/client/cifssmb.c index a64d972ba0b1..702dae6bf913 100644 --- a/fs/smb/client/cifssmb.c +++ b/fs/smb/client/cifssmb.c @@ -1269,12 +1269,12 @@ cifs_readv_callback(struct mid_q_entry *mid) struct TCP_Server_Info *server =3D tcon->ses->server; struct smb_rqst rqst =3D { .rq_iov =3D rdata->iov, .rq_nvec =3D 2, - .rq_iter =3D rdata->iter }; + .rq_iter =3D rdata->subreq.io_iter }; struct cifs_credits credits =3D { .value =3D 1, .instance =3D 0 }; =20 - cifs_dbg(FYI, "%s: mid=3D%llu state=3D%d result=3D%d bytes=3D%u\n", + cifs_dbg(FYI, "%s: mid=3D%llu state=3D%d result=3D%d bytes=3D%zu\n", __func__, mid->mid, mid->mid_state, rdata->result, - rdata->bytes); + rdata->subreq.len); =20 switch (mid->mid_state) { case MID_RESPONSE_RECEIVED: @@ -1322,14 +1322,14 @@ cifs_async_readv(struct cifs_io_subrequest *rdata) struct smb_rqst rqst =3D { .rq_iov =3D rdata->iov, .rq_nvec =3D 2 }; =20 - cifs_dbg(FYI, "%s: offset=3D%llu bytes=3D%u\n", - __func__, rdata->offset, rdata->bytes); + cifs_dbg(FYI, "%s: offset=3D%llu bytes=3D%zu\n", + __func__, rdata->subreq.start, rdata->subreq.len); =20 if (tcon->ses->capabilities & CAP_LARGE_FILES) wct =3D 12; else { wct =3D 10; /* old style read */ - if ((rdata->offset >> 32) > 0) { + if ((rdata->subreq.start >> 32) > 0) { /* can not handle this big offset for old */ return -EIO; } @@ -1344,12 +1344,12 @@ cifs_async_readv(struct cifs_io_subrequest *rdata) =20 smb->AndXCommand =3D 0xFF; /* none */ smb->Fid =3D rdata->cfile->fid.netfid; - smb->OffsetLow =3D cpu_to_le32(rdata->offset & 0xFFFFFFFF); + smb->OffsetLow =3D cpu_to_le32(rdata->subreq.start & 0xFFFFFFFF); if (wct =3D=3D 12) - smb->OffsetHigh =3D cpu_to_le32(rdata->offset >> 32); + smb->OffsetHigh =3D cpu_to_le32(rdata->subreq.start >> 32); smb->Remaining =3D 0; - smb->MaxCount =3D cpu_to_le16(rdata->bytes & 0xFFFF); - smb->MaxCountHigh =3D cpu_to_le32(rdata->bytes >> 16); + smb->MaxCount =3D cpu_to_le16(rdata->subreq.len & 0xFFFF); + smb->MaxCountHigh =3D cpu_to_le32(rdata->subreq.len >> 16); if (wct =3D=3D 12) smb->ByteCount =3D 0; else { @@ -1633,13 +1633,13 @@ cifs_writev_callback(struct mid_q_entry *mid) * client. OS/2 servers are known to set incorrect * CountHigh values. */ - if (written > wdata->bytes) + if (written > wdata->subreq.len) written &=3D 0xFFFF; =20 - if (written < wdata->bytes) + if (written < wdata->subreq.len) wdata->result =3D -ENOSPC; else - wdata->bytes =3D written; + wdata->subreq.len =3D written; break; case MID_REQUEST_SUBMITTED: case MID_RETRY_NEEDED: @@ -1670,7 +1670,7 @@ cifs_async_writev(struct cifs_io_subrequest *wdata) wct =3D 14; } else { wct =3D 12; - if (wdata->offset >> 32 > 0) { + if (wdata->subreq.start >> 32 > 0) { /* can not handle big offset for old srv */ return -EIO; } @@ -1685,9 +1685,9 @@ cifs_async_writev(struct cifs_io_subrequest *wdata) =20 smb->AndXCommand =3D 0xFF; /* none */ smb->Fid =3D wdata->cfile->fid.netfid; - smb->OffsetLow =3D cpu_to_le32(wdata->offset & 0xFFFFFFFF); + smb->OffsetLow =3D cpu_to_le32(wdata->subreq.start & 0xFFFFFFFF); if (wct =3D=3D 14) - smb->OffsetHigh =3D cpu_to_le32(wdata->offset >> 32); + smb->OffsetHigh =3D cpu_to_le32(wdata->subreq.start >> 32); smb->Reserved =3D 0xFFFFFFFF; smb->WriteMode =3D 0; smb->Remaining =3D 0; @@ -1703,24 +1703,24 @@ cifs_async_writev(struct cifs_io_subrequest *wdata) =20 rqst.rq_iov =3D iov; rqst.rq_nvec =3D 2; - rqst.rq_iter =3D wdata->iter; - rqst.rq_iter_size =3D iov_iter_count(&wdata->iter); + rqst.rq_iter =3D wdata->subreq.io_iter; + rqst.rq_iter_size =3D iov_iter_count(&wdata->subreq.io_iter); =20 - cifs_dbg(FYI, "async write at %llu %u bytes\n", - wdata->offset, wdata->bytes); + cifs_dbg(FYI, "async write at %llu %zu bytes\n", + wdata->subreq.start, wdata->subreq.len); =20 - smb->DataLengthLow =3D cpu_to_le16(wdata->bytes & 0xFFFF); - smb->DataLengthHigh =3D cpu_to_le16(wdata->bytes >> 16); + smb->DataLengthLow =3D cpu_to_le16(wdata->subreq.len & 0xFFFF); + smb->DataLengthHigh =3D cpu_to_le16(wdata->subreq.len >> 16); =20 if (wct =3D=3D 14) { - inc_rfc1001_len(&smb->hdr, wdata->bytes + 1); - put_bcc(wdata->bytes + 1, &smb->hdr); + inc_rfc1001_len(&smb->hdr, wdata->subreq.len + 1); + put_bcc(wdata->subreq.len + 1, &smb->hdr); } else { /* wct =3D=3D 12 */ struct smb_com_writex_req *smbw =3D (struct smb_com_writex_req *)smb; - inc_rfc1001_len(&smbw->hdr, wdata->bytes + 5); - put_bcc(wdata->bytes + 5, &smbw->hdr); + inc_rfc1001_len(&smbw->hdr, wdata->subreq.len + 5); + put_bcc(wdata->subreq.len + 5, &smbw->hdr); iov[1].iov_len +=3D 4; /* pad bigger by four bytes */ } =20 diff --git a/fs/smb/client/file.c b/fs/smb/client/file.c index 6e0a99888bfc..16f6c15e0d06 100644 --- a/fs/smb/client/file.c +++ b/fs/smb/client/file.c @@ -2438,8 +2438,8 @@ cifs_writev_requeue(struct cifs_io_subrequest *wdata) int rc =3D 0; struct inode *inode =3D d_inode(wdata->cfile->dentry); struct TCP_Server_Info *server; - unsigned int rest_len =3D wdata->bytes; - loff_t fpos =3D wdata->offset; + unsigned int rest_len =3D wdata->subreq.len; + loff_t fpos =3D wdata->subreq.start; =20 server =3D tlink_tcon(wdata->cfile->tlink)->ses->server; do { @@ -2464,14 +2464,14 @@ cifs_writev_requeue(struct cifs_io_subrequest *wdat= a) } =20 wdata2->sync_mode =3D wdata->sync_mode; - wdata2->offset =3D fpos; - wdata2->bytes =3D cur_len; - wdata2->iter =3D wdata->iter; + wdata2->subreq.start =3D fpos; + wdata2->subreq.len =3D cur_len; + wdata2->subreq.io_iter =3D wdata->subreq.io_iter; =20 - iov_iter_advance(&wdata2->iter, fpos - wdata->offset); - iov_iter_truncate(&wdata2->iter, wdata2->bytes); + iov_iter_advance(&wdata2->subreq.io_iter, fpos - wdata->subreq.start); + iov_iter_truncate(&wdata2->subreq.io_iter, wdata2->subreq.len); =20 - if (iov_iter_is_xarray(&wdata2->iter)) + if (iov_iter_is_xarray(&wdata2->subreq.io_iter)) /* Check for pages having been redirtied and clean * them. We can do this by walking the xarray. If * it's not an xarray, then it's a DIO and we shouldn't @@ -2505,7 +2505,7 @@ cifs_writev_requeue(struct cifs_io_subrequest *wdata) } while (rest_len > 0); =20 /* Clean up remaining pages from the original wdata */ - if (iov_iter_is_xarray(&wdata->iter)) + if (iov_iter_is_xarray(&wdata->subreq.io_iter)) cifs_pages_write_failed(inode, fpos, rest_len); =20 if (rc !=3D 0 && !is_retryable_error(rc)) @@ -2522,19 +2522,19 @@ cifs_writev_complete(struct work_struct *work) =20 if (wdata->result =3D=3D 0) { spin_lock(&inode->i_lock); - cifs_update_eof(CIFS_I(inode), wdata->offset, wdata->bytes); + cifs_update_eof(CIFS_I(inode), wdata->subreq.start, wdata->subreq.len); spin_unlock(&inode->i_lock); cifs_stats_bytes_written(tlink_tcon(wdata->cfile->tlink), - wdata->bytes); + wdata->subreq.len); } else if (wdata->sync_mode =3D=3D WB_SYNC_ALL && wdata->result =3D=3D -E= AGAIN) return cifs_writev_requeue(wdata); =20 if (wdata->result =3D=3D -EAGAIN) - cifs_pages_write_redirty(inode, wdata->offset, wdata->bytes); + cifs_pages_write_redirty(inode, wdata->subreq.start, wdata->subreq.len); else if (wdata->result < 0) - cifs_pages_write_failed(inode, wdata->offset, wdata->bytes); + cifs_pages_write_failed(inode, wdata->subreq.start, wdata->subreq.len); else - cifs_pages_written_back(inode, wdata->offset, wdata->bytes); + cifs_pages_written_back(inode, wdata->subreq.start, wdata->subreq.len); =20 if (wdata->result !=3D -EAGAIN) mapping_set_error(inode->i_mapping, wdata->result); @@ -2766,7 +2766,7 @@ static ssize_t cifs_write_back_from_locked_folio(stru= ct address_space *mapping, } =20 wdata->sync_mode =3D wbc->sync_mode; - wdata->offset =3D folio_pos(folio); + wdata->subreq.start =3D folio_pos(folio); wdata->pid =3D cfile->pid; wdata->credits =3D credits_on_stack; wdata->cfile =3D cfile; @@ -2801,7 +2801,7 @@ static ssize_t cifs_write_back_from_locked_folio(stru= ct address_space *mapping, len =3D min_t(loff_t, len, max_len); } =20 - wdata->bytes =3D len; + wdata->subreq.len =3D len; =20 /* We now have a contiguous set of dirty pages, each with writeback * set; the first page is still locked at this point, but all the rest @@ -2810,10 +2810,10 @@ static ssize_t cifs_write_back_from_locked_folio(st= ruct address_space *mapping, folio_unlock(folio); =20 if (start < i_size) { - iov_iter_xarray(&wdata->iter, ITER_SOURCE, &mapping->i_pages, + iov_iter_xarray(&wdata->subreq.io_iter, ITER_SOURCE, &mapping->i_pages, start, len); =20 - rc =3D adjust_credits(wdata->server, &wdata->credits, wdata->bytes); + rc =3D adjust_credits(wdata->server, &wdata->credits, wdata->subreq.len); if (rc) goto err_wdata; =20 @@ -3232,7 +3232,7 @@ cifs_uncached_writev_complete(struct work_struct *wor= k) struct cifsInodeInfo *cifsi =3D CIFS_I(inode); =20 spin_lock(&inode->i_lock); - cifs_update_eof(cifsi, wdata->offset, wdata->bytes); + cifs_update_eof(cifsi, wdata->subreq.start, wdata->subreq.len); if (cifsi->netfs.remote_i_size > inode->i_size) i_size_write(inode, cifsi->netfs.remote_i_size); spin_unlock(&inode->i_lock); @@ -3268,19 +3268,19 @@ cifs_resend_wdata(struct cifs_io_subrequest *wdata,= struct list_head *wdata_list * segments */ do { - rc =3D server->ops->wait_mtu_credits(server, wdata->bytes, + rc =3D server->ops->wait_mtu_credits(server, wdata->subreq.len, &wsize, &credits); if (rc) goto fail; =20 - if (wsize < wdata->bytes) { + if (wsize < wdata->subreq.len) { add_credits_and_wake_if(server, &credits, 0); msleep(1000); } - } while (wsize < wdata->bytes); + } while (wsize < wdata->subreq.len); wdata->credits =3D credits; =20 - rc =3D adjust_credits(server, &wdata->credits, wdata->bytes); + rc =3D adjust_credits(server, &wdata->credits, wdata->subreq.len); =20 if (!rc) { if (wdata->cfile->invalidHandle) @@ -3426,19 +3426,19 @@ cifs_write_from_iter(loff_t fpos, size_t len, struc= t iov_iter *from, =20 wdata->uncached =3D true; wdata->sync_mode =3D WB_SYNC_ALL; - wdata->offset =3D (__u64)fpos; + wdata->subreq.start =3D (__u64)fpos; wdata->cfile =3D cifsFileInfo_get(open_file); wdata->server =3D server; wdata->pid =3D pid; - wdata->bytes =3D cur_len; + wdata->subreq.len =3D cur_len; wdata->credits =3D credits_on_stack; - wdata->iter =3D *from; + wdata->subreq.io_iter =3D *from; wdata->ctx =3D ctx; kref_get(&ctx->refcount); =20 - iov_iter_truncate(&wdata->iter, cur_len); + iov_iter_truncate(&wdata->subreq.io_iter, cur_len); =20 - rc =3D adjust_credits(server, &wdata->credits, wdata->bytes); + rc =3D adjust_credits(server, &wdata->credits, wdata->subreq.len); =20 if (!rc) { if (wdata->cfile->invalidHandle) @@ -3500,7 +3500,7 @@ static void collect_uncached_write_data(struct cifs_a= io_ctx *ctx) if (wdata->result) rc =3D wdata->result; else - ctx->total_len +=3D wdata->bytes; + ctx->total_len +=3D wdata->subreq.len; =20 /* resend call if it's a retryable error */ if (rc =3D=3D -EAGAIN) { @@ -3515,10 +3515,10 @@ static void collect_uncached_write_data(struct cifs= _aio_ctx *ctx) wdata, &tmp_list, ctx); else { iov_iter_advance(&tmp_from, - wdata->offset - ctx->pos); + wdata->subreq.start - ctx->pos); =20 - rc =3D cifs_write_from_iter(wdata->offset, - wdata->bytes, &tmp_from, + rc =3D cifs_write_from_iter(wdata->subreq.start, + wdata->subreq.len, &tmp_from, ctx->cfile, cifs_sb, &tmp_list, ctx); =20 @@ -3841,20 +3841,20 @@ static int cifs_resend_rdata(struct cifs_io_subrequ= est *rdata, * segments */ do { - rc =3D server->ops->wait_mtu_credits(server, rdata->bytes, + rc =3D server->ops->wait_mtu_credits(server, rdata->subreq.len, &rsize, &credits); =20 if (rc) goto fail; =20 - if (rsize < rdata->bytes) { + if (rsize < rdata->subreq.len) { add_credits_and_wake_if(server, &credits, 0); msleep(1000); } - } while (rsize < rdata->bytes); + } while (rsize < rdata->subreq.len); rdata->credits =3D credits; =20 - rc =3D adjust_credits(server, &rdata->credits, rdata->bytes); + rc =3D adjust_credits(server, &rdata->credits, rdata->subreq.len); if (!rc) { if (rdata->cfile->invalidHandle) rc =3D -EAGAIN; @@ -3952,17 +3952,17 @@ cifs_send_async_read(loff_t fpos, size_t len, struc= t cifsFileInfo *open_file, =20 rdata->server =3D server; rdata->cfile =3D cifsFileInfo_get(open_file); - rdata->offset =3D fpos; - rdata->bytes =3D cur_len; + rdata->subreq.start =3D fpos; + rdata->subreq.len =3D cur_len; rdata->pid =3D pid; rdata->credits =3D credits_on_stack; rdata->ctx =3D ctx; kref_get(&ctx->refcount); =20 - rdata->iter =3D ctx->iter; - iov_iter_truncate(&rdata->iter, cur_len); + rdata->subreq.io_iter =3D ctx->iter; + iov_iter_truncate(&rdata->subreq.io_iter, cur_len); =20 - rc =3D adjust_credits(server, &rdata->credits, rdata->bytes); + rc =3D adjust_credits(server, &rdata->credits, rdata->subreq.len); =20 if (!rc) { if (rdata->cfile->invalidHandle) @@ -4032,8 +4032,8 @@ collect_uncached_read_data(struct cifs_aio_ctx *ctx) &tmp_list, ctx); } else { rc =3D cifs_send_async_read( - rdata->offset + got_bytes, - rdata->bytes - got_bytes, + rdata->subreq.start + got_bytes, + rdata->subreq.len - got_bytes, rdata->cfile, cifs_sb, &tmp_list, ctx); =20 @@ -4047,7 +4047,7 @@ collect_uncached_read_data(struct cifs_aio_ctx *ctx) rc =3D rdata->result; =20 /* if there was a short read -- discard anything left */ - if (rdata->got_bytes && rdata->got_bytes < rdata->bytes) + if (rdata->got_bytes && rdata->got_bytes < rdata->subreq.len) rc =3D -ENODATA; =20 ctx->total_len +=3D rdata->got_bytes; @@ -4431,16 +4431,16 @@ static void cifs_readahead_complete(struct work_str= uct *work) pgoff_t last; bool good =3D rdata->result =3D=3D 0 || (rdata->result =3D=3D -EAGAIN && = rdata->got_bytes); =20 - XA_STATE(xas, &rdata->mapping->i_pages, rdata->offset / PAGE_SIZE); + XA_STATE(xas, &rdata->mapping->i_pages, rdata->subreq.start / PAGE_SIZE); =20 if (good) cifs_readahead_to_fscache(rdata->mapping->host, - rdata->offset, rdata->bytes); + rdata->subreq.start, rdata->subreq.len); =20 - if (iov_iter_count(&rdata->iter) > 0) - iov_iter_zero(iov_iter_count(&rdata->iter), &rdata->iter); + if (iov_iter_count(&rdata->subreq.io_iter) > 0) + iov_iter_zero(iov_iter_count(&rdata->subreq.io_iter), &rdata->subreq.io_= iter); =20 - last =3D (rdata->offset + rdata->bytes - 1) / PAGE_SIZE; + last =3D (rdata->subreq.start + rdata->subreq.len - 1) / PAGE_SIZE; =20 rcu_read_lock(); xas_for_each(&xas, folio, last) { @@ -4579,8 +4579,8 @@ static void cifs_readahead(struct readahead_control *= ractl) break; } =20 - rdata->offset =3D ra_index * PAGE_SIZE; - rdata->bytes =3D nr_pages * PAGE_SIZE; + rdata->subreq.start =3D ra_index * PAGE_SIZE; + rdata->subreq.len =3D nr_pages * PAGE_SIZE; rdata->cfile =3D cifsFileInfo_get(open_file); rdata->server =3D server; rdata->mapping =3D ractl->mapping; @@ -4594,10 +4594,10 @@ static void cifs_readahead(struct readahead_control= *ractl) ra_pages -=3D nr_pages; ra_index +=3D nr_pages; =20 - iov_iter_xarray(&rdata->iter, ITER_DEST, &rdata->mapping->i_pages, - rdata->offset, rdata->bytes); + iov_iter_xarray(&rdata->subreq.io_iter, ITER_DEST, &rdata->mapping->i_pa= ges, + rdata->subreq.start, rdata->subreq.len); =20 - rc =3D adjust_credits(server, &rdata->credits, rdata->bytes); + rc =3D adjust_credits(server, &rdata->credits, rdata->subreq.len); if (!rc) { if (rdata->cfile->invalidHandle) rc =3D -EAGAIN; @@ -4608,8 +4608,8 @@ static void cifs_readahead(struct readahead_control *= ractl) if (rc) { add_credits_and_wake_if(server, &rdata->credits, 0); cifs_unlock_folios(rdata->mapping, - rdata->offset / PAGE_SIZE, - (rdata->offset + rdata->bytes - 1) / PAGE_SIZE); + rdata->subreq.start / PAGE_SIZE, + (rdata->subreq.start + rdata->subreq.len - 1) / PAGE_SIZE); /* Fallback to the readpage in error/reconnect cases */ cifs_put_readdata(rdata); break; diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c index ebc0f0246126..b27df9e239dd 100644 --- a/fs/smb/client/smb2ops.c +++ b/fs/smb/client/smb2ops.c @@ -4717,7 +4717,7 @@ handle_read_data(struct TCP_Server_Info *server, stru= ct mid_q_entry *mid, =20 /* Copy the data to the output I/O iterator. */ rdata->result =3D cifs_copy_pages_to_iter(pages, pages_len, - cur_off, &rdata->iter); + cur_off, &rdata->subreq.io_iter); if (rdata->result !=3D 0) { if (is_offloaded) mid->mid_state =3D MID_RESPONSE_MALFORMED; @@ -4731,7 +4731,7 @@ handle_read_data(struct TCP_Server_Info *server, stru= ct mid_q_entry *mid, /* read response payload is in buf */ WARN_ONCE(pages && !xa_empty(pages), "read data can be either in buf or in pages"); - length =3D copy_to_iter(buf + data_offset, data_len, &rdata->iter); + length =3D copy_to_iter(buf + data_offset, data_len, &rdata->subreq.io_i= ter); if (length < 0) return length; rdata->got_bytes =3D data_len; diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c index c3259bf07564..a97ea1fe41c1 100644 --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@ -4214,7 +4214,7 @@ smb2_new_read_req(void **buf, unsigned int *total_len, struct smbd_buffer_descriptor_v1 *v1; bool need_invalidate =3D server->dialect =3D=3D SMB30_PROT_ID; =20 - rdata->mr =3D smbd_register_mr(server->smbd_conn, &rdata->iter, + rdata->mr =3D smbd_register_mr(server->smbd_conn, &rdata->subreq.io_iter, true, need_invalidate); if (!rdata->mr) return -EAGAIN; @@ -4275,17 +4275,17 @@ smb2_readv_callback(struct mid_q_entry *mid) .rq_nvec =3D 1 }; =20 if (rdata->got_bytes) { - rqst.rq_iter =3D rdata->iter; - rqst.rq_iter_size =3D iov_iter_count(&rdata->iter); + rqst.rq_iter =3D rdata->subreq.io_iter; + rqst.rq_iter_size =3D iov_iter_count(&rdata->subreq.io_iter); } =20 WARN_ONCE(rdata->server !=3D mid->server, "rdata server %p !=3D mid server %p", rdata->server, mid->server); =20 - cifs_dbg(FYI, "%s: mid=3D%llu state=3D%d result=3D%d bytes=3D%u\n", + cifs_dbg(FYI, "%s: mid=3D%llu state=3D%d result=3D%d bytes=3D%zu\n", __func__, mid->mid, mid->mid_state, rdata->result, - rdata->bytes); + rdata->subreq.len); =20 switch (mid->mid_state) { case MID_RESPONSE_RECEIVED: @@ -4338,13 +4338,13 @@ smb2_readv_callback(struct mid_q_entry *mid) cifs_stats_fail_inc(tcon, SMB2_READ_HE); trace_smb3_read_err(0 /* xid */, rdata->cfile->fid.persistent_fid, - tcon->tid, tcon->ses->Suid, rdata->offset, - rdata->bytes, rdata->result); + tcon->tid, tcon->ses->Suid, rdata->subreq.start, + rdata->subreq.len, rdata->result); } else trace_smb3_read_done(0 /* xid */, rdata->cfile->fid.persistent_fid, tcon->tid, tcon->ses->Suid, - rdata->offset, rdata->got_bytes); + rdata->subreq.start, rdata->got_bytes); =20 queue_work(cifsiod_wq, &rdata->work); release_mid(mid); @@ -4366,16 +4366,16 @@ smb2_async_readv(struct cifs_io_subrequest *rdata) unsigned int total_len; int credit_request; =20 - cifs_dbg(FYI, "%s: offset=3D%llu bytes=3D%u\n", - __func__, rdata->offset, rdata->bytes); + cifs_dbg(FYI, "%s: offset=3D%llu bytes=3D%zu\n", + __func__, rdata->subreq.start, rdata->subreq.len); =20 if (!rdata->server) rdata->server =3D cifs_pick_channel(tcon->ses); =20 io_parms.tcon =3D tlink_tcon(rdata->cfile->tlink); io_parms.server =3D server =3D rdata->server; - io_parms.offset =3D rdata->offset; - io_parms.length =3D rdata->bytes; + io_parms.offset =3D rdata->subreq.start; + io_parms.length =3D rdata->subreq.len; io_parms.persistent_fid =3D rdata->cfile->fid.persistent_fid; io_parms.volatile_fid =3D rdata->cfile->fid.volatile_fid; io_parms.pid =3D rdata->pid; @@ -4394,7 +4394,7 @@ smb2_async_readv(struct cifs_io_subrequest *rdata) shdr =3D (struct smb2_hdr *)buf; =20 if (rdata->credits.value > 0) { - shdr->CreditCharge =3D cpu_to_le16(DIV_ROUND_UP(rdata->bytes, + shdr->CreditCharge =3D cpu_to_le16(DIV_ROUND_UP(rdata->subreq.len, SMB2_MAX_BUFFER_SIZE)); credit_request =3D le16_to_cpu(shdr->CreditCharge) + 8; if (server->credits >=3D server->max_credits) @@ -4404,7 +4404,7 @@ smb2_async_readv(struct cifs_io_subrequest *rdata) min_t(int, server->max_credits - server->credits, credit_request)); =20 - rc =3D adjust_credits(server, &rdata->credits, rdata->bytes); + rc =3D adjust_credits(server, &rdata->credits, rdata->subreq.len); if (rc) goto async_readv_out; =20 @@ -4542,13 +4542,13 @@ smb2_writev_callback(struct mid_q_entry *mid) * client. OS/2 servers are known to set incorrect * CountHigh values. */ - if (written > wdata->bytes) + if (written > wdata->subreq.len) written &=3D 0xFFFF; =20 - if (written < wdata->bytes) + if (written < wdata->subreq.len) wdata->result =3D -ENOSPC; else - wdata->bytes =3D written; + wdata->subreq.len =3D written; break; case MID_REQUEST_SUBMITTED: case MID_RETRY_NEEDED: @@ -4579,8 +4579,8 @@ smb2_writev_callback(struct mid_q_entry *mid) cifs_stats_fail_inc(tcon, SMB2_WRITE_HE); trace_smb3_write_err(0 /* no xid */, wdata->cfile->fid.persistent_fid, - tcon->tid, tcon->ses->Suid, wdata->offset, - wdata->bytes, wdata->result); + tcon->tid, tcon->ses->Suid, wdata->subreq.start, + wdata->subreq.len, wdata->result); if (wdata->result =3D=3D -ENOSPC) pr_warn_once("Out of space writing to %s\n", tcon->tree_name); @@ -4588,7 +4588,7 @@ smb2_writev_callback(struct mid_q_entry *mid) trace_smb3_write_done(0 /* no xid */, wdata->cfile->fid.persistent_fid, tcon->tid, tcon->ses->Suid, - wdata->offset, wdata->bytes); + wdata->subreq.start, wdata->subreq.len); =20 queue_work(cifsiod_wq, &wdata->work); release_mid(mid); @@ -4621,8 +4621,8 @@ smb2_async_writev(struct cifs_io_subrequest *wdata) _io_parms =3D (struct cifs_io_parms) { .tcon =3D tcon, .server =3D server, - .offset =3D wdata->offset, - .length =3D wdata->bytes, + .offset =3D wdata->subreq.start, + .length =3D wdata->subreq.len, .persistent_fid =3D wdata->cfile->fid.persistent_fid, .volatile_fid =3D wdata->cfile->fid.volatile_fid, .pid =3D wdata->pid, @@ -4664,10 +4664,10 @@ smb2_async_writev(struct cifs_io_subrequest *wdata) */ if (smb3_use_rdma_offload(io_parms)) { struct smbd_buffer_descriptor_v1 *v1; - size_t data_size =3D iov_iter_count(&wdata->iter); + size_t data_size =3D iov_iter_count(&wdata->subreq.io_iter); bool need_invalidate =3D server->dialect =3D=3D SMB30_PROT_ID; =20 - wdata->mr =3D smbd_register_mr(server->smbd_conn, &wdata->iter, + wdata->mr =3D smbd_register_mr(server->smbd_conn, &wdata->subreq.io_iter, false, need_invalidate); if (!wdata->mr) { rc =3D -EAGAIN; @@ -4694,7 +4694,7 @@ smb2_async_writev(struct cifs_io_subrequest *wdata) =20 rqst.rq_iov =3D iov; rqst.rq_nvec =3D 1; - rqst.rq_iter =3D wdata->iter; + rqst.rq_iter =3D wdata->subreq.io_iter; rqst.rq_iter_size =3D iov_iter_count(&rqst.rq_iter); #ifdef CONFIG_CIFS_SMB_DIRECT if (wdata->mr) @@ -4712,7 +4712,7 @@ smb2_async_writev(struct cifs_io_subrequest *wdata) #endif =20 if (wdata->credits.value > 0) { - shdr->CreditCharge =3D cpu_to_le16(DIV_ROUND_UP(wdata->bytes, + shdr->CreditCharge =3D cpu_to_le16(DIV_ROUND_UP(wdata->subreq.len, SMB2_MAX_BUFFER_SIZE)); credit_request =3D le16_to_cpu(shdr->CreditCharge) + 8; if (server->credits >=3D server->max_credits) diff --git a/fs/smb/client/transport.c b/fs/smb/client/transport.c index bae758ec621b..3048516573e8 100644 --- a/fs/smb/client/transport.c +++ b/fs/smb/client/transport.c @@ -1692,8 +1692,8 @@ cifs_readv_receive(struct TCP_Server_Info *server, st= ruct mid_q_entry *mid) unsigned int buflen =3D server->pdu_size + HEADER_PREAMBLE_SIZE(server); bool use_rdma_mr =3D false; =20 - cifs_dbg(FYI, "%s: mid=3D%llu offset=3D%llu bytes=3D%u\n", - __func__, mid->mid, rdata->offset, rdata->bytes); + cifs_dbg(FYI, "%s: mid=3D%llu offset=3D%llu bytes=3D%zu\n", + __func__, mid->mid, rdata->subreq.start, rdata->subreq.len); =20 /* * read the rest of READ_RSP header (sans Data array), or whatever we @@ -1798,7 +1798,7 @@ cifs_readv_receive(struct TCP_Server_Info *server, st= ruct mid_q_entry *mid) length =3D data_len; /* An RDMA read is already done. */ else #endif - length =3D cifs_read_iter_from_socket(server, &rdata->iter, + length =3D cifs_read_iter_from_socket(server, &rdata->subreq.io_iter, data_len); if (length > 0) rdata->got_bytes +=3D length;