All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Chang <mchang@suse.com>
To: Daniel Kiper <dkiper@net-space.pl>
Cc: grub-devel@gnu.org, phcoder@gmail.com
Subject: Re: [PATCH] bufio: fix the next_buf calculation
Date: Wed, 18 Apr 2018 15:28:20 +0800	[thread overview]
Message-ID: <20180418072820.tedbk7224yaec3fn@mazu> (raw)
In-Reply-To: <20180417171134.GD21283@router-fw-old.local.net-space.pl>

On Tue, Apr 17, 2018 at 07:11:34PM +0200, Daniel Kiper wrote:
> CC-ing Vladimir.
> 
> On Mon, Apr 16, 2018 at 06:05:04PM +0800, Michael Chang wrote:
> > The next_buf is the offset to the next cached block rounded to the size of
> > bufio->block_size. However the calculation needs the block_size to be in power
> > of 2 is not always valid. As an example, files with smaller size than
> > block_size will have the block_size leveled to the size of file which can be
> > set arbitrary value.
> >
> > This patch fixes the next_buf calculation to accept any integers.
> >
> > Signed-off-by: Michael Chang <mchang@suse.com>
> > ---
> >  grub-core/io/bufio.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/grub-core/io/bufio.c b/grub-core/io/bufio.c
> > index 22438277d..d0b0f71b6 100644
> > --- a/grub-core/io/bufio.c
> > +++ b/grub-core/io/bufio.c
> > @@ -132,7 +132,7 @@ grub_bufio_read (grub_file_t file, char *buf, grub_size_t len)
> >      return res;
> >
> >    /* Need to read some more.  */
> > -  next_buf = (file->offset + res + len - 1) & ~((grub_off_t) bufio->block_size - 1);
> > +  next_buf = (grub_divmod64 (file->offset + res + len - 1, bufio->block_size, NULL)) * bufio->block_size;
> 
> Should not you fix this in grub_bufio_open()? I think that
> you should look for closest power of 2 in it.

Of course here we can round up or down the bufio->block_size to meet power of
2. The down side of round-down is inefficient for small files as it can't cache
entire file in one go. The round-up will have to allocate (slightly) larger
than needed buffer to hold small files which is not a big deal ...

If you insist, I can work a new patch to round up the block_size in
grub_bufio_open, just let me know.

Thanks,
Michael

> 
> Daniel


  reply	other threads:[~2018-04-18  7:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-16 10:05 [PATCH] bufio: fix the next_buf calculation Michael Chang
2018-04-17 17:11 ` Daniel Kiper
2018-04-18  7:28   ` Michael Chang [this message]
2018-04-18  9:15     ` Daniel Kiper

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=20180418072820.tedbk7224yaec3fn@mazu \
    --to=mchang@suse.com \
    --cc=dkiper@net-space.pl \
    --cc=grub-devel@gnu.org \
    --cc=phcoder@gmail.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.