From patchwork Thu Feb 4 06:49:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve French X-Patchwork-Id: 1435841 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=pfvG25T+; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4DWThY3pF5z9sX5 for ; Thu, 4 Feb 2021 17:50:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232907AbhBDGuV (ORCPT ); Thu, 4 Feb 2021 01:50:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232796AbhBDGuV (ORCPT ); Thu, 4 Feb 2021 01:50:21 -0500 Received: from mail-lj1-x234.google.com (mail-lj1-x234.google.com [IPv6:2a00:1450:4864:20::234]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E42BDC061573; Wed, 3 Feb 2021 22:49:40 -0800 (PST) Received: by mail-lj1-x234.google.com with SMTP id a17so2132726ljq.2; Wed, 03 Feb 2021 22:49:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=hn55GUfhyq3P6czDbmvqar/cddItmhmrdCEeqddMYkw=; b=pfvG25T+N9DqU/VW0LyV25J+UlhzUnPyOADcTb2WKw/ZH4M4cF7hfUxN5JcxolHk7b OocHSTR038ZMC0kCFaJi1KTFPBaTpKaLwVUI3pxptphmjIcR2HIQW9AxCpwdfm5VyqKx kaYwBr2FhmNhFvaBz47PAc/ZIZMEy+gFTyRkDc9Pt7SmT313P8Z4TEqz2RLqHM+rnaYZ C8bpe/IyfutaaRrNT51kXujB1r40POIvyjtu4OJhsPw5vmOrnwuX36/hJlDORzPOyuef /j8vchmcQqEZDzMW6/xKk+7L+afleiUUfNh3L2wsM1vHpRyQ0iou7pAn6AT0bQBpJoPz 96pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=hn55GUfhyq3P6czDbmvqar/cddItmhmrdCEeqddMYkw=; b=ZCUYlwpwb8kCJitMrOnzkw6Dvm86ISugEgH9sA5+0vhJkDn/88KLgXBFnue9MWSwFr YYIO0dSCD1YOjL9xMYP78/SRYi/12kiOUbrix5XkSWEGcR/OLB070FR8Fcq5WkuHTW63 btNLmw4UxwrZ5ks5kGjUjSGfg3fETuTS5m/MbgWrIB3q5ewf6djQ+kBw9cCYxgn1ymYo SGt2gXfM18B8sBF156K8OCwDWykXqo2O65UEqVQoGQHuHjD/PaZacEAbR8VWJ8WCYiX3 2DNDPm0bdL1GcmyuoNxipKLGkWqC4MfItzuzpjr1cNylryZM/QtAORX6WWRswGtr37Ye 8VAQ== X-Gm-Message-State: AOAM5326A751X72Nmr2dQHAJEwZ0L5NoqMsEsUcoDzzX54bGjNSltO2j XDvuUnjF0/gYpu+NY/dXIjBOVUIaojaCEXncG1N4JRzPoQcRWw== X-Google-Smtp-Source: ABdhPJyhAg6Nk5M4s4pthONsgcqhKhg+bwk2gWQPhGG8wXdyGk4DaUYCdYVPBq3TiQ2NxkLVlvd1lCKT7n7+XEb7S9Y= X-Received: by 2002:a05:651c:548:: with SMTP id q8mr3884690ljp.256.1612421378506; Wed, 03 Feb 2021 22:49:38 -0800 (PST) MIME-Version: 1.0 From: Steve French Date: Thu, 4 Feb 2021 00:49:27 -0600 Message-ID: Subject: [PATCH] cifs: convert readpages_fill_pages to use iter To: CIFS Cc: linux-fsdevel , David Howells Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org (Another patch to make conversion to new netfs interfaces easier) Optimize read_page_from_socket by using an iov_iter Signed-off-by: David Howells Signed-off-by: Steve French --- fs/cifs/cifsglob.h | 1 + fs/cifs/cifsproto.h | 3 +++ fs/cifs/connect.c | 16 ++++++++++++++++ fs/cifs/file.c | 3 +-- 4 files changed, 21 insertions(+), 2 deletions(-) From a4c963803ddf8c17f36913089965f0348e536330 Mon Sep 17 00:00:00 2001 From: David Howells Date: Thu, 4 Feb 2021 00:44:04 -0600 Subject: [PATCH] cifs: convert readpages_fill_pages to use iter Optimize read_page_from_socket by using an iov_iter Signed-off-by: David Howells Signed-off-by: Steve French --- fs/cifs/cifsglob.h | 1 + fs/cifs/cifsproto.h | 3 +++ fs/cifs/connect.c | 16 ++++++++++++++++ fs/cifs/file.c | 3 +-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 50fcb65920e8..73f80cc38316 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -1301,6 +1301,7 @@ struct cifs_readdata { int (*copy_into_pages)(struct TCP_Server_Info *server, struct cifs_readdata *rdata, struct iov_iter *iter); + struct iov_iter iter; struct kvec iov[2]; struct TCP_Server_Info *server; #ifdef CONFIG_CIFS_SMB_DIRECT diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h index 75ce6f742b8d..64eb5c817712 100644 --- a/fs/cifs/cifsproto.h +++ b/fs/cifs/cifsproto.h @@ -239,6 +239,9 @@ extern int cifs_read_page_from_socket(struct TCP_Server_Info *server, unsigned int page_offset, unsigned int to_read); extern int cifs_setup_cifs_sb(struct cifs_sb_info *cifs_sb); +extern int cifs_read_iter_from_socket(struct TCP_Server_Info *server, + struct iov_iter *iter, + unsigned int to_read); extern int cifs_match_super(struct super_block *, void *); extern int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb3_fs_context *ctx); extern void cifs_umount(struct cifs_sb_info *); diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 943f4eba027d..7c8db233fba4 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -585,6 +585,22 @@ cifs_read_page_from_socket(struct TCP_Server_Info *server, struct page *page, return cifs_readv_from_socket(server, &smb_msg); } +int +cifs_read_iter_from_socket(struct TCP_Server_Info *server, struct iov_iter *iter, + unsigned int to_read) +{ + struct msghdr smb_msg; + int ret; + + smb_msg.msg_iter = *iter; + if (smb_msg.msg_iter.count > to_read) + smb_msg.msg_iter.count = to_read; + ret = cifs_readv_from_socket(server, &smb_msg); + if (ret > 0) + iov_iter_advance(iter, ret); + return ret; +} + static bool is_smb_response(struct TCP_Server_Info *server, unsigned char type) { diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 6d001905c8e5..4b8c1ac58f00 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -4261,8 +4261,7 @@ readpages_fill_pages(struct TCP_Server_Info *server, result = n; #endif else - result = cifs_read_page_from_socket( - server, page, page_offset, n); + result = cifs_read_iter_from_socket(server, &rdata->iter, n); if (result < 0) break; -- 2.27.0