From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D161C433EF for ; Fri, 17 Jun 2022 08:39:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9830B6B0080; Fri, 17 Jun 2022 04:39:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 90BF06B0085; Fri, 17 Jun 2022 04:39:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 785E76B0087; Fri, 17 Jun 2022 04:39:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 62D436B0080 for ; Fri, 17 Jun 2022 04:39:14 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 3D534163A for ; Fri, 17 Jun 2022 08:39:14 +0000 (UTC) X-FDA: 79587078228.26.8397064 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by imf12.hostedemail.com (Postfix) with ESMTP id E19E8400A1 for ; Fri, 17 Jun 2022 08:39:13 +0000 (UTC) Received: by mail-pl1-f182.google.com with SMTP id d13so3299310plh.13 for ; Fri, 17 Jun 2022 01:39:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=G086Dnit23XcYgqGZXR8d4QAiX5I5zPq+4/SqclxxJs=; b=VdbwQ4cd6v433oanoE0oyHKGpgJ6Sqwso/c30X2vOYB5aA4/iAtfKKyfVWc0dmgiXu CWjpdg0Kc8jVXkJVDW8W21xhw0scR/bhN55J5YUHztOeynl60wnyx6Yav+WWA1iL1NKy BrkUYqeLHVQqTyDE2xNlZuADrrmCANFnZj9WU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=G086Dnit23XcYgqGZXR8d4QAiX5I5zPq+4/SqclxxJs=; b=0PIPVqgwVmlMXvsbBVgX+W9I6h/FL0jDUGM989Qtxz02Z/dovSQXBAli0L1O+AGT/Y 3W6cbucMH6OEAgGSCooKP95fDE+GNEyazf6A69VzVzLoCkrbb+lmG/Xqva7zOrhcDcNT O2zPAjvIULPw7JNsaICbpBkwtFlUdTSF4GHbESHt+apqFWjx5MhC3+fUo9BhjOLz0CZz DlrApPxRaBRSqWPYeoqXAdQvbD8t0rKZyMdfPkwkcAIKbFSynuG7nweuoQq1QtocwMp/ O3VBiZnkVj2+3wLrznlzMwts68jrDRPanPuussm14rWxn+d2JQRBnYey7j+3Z9Ed5dzW KnHQ== X-Gm-Message-State: AJIora/2hxTqBPZ03NSi1/1KzuOog6Hr1+JJ1pgTIPN0lhyYQHx0jNhu 6Rfhr2PtaIMaphPvnPdKjnlR+Q== X-Google-Smtp-Source: AGRyM1tPpQfuwZvZz9Xp+OlNElXn9z7cg7Ee0CHxsdUetFEHC3NVB1yjPycl87pTn/NmxdJo4O59hw== X-Received: by 2002:a17:90b:388c:b0:1e2:f376:b8d with SMTP id mu12-20020a17090b388c00b001e2f3760b8dmr20205301pjb.148.1655455152985; Fri, 17 Jun 2022 01:39:12 -0700 (PDT) Received: from hsinyi-z840.tpe.corp.google.com ([2401:fa00:1:10:a0dc:9427:fea8:f78a]) by smtp.gmail.com with ESMTPSA id d12-20020a62f80c000000b005185407eda5sm3154103pfh.44.2022.06.17.01.39.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jun 2022 01:39:12 -0700 (PDT) From: Hsin-Yi Wang To: Phillip Lougher , Matthew Wilcox , Marek Szyprowski , Andrew Morton Cc: Xiongwei Song , Zheng Liang , Zhang Yi , Hou Tao , Miao Xie , "linux-mm @ kvack . org" , "squashfs-devel @ lists . sourceforge . net" , linux-kernel@vger.kernel.org Subject: [PATCH v7 4/4] squashfs: support reading fragments in readahead call Date: Fri, 17 Jun 2022 16:38:15 +0800 Message-Id: <20220617083810.337573-5-hsinyi@chromium.org> X-Mailer: git-send-email 2.36.1.476.g0c4daa206d-goog In-Reply-To: <20220617083810.337573-1-hsinyi@chromium.org> References: <20220617083810.337573-1-hsinyi@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655455154; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=G086Dnit23XcYgqGZXR8d4QAiX5I5zPq+4/SqclxxJs=; b=5YlqtyKyl4ItaUXx3dnNO3fqkQzyFKagcIA0u7um4FbaOr3dK7KtG5A9P0j3SqrRmHxLIO 64tlcYlshCrUeUufgmzos320RLDbO9K8t+qytCPcley7CRYQzNKgyBFqKgwIsds28SBQ8v P9HgbqC9e4HBOxsrwH6SVm1pCZgS5l4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655455154; a=rsa-sha256; cv=none; b=4uAYWXXiBQVUQFe4cyizxiJ0AXlB9REzaI1RXDOhuVse+2DvijLy9eIuknTqlYRoXsFVvO xBZtRU9s8odE4akL6yPdS9iMxS5Mw++Up7BDq4BIx8EF5PR9X+obEzPl+/tr6e1ddn207k c1EkJon1kYFCgXdAKVqDftV0vQACKKg= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=VdbwQ4cd; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf12.hostedemail.com: domain of hsinyi@chromium.org designates 209.85.214.182 as permitted sender) smtp.mailfrom=hsinyi@chromium.org Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=VdbwQ4cd; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf12.hostedemail.com: domain of hsinyi@chromium.org designates 209.85.214.182 as permitted sender) smtp.mailfrom=hsinyi@chromium.org X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: E19E8400A1 X-Stat-Signature: uwag17mj6pt1dids7jfmsh5qx3fsgze1 X-HE-Tag: 1655455153-124840 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Phillip Lougher This patch adds a function which can be used to read fragments in the readahead call. This function is necessary because filesystems built with the -tailends (or -always-use-fragments) option may have fragments present which cannot be currently handled. Signed-off-by: Phillip Lougher Signed-off-by: Hsin-Yi Wang --- fs/squashfs/file.c | 47 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c index f0c64ee272d5d..98e64fec75b77 100644 --- a/fs/squashfs/file.c +++ b/fs/squashfs/file.c @@ -497,6 +497,41 @@ static int squashfs_read_folio(struct file *file, struct folio *folio) return res; } +static int squashfs_readahead_fragment(struct page **page, + unsigned int pages, unsigned int expected) +{ + struct inode *inode = page[0]->mapping->host; + struct squashfs_cache_entry *buffer = squashfs_get_fragment(inode->i_sb, + squashfs_i(inode)->fragment_block, + squashfs_i(inode)->fragment_size); + struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; + unsigned int n, mask = (1 << (msblk->block_log - PAGE_SHIFT)) - 1; + + if (buffer->error) + goto out; + + expected += squashfs_i(inode)->fragment_offset; + + for (n = 0; n < pages; n++) { + unsigned int base = (page[n]->index & mask) << PAGE_SHIFT; + unsigned int offset = base + squashfs_i(inode)->fragment_offset; + + if (expected > offset) { + unsigned int avail = min_t(unsigned int, expected - + offset, PAGE_SIZE); + + squashfs_fill_page(page[n], buffer, offset, avail); + } + + unlock_page(page[n]); + put_page(page[n]); + } + +out: + squashfs_cache_put(buffer); + return buffer->error; +} + static void squashfs_readahead(struct readahead_control *ractl) { struct inode *inode = ractl->mapping->host; @@ -513,9 +548,6 @@ static void squashfs_readahead(struct readahead_control *ractl) readahead_expand(ractl, start, (len | mask) + 1); - if (file_end == 0) - return; - pages = kmalloc_array(max_pages, sizeof(void *), GFP_KERNEL); if (!pages) return; @@ -541,6 +573,15 @@ static void squashfs_readahead(struct readahead_control *ractl) (i_size_read(inode) & (msblk->block_size - 1)) : msblk->block_size; + if (index == file_end && squashfs_i(inode)->fragment_block != + SQUASHFS_INVALID_BLK) { + res = squashfs_readahead_fragment(pages, nr_pages, + expected); + if (res) + goto skip_pages; + continue; + } + bsize = read_blocklist(inode, index, &block); if (bsize == 0) goto skip_pages; -- 2.36.1.476.g0c4daa206d-goog