All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <groeck@google.com>
To: Phillip Lougher <phillip@squashfs.org.uk>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Philippe Liard <pliard@google.com>,
	hch@lst.de, adrien+dev@schischi.me,
	Guenter Roeck <groeck@chromium.org>,
	Daniel Rosenberg <drosen@google.com>,
	Nicolas Prochazka <nicolas.prochazka@gmail.com>,
	Tomoatsu Shimada <shimada@walbrix.com>
Subject: Re: [PATCH] squashfs: avoid bio_alloc() failure with 1Mbyte blocks
Date: Fri, 14 Aug 2020 21:30:33 -0700	[thread overview]
Message-ID: <CABXOdTcJDub=ffmwn4_Xn0chxdwwu4jNFrh9o3HVVH1Mzt4iSA@mail.gmail.com> (raw)
In-Reply-To: <20200815035637.15319-1-phillip@squashfs.org.uk>

On Fri, Aug 14, 2020 at 8:57 PM Phillip Lougher <phillip@squashfs.org.uk> wrote:
>
> This is a regression introduced by the "migrate from ll_rw_block usage
> to BIO" patch.
>
> Bio_alloc() is limited to 256 pages (1 Mbyte).   This can cause a
> failure when reading 1 Mbyte block filesystems.  The problem is
> a datablock can be fully (or almost uncompressed), requiring 256
> pages, but, because blocks are not aligned to page boundaries, it
> may require 257 pages to read.
>
> Bio_kmalloc() can handle 1024 pages, and so use this for the
> edge condition.
>
> Reported-by: Nicolas Prochazka <nicolas.prochazka@gmail.com>
> Reported-by: Tomoatsu Shimada <shimada@walbrix.com>
> Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>

Fixes: 93e72b3c612a ("squashfs: migrate from ll_rw_block usage to BIO")
Reviewed-by: Guenter Roeck <groeck@chromium.org>

> ---
>  fs/squashfs/block.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c
> index 76bb1c846845..8a19773b5a0b 100644
> --- a/fs/squashfs/block.c
> +++ b/fs/squashfs/block.c
> @@ -87,7 +87,11 @@ static int squashfs_bio_read(struct super_block *sb, u64 index, int length,
>         int error, i;
>         struct bio *bio;
>
> -       bio = bio_alloc(GFP_NOIO, page_count);
> +       if (page_count <= BIO_MAX_PAGES)
> +               bio = bio_alloc(GFP_NOIO, page_count);
> +       else
> +               bio = bio_kmalloc(GFP_NOIO, page_count);
> +
>         if (!bio)
>                 return -ENOMEM;
>
> --
> 2.20.1
>

  reply	other threads:[~2020-08-15 21:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-15  3:56 [PATCH] squashfs: avoid bio_alloc() failure with 1Mbyte blocks Phillip Lougher
2020-08-15  4:30 ` Guenter Roeck [this message]
2020-08-19  3:13   ` Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CABXOdTcJDub=ffmwn4_Xn0chxdwwu4jNFrh9o3HVVH1Mzt4iSA@mail.gmail.com' \
    --to=groeck@google.com \
    --cc=adrien+dev@schischi.me \
    --cc=akpm@linux-foundation.org \
    --cc=drosen@google.com \
    --cc=groeck@chromium.org \
    --cc=hch@lst.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nicolas.prochazka@gmail.com \
    --cc=phillip@squashfs.org.uk \
    --cc=pliard@google.com \
    --cc=shimada@walbrix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.