Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216369/?format=api
{ "id": 2216369, "url": "http://patchwork.ozlabs.org/api/patches/2216369/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-cifs-client/patch/20260326104544.509518-23-dhowells@redhat.com/", "project": { "id": 12, "url": "http://patchwork.ozlabs.org/api/projects/12/?format=api", "name": "Linux CIFS Client", "link_name": "linux-cifs-client", "list_id": "linux-cifs.vger.kernel.org", "list_email": "linux-cifs@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260326104544.509518-23-dhowells@redhat.com>", "list_archive_url": null, "date": "2026-03-26T10:45:37", "name": "[22/26] iov_iter: Remove ITER_FOLIOQ", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d3ea76f39a37bcf5fef8e53bbcb1441719102ab0", "submitter": { "id": 59, "url": "http://patchwork.ozlabs.org/api/people/59/?format=api", "name": "David Howells", "email": "dhowells@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-cifs-client/patch/20260326104544.509518-23-dhowells@redhat.com/mbox/", "series": [ { "id": 497565, "url": "http://patchwork.ozlabs.org/api/series/497565/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-cifs-client/list/?series=497565", "date": "2026-03-26T10:45:15", "name": "netfs: Keep track of folios in a segmented bio_vec[] chain", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497565/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2216369/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216369/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-cifs+bounces-10545-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-cifs@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=PfowkrQM;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org;\n envelope-from=linux-cifs+bounces-10545-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com\n header.b=\"PfowkrQM\"", "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=170.10.129.124", "smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=redhat.com", "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=redhat.com" ], "Received": [ "from sin.lore.kernel.org (sin.lore.kernel.org\n [IPv6:2600:3c15:e001:75::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fhLgD0mBNz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 22:11:04 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 6123230FF4C4\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 10:54:49 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 3B43A3F7AA8;\n\tThu, 26 Mar 2026 10:49:29 +0000 (UTC)", "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 04DE53E8C41\n\tfor <linux-cifs@vger.kernel.org>; Thu, 26 Mar 2026 10:49:26 +0000 (UTC)", "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-145-bwxa7MIHOcWmKjsr45PuDQ-1; Thu,\n 26 Mar 2026 06:49:20 -0400", "from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id E677A180047F;\n\tThu, 26 Mar 2026 10:49:17 +0000 (UTC)", "from warthog.procyon.org.com (unknown [10.44.33.121])\n\tby mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 97E5D1800361;\n\tThu, 26 Mar 2026 10:49:11 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774522169; cv=none;\n b=ZW0k2WsFvCGc9VpMN+lB11aGHnyiFmfgooJyoYvfsf2NjkOhODnM//YgByvIF6rcIy0uGpLOHmlvsn0JqiOz3h32IBEJg7usmYZR5AqKBPOmH2kk1IcjStD5MLtNTp9Xn+w0RQA+d4U+gilL2C8kXLDxo4pgc8A7g6WoBWa8IUU=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774522169; c=relaxed/simple;\n\tbh=0h/ucvwbdQ4HuvZye+TLcKW5WsMaII7mlDDanLFe43g=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=adQhbqny74WID/f2+3jhDYs/itaGrWfitKz2yX1hZrLzgupeJjeHEFKpUIHz3I59rMXPxajNRAOhNQ30OS4y4tX1bPBX6hOTrdSa4pCgdMGEbbifAN8Y6x2Hsi8+xtX2JIR+umaOiYEZJa0Aw41tCx/xCQL5ndrPk7JgS81wv34=", "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=redhat.com;\n spf=pass smtp.mailfrom=redhat.com;\n dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com\n header.b=PfowkrQM; arc=none smtp.client-ip=170.10.129.124", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1774522166;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\t to:to:cc:cc:mime-version:mime-version:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=UvlRTZm0obpKkxMoTaD0ISQlMHUM843URYI2Lsaunes=;\n\tb=PfowkrQM1RYpqqoxd+1xFVdxoC/5hYarKt91Q0aMUaFgSo1dXlbTFL1sSUPoxEv+PGjLyS\n\tMfaulRS5nXwN0fnOwKdTiVpW4m7daOIdpy/icf5sB05713Q/FXP570umTa3ISbw/QZSrMQ\n\t8VkbB2AnOaa9+/U44gE8BKP5W7eXt6U=", "X-MC-Unique": "bwxa7MIHOcWmKjsr45PuDQ-1", "X-Mimecast-MFC-AGG-ID": "bwxa7MIHOcWmKjsr45PuDQ_1774522158", "From": "David Howells <dhowells@redhat.com>", "To": "Christian Brauner <christian@brauner.io>,\n\tMatthew Wilcox <willy@infradead.org>,\n\tChristoph Hellwig <hch@infradead.org>", "Cc": "David Howells <dhowells@redhat.com>,\n\tPaulo Alcantara <pc@manguebit.com>,\n\tJens Axboe <axboe@kernel.dk>,\n\tLeon Romanovsky <leon@kernel.org>,\n\tSteve French <sfrench@samba.org>,\n\tChenXiaoSong <chenxiaosong@chenxiaosong.com>,\n\tMarc Dionne <marc.dionne@auristor.com>,\n\tEric Van Hensbergen <ericvh@kernel.org>,\n\tDominique Martinet <asmadeus@codewreck.org>,\n\tIlya Dryomov <idryomov@gmail.com>,\n\tTrond Myklebust <trondmy@kernel.org>,\n\tnetfs@lists.linux.dev,\n\tlinux-afs@lists.infradead.org,\n\tlinux-cifs@vger.kernel.org,\n\tlinux-nfs@vger.kernel.org,\n\tceph-devel@vger.kernel.org,\n\tv9fs@lists.linux.dev,\n\tlinux-erofs@lists.ozlabs.org,\n\tlinux-fsdevel@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tPaulo Alcantara <pc@manguebit.org>", "Subject": "[PATCH 22/26] iov_iter: Remove ITER_FOLIOQ", "Date": "Thu, 26 Mar 2026 10:45:37 +0000", "Message-ID": "<20260326104544.509518-23-dhowells@redhat.com>", "In-Reply-To": "<20260326104544.509518-1-dhowells@redhat.com>", "References": "<20260326104544.509518-1-dhowells@redhat.com>", "Precedence": "bulk", "X-Mailing-List": "linux-cifs@vger.kernel.org", "List-Id": "<linux-cifs.vger.kernel.org>", "List-Subscribe": "<mailto:linux-cifs+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-cifs+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.111" }, "content": "Remove ITER_FOLIOQ as it's no longer used.\n\nSigned-off-by: David Howells <dhowells@redhat.com>\ncc: Paulo Alcantara <pc@manguebit.org>\ncc: Matthew Wilcox <willy@infradead.org>\ncc: Christoph Hellwig <hch@infradead.org>\ncc: Steve French <sfrench@samba.org>\ncc: linux-cifs@vger.kernel.org\ncc: netfs@lists.linux.dev\ncc: linux-fsdevel@vger.kernel.org\n---\n include/linux/iov_iter.h | 65 +---------\n include/linux/uio.h | 12 --\n lib/iov_iter.c | 235 +--------------------------------\n lib/scatterlist.c | 67 +---------\n lib/tests/kunit_iov_iter.c | 257 -------------------------------------\n 5 files changed, 5 insertions(+), 631 deletions(-)", "diff": "diff --git a/include/linux/iov_iter.h b/include/linux/iov_iter.h\nindex 309642b3901f..9f3a4497c5c3 100644\n--- a/include/linux/iov_iter.h\n+++ b/include/linux/iov_iter.h\n@@ -10,7 +10,6 @@\n \n #include <linux/uio.h>\n #include <linux/bvecq.h>\n-#include <linux/folio_queue.h>\n \n typedef size_t (*iov_step_f)(void *iter_base, size_t progress, size_t len,\n \t\t\t void *priv, void *priv2);\n@@ -194,62 +193,6 @@ size_t iterate_bvecq(struct iov_iter *iter, size_t len, void *priv, void *priv2,\n \treturn progress;\n }\n \n-/*\n- * Handle ITER_FOLIOQ.\n- */\n-static __always_inline\n-size_t iterate_folioq(struct iov_iter *iter, size_t len, void *priv, void *priv2,\n-\t\t iov_step_f step)\n-{\n-\tconst struct folio_queue *folioq = iter->folioq;\n-\tunsigned int slot = iter->folioq_slot;\n-\tsize_t progress = 0, skip = iter->iov_offset;\n-\n-\tif (slot == folioq_nr_slots(folioq)) {\n-\t\t/* The iterator may have been extended. */\n-\t\tfolioq = folioq->next;\n-\t\tslot = 0;\n-\t}\n-\n-\tdo {\n-\t\tstruct folio *folio = folioq_folio(folioq, slot);\n-\t\tsize_t part, remain = 0, consumed;\n-\t\tsize_t fsize;\n-\t\tvoid *base;\n-\n-\t\tif (!folio)\n-\t\t\tbreak;\n-\n-\t\tfsize = folioq_folio_size(folioq, slot);\n-\t\tif (skip < fsize) {\n-\t\t\tbase = kmap_local_folio(folio, skip);\n-\t\t\tpart = umin(len, PAGE_SIZE - skip % PAGE_SIZE);\n-\t\t\tremain = step(base, progress, part, priv, priv2);\n-\t\t\tkunmap_local(base);\n-\t\t\tconsumed = part - remain;\n-\t\t\tlen -= consumed;\n-\t\t\tprogress += consumed;\n-\t\t\tskip += consumed;\n-\t\t}\n-\t\tif (skip >= fsize) {\n-\t\t\tskip = 0;\n-\t\t\tslot++;\n-\t\t\tif (slot == folioq_nr_slots(folioq) && folioq->next) {\n-\t\t\t\tfolioq = folioq->next;\n-\t\t\t\tslot = 0;\n-\t\t\t}\n-\t\t}\n-\t\tif (remain)\n-\t\t\tbreak;\n-\t} while (len);\n-\n-\titer->folioq_slot = slot;\n-\titer->folioq = folioq;\n-\titer->iov_offset = skip;\n-\titer->count -= progress;\n-\treturn progress;\n-}\n-\n /*\n * Handle ITER_XARRAY.\n */\n@@ -361,8 +304,6 @@ size_t iterate_and_advance2(struct iov_iter *iter, size_t len, void *priv,\n \t\treturn iterate_kvec(iter, len, priv, priv2, step);\n \tif (iov_iter_is_bvecq(iter))\n \t\treturn iterate_bvecq(iter, len, priv, priv2, step);\n-\tif (iov_iter_is_folioq(iter))\n-\t\treturn iterate_folioq(iter, len, priv, priv2, step);\n \tif (iov_iter_is_xarray(iter))\n \t\treturn iterate_xarray(iter, len, priv, priv2, step);\n \treturn iterate_discard(iter, len, priv, priv2, step);\n@@ -397,8 +338,8 @@ size_t iterate_and_advance(struct iov_iter *iter, size_t len, void *priv,\n * buffer is presented in segments, which for kernel iteration are broken up by\n * physical pages and mapped, with the mapped address being presented.\n *\n- * [!] Note This will only handle BVEC, KVEC, BVECQ, FOLIOQ, XARRAY and\n- * DISCARD-type iterators; it will not handle UBUF or IOVEC-type iterators.\n+ * [!] Note This will only handle BVEC, KVEC, BVECQ, XARRAY and DISCARD-type\n+ * iterators; it will not handle UBUF or IOVEC-type iterators.\n *\n * A step functions, @step, must be provided, one for handling mapped kernel\n * addresses and the other is given user addresses which have the potential to\n@@ -427,8 +368,6 @@ size_t iterate_and_advance_kernel(struct iov_iter *iter, size_t len, void *priv,\n \t\treturn iterate_kvec(iter, len, priv, priv2, step);\n \tif (iov_iter_is_bvecq(iter))\n \t\treturn iterate_bvecq(iter, len, priv, priv2, step);\n-\tif (iov_iter_is_folioq(iter))\n-\t\treturn iterate_folioq(iter, len, priv, priv2, step);\n \tif (iov_iter_is_xarray(iter))\n \t\treturn iterate_xarray(iter, len, priv, priv2, step);\n \treturn iterate_discard(iter, len, priv, priv2, step);\ndiff --git a/include/linux/uio.h b/include/linux/uio.h\nindex aa50d348dfcc..e84a0c4f28c6 100644\n--- a/include/linux/uio.h\n+++ b/include/linux/uio.h\n@@ -11,7 +11,6 @@\n #include <uapi/linux/uio.h>\n \n struct page;\n-struct folio_queue;\n \n typedef unsigned int __bitwise iov_iter_extraction_t;\n \n@@ -26,7 +25,6 @@ enum iter_type {\n \tITER_IOVEC,\n \tITER_BVEC,\n \tITER_KVEC,\n-\tITER_FOLIOQ,\n \tITER_BVECQ,\n \tITER_XARRAY,\n \tITER_DISCARD,\n@@ -69,7 +67,6 @@ struct iov_iter {\n \t\t\t\tconst struct iovec *__iov;\n \t\t\t\tconst struct kvec *kvec;\n \t\t\t\tconst struct bio_vec *bvec;\n-\t\t\t\tconst struct folio_queue *folioq;\n \t\t\t\tconst struct bvecq *bvecq;\n \t\t\t\tstruct xarray *xarray;\n \t\t\t\tvoid __user *ubuf;\n@@ -79,7 +76,6 @@ struct iov_iter {\n \t};\n \tunion {\n \t\tunsigned long nr_segs;\n-\t\tu8 folioq_slot;\n \t\tu16 bvecq_slot;\n \t\tloff_t xarray_start;\n \t};\n@@ -148,11 +144,6 @@ static inline bool iov_iter_is_discard(const struct iov_iter *i)\n \treturn iov_iter_type(i) == ITER_DISCARD;\n }\n \n-static inline bool iov_iter_is_folioq(const struct iov_iter *i)\n-{\n-\treturn iov_iter_type(i) == ITER_FOLIOQ;\n-}\n-\n static inline bool iov_iter_is_bvecq(const struct iov_iter *i)\n {\n \treturn iov_iter_type(i) == ITER_BVECQ;\n@@ -303,9 +294,6 @@ void iov_iter_kvec(struct iov_iter *i, unsigned int direction, const struct kvec\n void iov_iter_bvec(struct iov_iter *i, unsigned int direction, const struct bio_vec *bvec,\n \t\t\tunsigned long nr_segs, size_t count);\n void iov_iter_discard(struct iov_iter *i, unsigned int direction, size_t count);\n-void iov_iter_folio_queue(struct iov_iter *i, unsigned int direction,\n-\t\t\t const struct folio_queue *folioq,\n-\t\t\t unsigned int first_slot, unsigned int offset, size_t count);\n void iov_iter_bvec_queue(struct iov_iter *i, unsigned int direction,\n \t\t\t const struct bvecq *bvecq,\n \t\t\t unsigned int first_slot, unsigned int offset, size_t count);\ndiff --git a/lib/iov_iter.c b/lib/iov_iter.c\nindex 4f091e6d4a22..d203088dbf5a 100644\n--- a/lib/iov_iter.c\n+++ b/lib/iov_iter.c\n@@ -538,39 +538,6 @@ static void iov_iter_iovec_advance(struct iov_iter *i, size_t size)\n \ti->__iov = iov;\n }\n \n-static void iov_iter_folioq_advance(struct iov_iter *i, size_t size)\n-{\n-\tconst struct folio_queue *folioq = i->folioq;\n-\tunsigned int slot = i->folioq_slot;\n-\n-\tif (!i->count)\n-\t\treturn;\n-\ti->count -= size;\n-\n-\tif (slot >= folioq_nr_slots(folioq)) {\n-\t\tfolioq = folioq->next;\n-\t\tslot = 0;\n-\t}\n-\n-\tsize += i->iov_offset; /* From beginning of current segment. */\n-\tdo {\n-\t\tsize_t fsize = folioq_folio_size(folioq, slot);\n-\n-\t\tif (likely(size < fsize))\n-\t\t\tbreak;\n-\t\tsize -= fsize;\n-\t\tslot++;\n-\t\tif (slot >= folioq_nr_slots(folioq) && folioq->next) {\n-\t\t\tfolioq = folioq->next;\n-\t\t\tslot = 0;\n-\t\t}\n-\t} while (size);\n-\n-\ti->iov_offset = size;\n-\ti->folioq_slot = slot;\n-\ti->folioq = folioq;\n-}\n-\n static void iov_iter_bvecq_advance(struct iov_iter *i, size_t by)\n {\n \tconst struct bvecq *bq = i->bvecq;\n@@ -616,8 +583,6 @@ void iov_iter_advance(struct iov_iter *i, size_t size)\n \t\tiov_iter_iovec_advance(i, size);\n \t} else if (iov_iter_is_bvec(i)) {\n \t\tiov_iter_bvec_advance(i, size);\n-\t} else if (iov_iter_is_folioq(i)) {\n-\t\tiov_iter_folioq_advance(i, size);\n \t} else if (iov_iter_is_bvecq(i)) {\n \t\tiov_iter_bvecq_advance(i, size);\n \t} else if (iov_iter_is_discard(i)) {\n@@ -626,32 +591,6 @@ void iov_iter_advance(struct iov_iter *i, size_t size)\n }\n EXPORT_SYMBOL(iov_iter_advance);\n \n-static void iov_iter_folioq_revert(struct iov_iter *i, size_t unroll)\n-{\n-\tconst struct folio_queue *folioq = i->folioq;\n-\tunsigned int slot = i->folioq_slot;\n-\n-\tfor (;;) {\n-\t\tsize_t fsize;\n-\n-\t\tif (slot == 0) {\n-\t\t\tfolioq = folioq->prev;\n-\t\t\tslot = folioq_nr_slots(folioq);\n-\t\t}\n-\t\tslot--;\n-\n-\t\tfsize = folioq_folio_size(folioq, slot);\n-\t\tif (unroll <= fsize) {\n-\t\t\ti->iov_offset = fsize - unroll;\n-\t\t\tbreak;\n-\t\t}\n-\t\tunroll -= fsize;\n-\t}\n-\n-\ti->folioq_slot = slot;\n-\ti->folioq = folioq;\n-}\n-\n static void iov_iter_bvecq_revert(struct iov_iter *i, size_t unroll)\n {\n \tconst struct bvecq *bq = i->bvecq;\n@@ -709,9 +648,6 @@ void iov_iter_revert(struct iov_iter *i, size_t unroll)\n \t\t\t}\n \t\t\tunroll -= n;\n \t\t}\n-\t} else if (iov_iter_is_folioq(i)) {\n-\t\ti->iov_offset = 0;\n-\t\tiov_iter_folioq_revert(i, unroll);\n \t} else if (iov_iter_is_bvecq(i)) {\n \t\ti->iov_offset = 0;\n \t\tiov_iter_bvecq_revert(i, unroll);\n@@ -744,8 +680,6 @@ size_t iov_iter_single_seg_count(const struct iov_iter *i)\n \t}\n \tif (!i->count)\n \t\treturn 0;\n-\tif (unlikely(iov_iter_is_folioq(i)))\n-\t\treturn umin(folioq_folio_size(i->folioq, i->folioq_slot), i->count);\n \tif (unlikely(iov_iter_is_bvecq(i)))\n \t\treturn min(i->count, i->bvecq->bv[i->bvecq_slot].bv_len - i->iov_offset);\n \treturn i->count;\n@@ -784,36 +718,6 @@ void iov_iter_bvec(struct iov_iter *i, unsigned int direction,\n }\n EXPORT_SYMBOL(iov_iter_bvec);\n \n-/**\n- * iov_iter_folio_queue - Initialise an I/O iterator to use the folios in a folio queue\n- * @i: The iterator to initialise.\n- * @direction: The direction of the transfer.\n- * @folioq: The starting point in the folio queue.\n- * @first_slot: The first slot in the folio queue to use\n- * @offset: The offset into the folio in the first slot to start at\n- * @count: The size of the I/O buffer in bytes.\n- *\n- * Set up an I/O iterator to either draw data out of the pages attached to an\n- * inode or to inject data into those pages. The pages *must* be prevented\n- * from evaporation, either by taking a ref on them or locking them by the\n- * caller.\n- */\n-void iov_iter_folio_queue(struct iov_iter *i, unsigned int direction,\n-\t\t\t const struct folio_queue *folioq, unsigned int first_slot,\n-\t\t\t unsigned int offset, size_t count)\n-{\n-\tBUG_ON(direction & ~1);\n-\t*i = (struct iov_iter) {\n-\t\t.iter_type = ITER_FOLIOQ,\n-\t\t.data_source = direction,\n-\t\t.folioq = folioq,\n-\t\t.folioq_slot = first_slot,\n-\t\t.count = count,\n-\t\t.iov_offset = offset,\n-\t};\n-}\n-EXPORT_SYMBOL(iov_iter_folio_queue);\n-\n /**\n * iov_iter_bvec_queue - Initialise an I/O iterator to use a segmented bvec queue\n * @i: The iterator to initialise.\n@@ -982,9 +886,6 @@ unsigned long iov_iter_alignment(const struct iov_iter *i)\n \tif (iov_iter_is_bvec(i))\n \t\treturn iov_iter_alignment_bvec(i);\n \n-\t/* With both xarray and folioq types, we're dealing with whole folios. */\n-\tif (iov_iter_is_folioq(i))\n-\t\treturn i->iov_offset | i->count;\n \tif (iov_iter_is_bvecq(i))\n \t\treturn iov_iter_alignment_bvecq(i);\n \tif (iov_iter_is_xarray(i))\n@@ -1039,65 +940,6 @@ static int want_pages_array(struct page ***res, size_t size,\n \treturn count;\n }\n \n-static ssize_t iter_folioq_get_pages(struct iov_iter *iter,\n-\t\t\t\t struct page ***ppages, size_t maxsize,\n-\t\t\t\t unsigned maxpages, size_t *_start_offset)\n-{\n-\tconst struct folio_queue *folioq = iter->folioq;\n-\tstruct page **pages;\n-\tunsigned int slot = iter->folioq_slot;\n-\tsize_t extracted = 0, count = iter->count, iov_offset = iter->iov_offset;\n-\n-\tif (slot >= folioq_nr_slots(folioq)) {\n-\t\tfolioq = folioq->next;\n-\t\tslot = 0;\n-\t\tif (WARN_ON(iov_offset != 0))\n-\t\t\treturn -EIO;\n-\t}\n-\n-\tmaxpages = want_pages_array(ppages, maxsize, iov_offset & ~PAGE_MASK, maxpages);\n-\tif (!maxpages)\n-\t\treturn -ENOMEM;\n-\t*_start_offset = iov_offset & ~PAGE_MASK;\n-\tpages = *ppages;\n-\n-\tfor (;;) {\n-\t\tstruct folio *folio = folioq_folio(folioq, slot);\n-\t\tsize_t offset = iov_offset, fsize = folioq_folio_size(folioq, slot);\n-\t\tsize_t part = PAGE_SIZE - offset % PAGE_SIZE;\n-\n-\t\tif (offset < fsize) {\n-\t\t\tpart = umin(part, umin(maxsize - extracted, fsize - offset));\n-\t\t\tcount -= part;\n-\t\t\tiov_offset += part;\n-\t\t\textracted += part;\n-\n-\t\t\t*pages = folio_page(folio, offset / PAGE_SIZE);\n-\t\t\tget_page(*pages);\n-\t\t\tpages++;\n-\t\t\tmaxpages--;\n-\t\t}\n-\n-\t\tif (maxpages == 0 || extracted >= maxsize)\n-\t\t\tbreak;\n-\n-\t\tif (iov_offset >= fsize) {\n-\t\t\tiov_offset = 0;\n-\t\t\tslot++;\n-\t\t\tif (slot == folioq_nr_slots(folioq) && folioq->next) {\n-\t\t\t\tfolioq = folioq->next;\n-\t\t\t\tslot = 0;\n-\t\t\t}\n-\t\t}\n-\t}\n-\n-\titer->count = count;\n-\titer->iov_offset = iov_offset;\n-\titer->folioq = folioq;\n-\titer->folioq_slot = slot;\n-\treturn extracted;\n-}\n-\n static ssize_t iter_xarray_populate_pages(struct page **pages, struct xarray *xa,\n \t\t\t\t\t pgoff_t index, unsigned int nr_pages)\n {\n@@ -1249,8 +1091,6 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,\n \t\t}\n \t\treturn maxsize;\n \t}\n-\tif (iov_iter_is_folioq(i))\n-\t\treturn iter_folioq_get_pages(i, pages, maxsize, maxpages, start);\n \tif (iov_iter_is_xarray(i))\n \t\treturn iter_xarray_get_pages(i, pages, maxsize, maxpages, start);\n \tWARN_ON_ONCE(iov_iter_is_bvecq(i));\n@@ -1366,11 +1206,6 @@ int iov_iter_npages(const struct iov_iter *i, int maxpages)\n \t\treturn iov_npages(i, maxpages);\n \tif (iov_iter_is_bvec(i))\n \t\treturn bvec_npages(i, maxpages);\n-\tif (iov_iter_is_folioq(i)) {\n-\t\tunsigned offset = i->iov_offset % PAGE_SIZE;\n-\t\tint npages = DIV_ROUND_UP(offset + i->count, PAGE_SIZE);\n-\t\treturn min(npages, maxpages);\n-\t}\n \tif (iov_iter_is_bvecq(i))\n \t\treturn iov_npages_bvecq(i, maxpages);\n \tif (iov_iter_is_xarray(i)) {\n@@ -1654,68 +1489,6 @@ void iov_iter_restore(struct iov_iter *i, struct iov_iter_state *state)\n \ti->nr_segs = state->nr_segs;\n }\n \n-/*\n- * Extract a list of contiguous pages from an ITER_FOLIOQ iterator. This does\n- * not get references on the pages, nor does it get a pin on them.\n- */\n-static ssize_t iov_iter_extract_folioq_pages(struct iov_iter *i,\n-\t\t\t\t\t struct page ***pages, size_t maxsize,\n-\t\t\t\t\t unsigned int maxpages,\n-\t\t\t\t\t iov_iter_extraction_t extraction_flags,\n-\t\t\t\t\t size_t *offset0)\n-{\n-\tconst struct folio_queue *folioq = i->folioq;\n-\tstruct page **p;\n-\tunsigned int nr = 0;\n-\tsize_t extracted = 0, offset, slot = i->folioq_slot;\n-\n-\tif (slot >= folioq_nr_slots(folioq)) {\n-\t\tfolioq = folioq->next;\n-\t\tslot = 0;\n-\t\tif (WARN_ON(i->iov_offset != 0))\n-\t\t\treturn -EIO;\n-\t}\n-\n-\toffset = i->iov_offset & ~PAGE_MASK;\n-\t*offset0 = offset;\n-\n-\tmaxpages = want_pages_array(pages, maxsize, offset, maxpages);\n-\tif (!maxpages)\n-\t\treturn -ENOMEM;\n-\tp = *pages;\n-\n-\tfor (;;) {\n-\t\tstruct folio *folio = folioq_folio(folioq, slot);\n-\t\tsize_t offset = i->iov_offset, fsize = folioq_folio_size(folioq, slot);\n-\t\tsize_t part = PAGE_SIZE - offset % PAGE_SIZE;\n-\n-\t\tif (offset < fsize) {\n-\t\t\tpart = umin(part, umin(maxsize - extracted, fsize - offset));\n-\t\t\ti->count -= part;\n-\t\t\ti->iov_offset += part;\n-\t\t\textracted += part;\n-\n-\t\t\tp[nr++] = folio_page(folio, offset / PAGE_SIZE);\n-\t\t}\n-\n-\t\tif (nr >= maxpages || extracted >= maxsize)\n-\t\t\tbreak;\n-\n-\t\tif (i->iov_offset >= fsize) {\n-\t\t\ti->iov_offset = 0;\n-\t\t\tslot++;\n-\t\t\tif (slot == folioq_nr_slots(folioq) && folioq->next) {\n-\t\t\t\tfolioq = folioq->next;\n-\t\t\t\tslot = 0;\n-\t\t\t}\n-\t\t}\n-\t}\n-\n-\ti->folioq = folioq;\n-\ti->folioq_slot = slot;\n-\treturn extracted;\n-}\n-\n /*\n * Extract a list of virtually contiguous pages from an ITER_BVECQ iterator.\n * This does not get references on the pages, nor does it get a pin on them.\n@@ -2078,8 +1851,8 @@ static ssize_t iov_iter_extract_user_pages(struct iov_iter *i,\n * added to the pages, but refs will not be taken.\n * iov_iter_extract_will_pin() will return true.\n *\n- * (*) If the iterator is ITER_KVEC, ITER_BVEC, ITER_FOLIOQ or ITER_XARRAY, the\n- * pages are merely listed; no extra refs or pins are obtained.\n+ * (*) If the iterator is ITER_KVEC, ITER_BVEC, ITER_XARRAY, the pages are\n+ * merely listed; no extra refs or pins are obtained.\n * iov_iter_extract_will_pin() will return 0.\n *\n * Note also:\n@@ -2114,10 +1887,6 @@ ssize_t iov_iter_extract_pages(struct iov_iter *i,\n \t\treturn iov_iter_extract_bvec_pages(i, pages, maxsize,\n \t\t\t\t\t\t maxpages, extraction_flags,\n \t\t\t\t\t\t offset0);\n-\tif (iov_iter_is_folioq(i))\n-\t\treturn iov_iter_extract_folioq_pages(i, pages, maxsize,\n-\t\t\t\t\t\t maxpages, extraction_flags,\n-\t\t\t\t\t\t offset0);\n \tif (iov_iter_is_bvecq(i))\n \t\treturn iov_iter_extract_bvecq_pages(i, pages, maxsize,\n \t\t\t\t\t\t maxpages, extraction_flags,\ndiff --git a/lib/scatterlist.c b/lib/scatterlist.c\nindex 93a3d194a914..25f64272839e 100644\n--- a/lib/scatterlist.c\n+++ b/lib/scatterlist.c\n@@ -12,7 +12,6 @@\n #include <linux/bvec.h>\n #include <linux/bvecq.h>\n #include <linux/uio.h>\n-#include <linux/folio_queue.h>\n \n /**\n * sg_nents - return total count of entries in scatterlist\n@@ -1268,67 +1267,6 @@ static ssize_t extract_kvec_to_sg(struct iov_iter *iter,\n \treturn ret;\n }\n \n-/*\n- * Extract up to sg_max folios from an FOLIOQ-type iterator and add them to\n- * the scatterlist. The pages are not pinned.\n- */\n-static ssize_t extract_folioq_to_sg(struct iov_iter *iter,\n-\t\t\t\t ssize_t maxsize,\n-\t\t\t\t struct sg_table *sgtable,\n-\t\t\t\t unsigned int sg_max,\n-\t\t\t\t iov_iter_extraction_t extraction_flags)\n-{\n-\tconst struct folio_queue *folioq = iter->folioq;\n-\tstruct scatterlist *sg = sgtable->sgl + sgtable->nents;\n-\tunsigned int slot = iter->folioq_slot;\n-\tssize_t ret = 0;\n-\tsize_t offset = iter->iov_offset;\n-\n-\tBUG_ON(!folioq);\n-\n-\tif (slot >= folioq_nr_slots(folioq)) {\n-\t\tfolioq = folioq->next;\n-\t\tif (WARN_ON_ONCE(!folioq))\n-\t\t\treturn 0;\n-\t\tslot = 0;\n-\t}\n-\n-\tdo {\n-\t\tstruct folio *folio = folioq_folio(folioq, slot);\n-\t\tsize_t fsize = folioq_folio_size(folioq, slot);\n-\n-\t\tif (offset < fsize) {\n-\t\t\tsize_t part = umin(maxsize - ret, fsize - offset);\n-\n-\t\t\tsg_set_page(sg, folio_page(folio, 0), part, offset);\n-\t\t\tsgtable->nents++;\n-\t\t\tsg++;\n-\t\t\tsg_max--;\n-\t\t\toffset += part;\n-\t\t\tret += part;\n-\t\t}\n-\n-\t\tif (offset >= fsize) {\n-\t\t\toffset = 0;\n-\t\t\tslot++;\n-\t\t\tif (slot >= folioq_nr_slots(folioq)) {\n-\t\t\t\tif (!folioq->next) {\n-\t\t\t\t\tWARN_ON_ONCE(ret < iter->count);\n-\t\t\t\t\tbreak;\n-\t\t\t\t}\n-\t\t\t\tfolioq = folioq->next;\n-\t\t\t\tslot = 0;\n-\t\t\t}\n-\t\t}\n-\t} while (sg_max > 0 && ret < maxsize);\n-\n-\titer->folioq = folioq;\n-\titer->folioq_slot = slot;\n-\titer->iov_offset = offset;\n-\titer->count -= ret;\n-\treturn ret;\n-}\n-\n /*\n * Extract up to sg_max folios from an BVECQ-type iterator and add them to\n * the scatterlist. The pages are not pinned.\n@@ -1453,7 +1391,7 @@ static ssize_t extract_xarray_to_sg(struct iov_iter *iter,\n * addition of @sg_max elements.\n *\n * The pages referred to by UBUF- and IOVEC-type iterators are extracted and\n- * pinned; BVEC-, KVEC-, FOLIOQ- and XARRAY-type are extracted but aren't\n+ * pinned; BVEC-, KVEC-, BVECQ- and XARRAY-type are extracted but aren't\n * pinned; DISCARD-type is not supported.\n *\n * No end mark is placed on the scatterlist; that's left to the caller.\n@@ -1486,9 +1424,6 @@ ssize_t extract_iter_to_sg(struct iov_iter *iter, size_t maxsize,\n \tcase ITER_KVEC:\n \t\treturn extract_kvec_to_sg(iter, maxsize, sgtable, sg_max,\n \t\t\t\t\t extraction_flags);\n-\tcase ITER_FOLIOQ:\n-\t\treturn extract_folioq_to_sg(iter, maxsize, sgtable, sg_max,\n-\t\t\t\t\t extraction_flags);\n \tcase ITER_BVECQ:\n \t\treturn extract_bvecq_to_sg(iter, maxsize, sgtable, sg_max,\n \t\t\t\t\t extraction_flags);\ndiff --git a/lib/tests/kunit_iov_iter.c b/lib/tests/kunit_iov_iter.c\nindex ff0621636ff1..7011f0ff7396 100644\n--- a/lib/tests/kunit_iov_iter.c\n+++ b/lib/tests/kunit_iov_iter.c\n@@ -11,9 +11,7 @@\n #include <linux/vmalloc.h>\n #include <linux/mm.h>\n #include <linux/uio.h>\n-#include <linux/bvec.h>\n #include <linux/bvecq.h>\n-#include <linux/folio_queue.h>\n #include <kunit/test.h>\n \n MODULE_DESCRIPTION(\"iov_iter testing\");\n@@ -364,179 +362,6 @@ static void __init iov_kunit_copy_from_bvec(struct kunit *test)\n \tKUNIT_SUCCEED(test);\n }\n \n-static void iov_kunit_destroy_folioq(void *data)\n-{\n-\tstruct folio_queue *folioq, *next;\n-\n-\tfor (folioq = data; folioq; folioq = next) {\n-\t\tnext = folioq->next;\n-\t\tfor (int i = 0; i < folioq_nr_slots(folioq); i++)\n-\t\t\tif (folioq_folio(folioq, i))\n-\t\t\t\tfolio_put(folioq_folio(folioq, i));\n-\t\tkfree(folioq);\n-\t}\n-}\n-\n-static void __init iov_kunit_load_folioq(struct kunit *test,\n-\t\t\t\t\tstruct iov_iter *iter, int dir,\n-\t\t\t\t\tstruct folio_queue *folioq,\n-\t\t\t\t\tstruct page **pages, size_t npages)\n-{\n-\tstruct folio_queue *p = folioq;\n-\tsize_t size = 0;\n-\tint i;\n-\n-\tfor (i = 0; i < npages; i++) {\n-\t\tif (folioq_full(p)) {\n-\t\t\tp->next = kzalloc_obj(struct folio_queue);\n-\t\t\tKUNIT_ASSERT_NOT_ERR_OR_NULL(test, p->next);\n-\t\t\tfolioq_init(p->next, 0);\n-\t\t\tp->next->prev = p;\n-\t\t\tp = p->next;\n-\t\t}\n-\t\tfolioq_append(p, page_folio(pages[i]));\n-\t\tsize += PAGE_SIZE;\n-\t}\n-\tiov_iter_folio_queue(iter, dir, folioq, 0, 0, size);\n-}\n-\n-static struct folio_queue *iov_kunit_create_folioq(struct kunit *test)\n-{\n-\tstruct folio_queue *folioq;\n-\n-\tfolioq = kzalloc_obj(struct folio_queue);\n-\tKUNIT_ASSERT_NOT_ERR_OR_NULL(test, folioq);\n-\tkunit_add_action_or_reset(test, iov_kunit_destroy_folioq, folioq);\n-\tfolioq_init(folioq, 0);\n-\treturn folioq;\n-}\n-\n-/*\n- * Test copying to a ITER_FOLIOQ-type iterator.\n- */\n-static void __init iov_kunit_copy_to_folioq(struct kunit *test)\n-{\n-\tconst struct kvec_test_range *pr;\n-\tstruct iov_iter iter;\n-\tstruct folio_queue *folioq;\n-\tstruct page **spages, **bpages;\n-\tu8 *scratch, *buffer;\n-\tsize_t bufsize, npages, size, copied;\n-\tint i, patt;\n-\n-\tbufsize = 0x100000;\n-\tnpages = bufsize / PAGE_SIZE;\n-\n-\tfolioq = iov_kunit_create_folioq(test);\n-\n-\tscratch = iov_kunit_create_buffer(test, &spages, npages);\n-\tfor (i = 0; i < bufsize; i++)\n-\t\tscratch[i] = pattern(i);\n-\n-\tbuffer = iov_kunit_create_buffer(test, &bpages, npages);\n-\tmemset(buffer, 0, bufsize);\n-\n-\tiov_kunit_load_folioq(test, &iter, READ, folioq, bpages, npages);\n-\n-\ti = 0;\n-\tfor (pr = kvec_test_ranges; pr->from >= 0; pr++) {\n-\t\tsize = pr->to - pr->from;\n-\t\tKUNIT_ASSERT_LE(test, pr->to, bufsize);\n-\n-\t\tiov_iter_folio_queue(&iter, READ, folioq, 0, 0, pr->to);\n-\t\tiov_iter_advance(&iter, pr->from);\n-\t\tcopied = copy_to_iter(scratch + i, size, &iter);\n-\n-\t\tKUNIT_EXPECT_EQ(test, copied, size);\n-\t\tKUNIT_EXPECT_EQ(test, iter.count, 0);\n-\t\tKUNIT_EXPECT_EQ(test, iter.iov_offset, pr->to % PAGE_SIZE);\n-\t\ti += size;\n-\t\tif (test->status == KUNIT_FAILURE)\n-\t\t\tgoto stop;\n-\t}\n-\n-\t/* Build the expected image in the scratch buffer. */\n-\tpatt = 0;\n-\tmemset(scratch, 0, bufsize);\n-\tfor (pr = kvec_test_ranges; pr->from >= 0; pr++)\n-\t\tfor (i = pr->from; i < pr->to; i++)\n-\t\t\tscratch[i] = pattern(patt++);\n-\n-\t/* Compare the images */\n-\tfor (i = 0; i < bufsize; i++) {\n-\t\tKUNIT_EXPECT_EQ_MSG(test, buffer[i], scratch[i], \"at i=%x\", i);\n-\t\tif (buffer[i] != scratch[i])\n-\t\t\treturn;\n-\t}\n-\n-stop:\n-\tKUNIT_SUCCEED(test);\n-}\n-\n-/*\n- * Test copying from a ITER_FOLIOQ-type iterator.\n- */\n-static void __init iov_kunit_copy_from_folioq(struct kunit *test)\n-{\n-\tconst struct kvec_test_range *pr;\n-\tstruct iov_iter iter;\n-\tstruct folio_queue *folioq;\n-\tstruct page **spages, **bpages;\n-\tu8 *scratch, *buffer;\n-\tsize_t bufsize, npages, size, copied;\n-\tint i, j;\n-\n-\tbufsize = 0x100000;\n-\tnpages = bufsize / PAGE_SIZE;\n-\n-\tfolioq = iov_kunit_create_folioq(test);\n-\n-\tbuffer = iov_kunit_create_buffer(test, &bpages, npages);\n-\tfor (i = 0; i < bufsize; i++)\n-\t\tbuffer[i] = pattern(i);\n-\n-\tscratch = iov_kunit_create_buffer(test, &spages, npages);\n-\tmemset(scratch, 0, bufsize);\n-\n-\tiov_kunit_load_folioq(test, &iter, READ, folioq, bpages, npages);\n-\n-\ti = 0;\n-\tfor (pr = kvec_test_ranges; pr->from >= 0; pr++) {\n-\t\tsize = pr->to - pr->from;\n-\t\tKUNIT_ASSERT_LE(test, pr->to, bufsize);\n-\n-\t\tiov_iter_folio_queue(&iter, WRITE, folioq, 0, 0, pr->to);\n-\t\tiov_iter_advance(&iter, pr->from);\n-\t\tcopied = copy_from_iter(scratch + i, size, &iter);\n-\n-\t\tKUNIT_EXPECT_EQ(test, copied, size);\n-\t\tKUNIT_EXPECT_EQ(test, iter.count, 0);\n-\t\tKUNIT_EXPECT_EQ(test, iter.iov_offset, pr->to % PAGE_SIZE);\n-\t\ti += size;\n-\t}\n-\n-\t/* Build the expected image in the main buffer. */\n-\ti = 0;\n-\tmemset(buffer, 0, bufsize);\n-\tfor (pr = kvec_test_ranges; pr->from >= 0; pr++) {\n-\t\tfor (j = pr->from; j < pr->to; j++) {\n-\t\t\tbuffer[i++] = pattern(j);\n-\t\t\tif (i >= bufsize)\n-\t\t\t\tgoto stop;\n-\t\t}\n-\t}\n-stop:\n-\n-\t/* Compare the images */\n-\tfor (i = 0; i < bufsize; i++) {\n-\t\tKUNIT_EXPECT_EQ_MSG(test, scratch[i], buffer[i], \"at i=%x\", i);\n-\t\tif (scratch[i] != buffer[i])\n-\t\t\treturn;\n-\t}\n-\n-\tKUNIT_SUCCEED(test);\n-}\n-\n static void iov_kunit_destroy_bvecq(void *data)\n {\n \tstruct bvecq *bq, *next;\n@@ -1029,85 +854,6 @@ static void __init iov_kunit_extract_pages_bvec(struct kunit *test)\n \tKUNIT_SUCCEED(test);\n }\n \n-/*\n- * Test the extraction of ITER_FOLIOQ-type iterators.\n- */\n-static void __init iov_kunit_extract_pages_folioq(struct kunit *test)\n-{\n-\tconst struct kvec_test_range *pr;\n-\tstruct folio_queue *folioq;\n-\tstruct iov_iter iter;\n-\tstruct page **bpages, *pagelist[8], **pages = pagelist;\n-\tssize_t len;\n-\tsize_t bufsize, size = 0, npages;\n-\tint i, from;\n-\n-\tbufsize = 0x100000;\n-\tnpages = bufsize / PAGE_SIZE;\n-\n-\tfolioq = iov_kunit_create_folioq(test);\n-\n-\tiov_kunit_create_buffer(test, &bpages, npages);\n-\tiov_kunit_load_folioq(test, &iter, READ, folioq, bpages, npages);\n-\n-\tfor (pr = kvec_test_ranges; pr->from >= 0; pr++) {\n-\t\tfrom = pr->from;\n-\t\tsize = pr->to - from;\n-\t\tKUNIT_ASSERT_LE(test, pr->to, bufsize);\n-\n-\t\tiov_iter_folio_queue(&iter, WRITE, folioq, 0, 0, pr->to);\n-\t\tiov_iter_advance(&iter, from);\n-\n-\t\tdo {\n-\t\t\tsize_t offset0 = LONG_MAX;\n-\n-\t\t\tfor (i = 0; i < ARRAY_SIZE(pagelist); i++)\n-\t\t\t\tpagelist[i] = (void *)(unsigned long)0xaa55aa55aa55aa55ULL;\n-\n-\t\t\tlen = iov_iter_extract_pages(&iter, &pages, 100 * 1024,\n-\t\t\t\t\t\t ARRAY_SIZE(pagelist), 0, &offset0);\n-\t\t\tKUNIT_EXPECT_GE(test, len, 0);\n-\t\t\tif (len < 0)\n-\t\t\t\tbreak;\n-\t\t\tKUNIT_EXPECT_LE(test, len, size);\n-\t\t\tKUNIT_EXPECT_EQ(test, iter.count, size - len);\n-\t\t\tif (len == 0)\n-\t\t\t\tbreak;\n-\t\t\tsize -= len;\n-\t\t\tKUNIT_EXPECT_GE(test, (ssize_t)offset0, 0);\n-\t\t\tKUNIT_EXPECT_LT(test, offset0, PAGE_SIZE);\n-\n-\t\t\tfor (i = 0; i < ARRAY_SIZE(pagelist); i++) {\n-\t\t\t\tstruct page *p;\n-\t\t\t\tssize_t part = min_t(ssize_t, len, PAGE_SIZE - offset0);\n-\t\t\t\tint ix;\n-\n-\t\t\t\tKUNIT_ASSERT_GE(test, part, 0);\n-\t\t\t\tix = from / PAGE_SIZE;\n-\t\t\t\tKUNIT_ASSERT_LT(test, ix, npages);\n-\t\t\t\tp = bpages[ix];\n-\t\t\t\tKUNIT_EXPECT_PTR_EQ(test, pagelist[i], p);\n-\t\t\t\tKUNIT_EXPECT_EQ(test, offset0, from % PAGE_SIZE);\n-\t\t\t\tfrom += part;\n-\t\t\t\tlen -= part;\n-\t\t\t\tKUNIT_ASSERT_GE(test, len, 0);\n-\t\t\t\tif (len == 0)\n-\t\t\t\t\tbreak;\n-\t\t\t\toffset0 = 0;\n-\t\t\t}\n-\n-\t\t\tif (test->status == KUNIT_FAILURE)\n-\t\t\t\tgoto stop;\n-\t\t} while (iov_iter_count(&iter) > 0);\n-\n-\t\tKUNIT_EXPECT_EQ(test, size, 0);\n-\t\tKUNIT_EXPECT_EQ(test, iter.count, 0);\n-\t}\n-\n-stop:\n-\tKUNIT_SUCCEED(test);\n-}\n-\n /*\n * Test the extraction of ITER_XARRAY-type iterators.\n */\n@@ -1192,15 +938,12 @@ static struct kunit_case __refdata iov_kunit_cases[] = {\n \tKUNIT_CASE(iov_kunit_copy_from_kvec),\n \tKUNIT_CASE(iov_kunit_copy_to_bvec),\n \tKUNIT_CASE(iov_kunit_copy_from_bvec),\n-\tKUNIT_CASE(iov_kunit_copy_to_folioq),\n-\tKUNIT_CASE(iov_kunit_copy_from_folioq),\n \tKUNIT_CASE(iov_kunit_copy_to_bvecq),\n \tKUNIT_CASE(iov_kunit_copy_from_bvecq),\n \tKUNIT_CASE(iov_kunit_copy_to_xarray),\n \tKUNIT_CASE(iov_kunit_copy_from_xarray),\n \tKUNIT_CASE(iov_kunit_extract_pages_kvec),\n \tKUNIT_CASE(iov_kunit_extract_pages_bvec),\n-\tKUNIT_CASE(iov_kunit_extract_pages_folioq),\n \tKUNIT_CASE(iov_kunit_extract_pages_xarray),\n \t{}\n };\n", "prefixes": [ "22/26" ] }