Message ID | 3e68598defed010efb864ea55887d88ed0da02cc.1640296433.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | null_blk: Use bitmap_zalloc() when applicable | expand |
On 12/24/21 06:55, Christophe JAILLET wrote: > 'nq->tag_map' is a bitmap. So use bitmap_zalloc() to simplify code and > improve the semantic. > > Also change the corresponding kfree() into bitmap_free() to keep > consistency. > > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> > --- > drivers/block/null_blk/main.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c > index 6be6ccd4a28f..9e058e0aa668 100644 > --- a/drivers/block/null_blk/main.c > +++ b/drivers/block/null_blk/main.c > @@ -1661,7 +1661,7 @@ static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx, > > static void cleanup_queue(struct nullb_queue *nq) > { > - kfree(nq->tag_map); > + bitmap_free(nq->tag_map); > kfree(nq->cmds); > } > > @@ -1790,14 +1790,13 @@ static const struct block_device_operations null_rq_ops = { > static int setup_commands(struct nullb_queue *nq) > { > struct nullb_cmd *cmd; > - int i, tag_size; > + int i; > > nq->cmds = kcalloc(nq->queue_depth, sizeof(*cmd), GFP_KERNEL); > if (!nq->cmds) > return -ENOMEM; > > - tag_size = ALIGN(nq->queue_depth, BITS_PER_LONG) / BITS_PER_LONG; > - nq->tag_map = kcalloc(tag_size, sizeof(unsigned long), GFP_KERNEL); > + nq->tag_map = bitmap_zalloc(nq->queue_depth, GFP_KERNEL); > if (!nq->tag_map) { > kfree(nq->cmds); > return -ENOMEM; Before this patch, tag_size would always be a multiple of BITS_PER_LONG. Using bitmap_zalloc(), that alignment goes away, but I think this is OK. Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
On Thu, Dec 30, 2021 at 11:28:28AM +0900, Damien Le Moal wrote: > > > > - tag_size = ALIGN(nq->queue_depth, BITS_PER_LONG) / BITS_PER_LONG; > > - nq->tag_map = kcalloc(tag_size, sizeof(unsigned long), GFP_KERNEL); > > + nq->tag_map = bitmap_zalloc(nq->queue_depth, GFP_KERNEL); > > if (!nq->tag_map) { > > kfree(nq->cmds); > > return -ENOMEM; > > Before this patch, tag_size would always be a multiple of BITS_PER_LONG. > Using bitmap_zalloc(), that alignment goes away, but I think this is OK. > It's still going to be a multiple of long. Bitmaps are always stored in longs. regards, dan carpenter
On 1/6/22 16:44, Dan Carpenter wrote: > On Thu, Dec 30, 2021 at 11:28:28AM +0900, Damien Le Moal wrote: >>> >>> - tag_size = ALIGN(nq->queue_depth, BITS_PER_LONG) / BITS_PER_LONG; >>> - nq->tag_map = kcalloc(tag_size, sizeof(unsigned long), GFP_KERNEL); >>> + nq->tag_map = bitmap_zalloc(nq->queue_depth, GFP_KERNEL); >>> if (!nq->tag_map) { >>> kfree(nq->cmds); >>> return -ENOMEM; >> >> Before this patch, tag_size would always be a multiple of BITS_PER_LONG. >> Using bitmap_zalloc(), that alignment goes away, but I think this is OK. >> > > It's still going to be a multiple of long. Bitmaps are always stored > in longs. Yes, I understand that. I was referring to tag_size, which was rounded before. But tag_size is only a local variable and not the actual queue depth, which is not rounded. I got confused :) > > regards, > dan carpenter >
diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c index 6be6ccd4a28f..9e058e0aa668 100644 --- a/drivers/block/null_blk/main.c +++ b/drivers/block/null_blk/main.c @@ -1661,7 +1661,7 @@ static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx, static void cleanup_queue(struct nullb_queue *nq) { - kfree(nq->tag_map); + bitmap_free(nq->tag_map); kfree(nq->cmds); } @@ -1790,14 +1790,13 @@ static const struct block_device_operations null_rq_ops = { static int setup_commands(struct nullb_queue *nq) { struct nullb_cmd *cmd; - int i, tag_size; + int i; nq->cmds = kcalloc(nq->queue_depth, sizeof(*cmd), GFP_KERNEL); if (!nq->cmds) return -ENOMEM; - tag_size = ALIGN(nq->queue_depth, BITS_PER_LONG) / BITS_PER_LONG; - nq->tag_map = kcalloc(tag_size, sizeof(unsigned long), GFP_KERNEL); + nq->tag_map = bitmap_zalloc(nq->queue_depth, GFP_KERNEL); if (!nq->tag_map) { kfree(nq->cmds); return -ENOMEM;
'nq->tag_map' is a bitmap. So use bitmap_zalloc() to simplify code and improve the semantic. Also change the corresponding kfree() into bitmap_free() to keep consistency. Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- drivers/block/null_blk/main.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)