From: Ming Lei <ming.lei@redhat.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: Jens Axboe <axboe@kernel.dk>,
Christoph Hellwig <hch@infradead.org>,
linux-block@vger.kernel.org
Subject: Re: [PATCH] block: fix splitting segments
Date: Fri, 10 Jan 2020 14:37:44 +0800 [thread overview]
Message-ID: <20200110063744.GA16724@ming.t460p> (raw)
In-Reply-To: <0c25bc64-d249-0b83-1d5d-6f7226293fb6@roeck-us.net>
On Thu, Jan 09, 2020 at 09:10:24PM -0800, Guenter Roeck wrote:
> On 1/9/20 7:00 PM, Ming Lei wrote:
> > On Fri, Jan 10, 2020 at 10:58:01AM +0800, Ming Lei wrote:
> > > On Thu, Jan 09, 2020 at 08:18:04AM -0700, Jens Axboe wrote:
> > > > On 1/9/20 12:16 AM, Christoph Hellwig wrote:
> > > > > On Thu, Jan 09, 2020 at 10:03:41AM +0800, Ming Lei wrote:
> > > > > > It has been addressed in:
> > > > > >
> > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git/commit/?h=block-5.5&id=ecd255974caa45901d0b8fab03626e0a18fbc81a
> > > > >
> > > > > That is probably correct, but still highly suboptimal for most 32-bit
> > > > > architectures where physical addresses are 32 bits wide. To fix that
> > > > > the proper phys_addr_t type should be used.
> > > >
> > > > I'll swap it for phys_addr_t - we used to use dma_address_t or something
> > > > like that, but I missed this type.
> > >
> > > Guenter mentioned that 'page_to_phys(start_page) as well as offset are
> > > sometimes 0'[1].
> > >
> > > If that(zero page physical address) can happen when phys_addr_t is 32bit,
> > > I guess phys_addr_t may not work too.
> > >
> > > Guener, could you test the patch in link[2] again?
> > >
> > >
> > > [1] https://lore.kernel.org/linux-block/20200108023822.GB28075@ming.t460p/T/#m5862216b960454fc41a85204defbb887983bfd75
> > > [2] https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git/commit/?h=block-5.5&id=b6a89c4a9590663f80486662fe9a9c1f4cee31f4
> >
> > Loop Guener in.
> >
>
> The patch at [2] doesn't work.
>
> My understanding is that the page in question is not mapped when
> get_max_segment_size() is called (after all, the operation is the
> result of a page fault). This is why page_to_phys() returns 0.
page_to_phys() supposes to return page's physical address, which
should just depend on this machine's physical address space,
not related with page mapping.
I understand physical address 0 might be valid, such as the 1st
page frame of ram.
>
> You'll either need a local u64 variable, or use some other means
> to handle that situation. Something like
>
> phys_addr_t paddr = page_to_phys(start_page);
>
> if (paddr == 0)
> return queue_max_segment_size(q);
>
> at the beginning of the function might do, though there might
> still be a problem when the page is later assigned and crosses
> a segment boundary (if that is possible).
IMO, zero physical address case is the only corner case not
covered by using 'phys_addr_t'. If phys_addr_t is 32bit, sum of
page_to_phys(start_page) and offset shouldn't be >= 4G.
Thanks,
Ming
next prev parent reply other threads:[~2020-01-10 6:38 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-29 2:32 [PATCH] block: fix splitting segments Ming Lei
2019-12-29 16:14 ` Jens Axboe
2019-12-30 1:15 ` Bart Van Assche
2019-12-30 1:25 ` Ming Lei
2020-01-07 12:47 ` Guenter Roeck
2020-01-07 15:23 ` Ming Lei
2020-01-07 18:11 ` Guenter Roeck
2020-01-07 22:30 ` Ming Lei
2020-01-07 22:32 ` Jens Axboe
2020-01-08 1:59 ` Ming Lei
2020-01-08 2:36 ` Jens Axboe
2020-01-07 23:06 ` Guenter Roeck
2020-01-08 14:02 ` Christoph Hellwig
2020-01-09 2:03 ` Ming Lei
2020-01-09 7:16 ` Christoph Hellwig
2020-01-09 15:18 ` Jens Axboe
2020-01-10 2:58 ` Ming Lei
2020-01-10 3:00 ` Ming Lei
2020-01-10 5:10 ` Guenter Roeck
2020-01-10 6:37 ` Ming Lei [this message]
2020-01-10 7:15 ` Ming Lei
2020-01-10 12:48 ` Guenter Roeck
2020-01-10 12:36 ` Guenter Roeck
2020-01-11 12:57 ` Ming Lei
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=20200110063744.GA16724@ming.t460p \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=hch@infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=linux@roeck-us.net \
/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.