Message ID | 20181211120826.28852-1-shinichiro.kawasaki@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: Fix null_blk_zoned creation failure with small number of zones | expand |
On 12/11/18 5:08 AM, Shin'ichiro Kawasaki wrote: > null_blk_zoned creation fails if the number of zones specified is equal to or is > smaller than 64 due to a memory allocation failure in blk_alloc_zones(). With > such a small number of zones, the required memory size for all zones descriptors > fits in a single page, and the page order for alloc_pages_node() is zero. Allow > this value in blk_alloc_zones() for the allocation to succeed. Looks good to me, this looks like 4.20 material.
On 2018/12/11 21:08, Shin'ichiro Kawasaki wrote: > null_blk_zoned creation fails if the number of zones specified is equal to or is > smaller than 64 due to a memory allocation failure in blk_alloc_zones(). With > such a small number of zones, the required memory size for all zones descriptors > fits in a single page, and the page order for alloc_pages_node() is zero. Allow > this value in blk_alloc_zones() for the allocation to succeed. > > Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> > --- > block/blk-zoned.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/block/blk-zoned.c b/block/blk-zoned.c > index 13ba2011a306..a327bef07642 100644 > --- a/block/blk-zoned.c > +++ b/block/blk-zoned.c > @@ -378,7 +378,7 @@ static struct blk_zone *blk_alloc_zones(int node, unsigned int *nr_zones) > struct page *page; > int order; > > - for (order = get_order(size); order > 0; order--) { > + for (order = get_order(size); order >= 0; order--) { > page = alloc_pages_node(node, GFP_NOIO | __GFP_ZERO, order); > if (page) { > *nr_zones = min_t(unsigned int, *nr_zones, > Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
On 2018/12/11 22:44, Jens Axboe wrote: > On 12/11/18 5:08 AM, Shin'ichiro Kawasaki wrote: >> null_blk_zoned creation fails if the number of zones specified is equal to or is >> smaller than 64 due to a memory allocation failure in blk_alloc_zones(). With >> such a small number of zones, the required memory size for all zones descriptors >> fits in a single page, and the page order for alloc_pages_node() is zero. Allow >> this value in blk_alloc_zones() for the allocation to succeed. > > Looks good to me, this looks like 4.20 material. Yes, this is a fix for commit bf5054569653 "block: Introduce blk_revalidate_disk_zones()" that was included in 4.20 merge window. Thanks !
On 12/11/18 3:55 PM, Damien Le Moal wrote: > On 2018/12/11 22:44, Jens Axboe wrote: >> On 12/11/18 5:08 AM, Shin'ichiro Kawasaki wrote: >>> null_blk_zoned creation fails if the number of zones specified is equal to or is >>> smaller than 64 due to a memory allocation failure in blk_alloc_zones(). With >>> such a small number of zones, the required memory size for all zones descriptors >>> fits in a single page, and the page order for alloc_pages_node() is zero. Allow >>> this value in blk_alloc_zones() for the allocation to succeed. >> >> Looks good to me, this looks like 4.20 material. > > Yes, this is a fix for commit bf5054569653 "block: Introduce > blk_revalidate_disk_zones()" that was included in 4.20 merge window. If only the patch already had a Fixes tag! Queued up for 4.20.
On 2018/12/12 8:19, Jens Axboe wrote: > On 12/11/18 3:55 PM, Damien Le Moal wrote: >> On 2018/12/11 22:44, Jens Axboe wrote: >>> On 12/11/18 5:08 AM, Shin'ichiro Kawasaki wrote: >>>> null_blk_zoned creation fails if the number of zones specified is equal to or is >>>> smaller than 64 due to a memory allocation failure in blk_alloc_zones(). With >>>> such a small number of zones, the required memory size for all zones descriptors >>>> fits in a single page, and the page order for alloc_pages_node() is zero. Allow >>>> this value in blk_alloc_zones() for the allocation to succeed. >>> >>> Looks good to me, this looks like 4.20 material. >> >> Yes, this is a fix for commit bf5054569653 "block: Introduce >> blk_revalidate_disk_zones()" that was included in 4.20 merge window. > > If only the patch already had a Fixes tag! Yes, sorry about that. I told Shinichiro to not forget adding it. > Queued up for 4.20. Thank you.
diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 13ba2011a306..a327bef07642 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -378,7 +378,7 @@ static struct blk_zone *blk_alloc_zones(int node, unsigned int *nr_zones) struct page *page; int order; - for (order = get_order(size); order > 0; order--) { + for (order = get_order(size); order >= 0; order--) { page = alloc_pages_node(node, GFP_NOIO | __GFP_ZERO, order); if (page) { *nr_zones = min_t(unsigned int, *nr_zones,
null_blk_zoned creation fails if the number of zones specified is equal to or is smaller than 64 due to a memory allocation failure in blk_alloc_zones(). With such a small number of zones, the required memory size for all zones descriptors fits in a single page, and the page order for alloc_pages_node() is zero. Allow this value in blk_alloc_zones() for the allocation to succeed. Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> --- block/blk-zoned.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)