Skip to content

Commit 0344752

Browse files
Christoph Hellwiggregkh
authored andcommitted
bdi: add a ->dev_name field to struct backing_dev_info
[ Upstream commit 6bd87ee ] Cache a copy of the name for the life time of the backing_dev_info structure so that we can reference it even after unregistering. Fixes: 68f23b8 ("memcg: fix a crash in wb_workfn when a device disappears") Reported-by: Yufen Yu <yuyufen@huawei.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 25390a3 commit 0344752

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

include/linux/backing-dev-defs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ struct backing_dev_info {
220220
wait_queue_head_t wb_waitq;
221221

222222
struct device *dev;
223+
char dev_name[64];
223224
struct device *owner;
224225

225226
struct timer_list laptop_mode_wb_timer;

mm/backing-dev.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,8 @@ int bdi_register_va(struct backing_dev_info *bdi, const char *fmt, va_list args)
938938
if (bdi->dev) /* The driver needs to use separate queues per device */
939939
return 0;
940940

941-
dev = device_create_vargs(bdi_class, NULL, MKDEV(0, 0), bdi, fmt, args);
941+
vsnprintf(bdi->dev_name, sizeof(bdi->dev_name), fmt, args);
942+
dev = device_create(bdi_class, NULL, MKDEV(0, 0), bdi, bdi->dev_name);
942943
if (IS_ERR(dev))
943944
return PTR_ERR(dev);
944945

@@ -1047,7 +1048,7 @@ const char *bdi_dev_name(struct backing_dev_info *bdi)
10471048
{
10481049
if (!bdi || !bdi->dev)
10491050
return bdi_unknown_name;
1050-
return dev_name(bdi->dev);
1051+
return bdi->dev_name;
10511052
}
10521053
EXPORT_SYMBOL_GPL(bdi_dev_name);
10531054

0 commit comments

Comments
 (0)