Skip to content

Commit ff53cd5

Browse files
t-8chaxboe
authored andcommitted
blk-integrity: register sysfs attributes on struct device
The "integrity" kobject only acted as a holder for static sysfs entries. It also was embedded into struct gendisk without managing it, violating assumptions of the driver core. Instead register the sysfs entries directly onto the struct device. Also drop the now unused member integrity_kobj from struct gendisk. Suggested-by: Christoph Hellwig <[email protected]> Signed-off-by: Thomas Weißschuh <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Martin K. Petersen <[email protected]> Link: https://lore.kernel.org/r/20230309-kobj_release-gendisk_integrity-v3-3-ceccb4493c46@weissschuh.net Signed-off-by: Jens Axboe <[email protected]>
1 parent 76b8c31 commit ff53cd5

File tree

4 files changed

+8
-72
lines changed

4 files changed

+8
-72
lines changed

block/blk-integrity.c

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -212,31 +212,6 @@ bool blk_integrity_merge_bio(struct request_queue *q, struct request *req,
212212
return true;
213213
}
214214

215-
static ssize_t integrity_attr_show(struct kobject *kobj, struct attribute *attr,
216-
char *page)
217-
{
218-
struct gendisk *disk = container_of(kobj, struct gendisk, integrity_kobj);
219-
struct device *dev = disk_to_dev(disk);
220-
struct device_attribute *dev_attr =
221-
container_of(attr, struct device_attribute, attr);
222-
223-
return dev_attr->show(dev, dev_attr, page);
224-
}
225-
226-
static ssize_t integrity_attr_store(struct kobject *kobj,
227-
struct attribute *attr, const char *page,
228-
size_t count)
229-
{
230-
struct gendisk *disk = container_of(kobj, struct gendisk, integrity_kobj);
231-
struct device *dev = disk_to_dev(disk);
232-
struct device_attribute *dev_attr =
233-
container_of(attr, struct device_attribute, attr);
234-
235-
if (!dev_attr->store)
236-
return 0;
237-
return dev_attr->store(dev, dev_attr, page, count);
238-
}
239-
240215
static inline struct blk_integrity *dev_to_bi(struct device *dev)
241216
{
242217
return &dev_to_disk(dev)->queue->integrity;
@@ -345,16 +320,10 @@ static struct attribute *integrity_attrs[] = {
345320
&dev_attr_device_is_integrity_capable.attr,
346321
NULL
347322
};
348-
ATTRIBUTE_GROUPS(integrity);
349323

350-
static const struct sysfs_ops integrity_ops = {
351-
.show = &integrity_attr_show,
352-
.store = &integrity_attr_store,
353-
};
354-
355-
static const struct kobj_type integrity_ktype = {
356-
.default_groups = integrity_groups,
357-
.sysfs_ops = &integrity_ops,
324+
const struct attribute_group blk_integrity_attr_group = {
325+
.name = "integrity",
326+
.attrs = integrity_attrs,
358327
};
359328

360329
static blk_status_t blk_integrity_nop_fn(struct blk_integrity_iter *iter)
@@ -433,21 +402,3 @@ void blk_integrity_unregister(struct gendisk *disk)
433402
memset(bi, 0, sizeof(*bi));
434403
}
435404
EXPORT_SYMBOL(blk_integrity_unregister);
436-
437-
int blk_integrity_add(struct gendisk *disk)
438-
{
439-
int ret;
440-
441-
ret = kobject_init_and_add(&disk->integrity_kobj, &integrity_ktype,
442-
&disk_to_dev(disk)->kobj, "%s", "integrity");
443-
if (!ret)
444-
kobject_uevent(&disk->integrity_kobj, KOBJ_ADD);
445-
return ret;
446-
}
447-
448-
void blk_integrity_del(struct gendisk *disk)
449-
{
450-
kobject_uevent(&disk->integrity_kobj, KOBJ_REMOVE);
451-
kobject_del(&disk->integrity_kobj);
452-
kobject_put(&disk->integrity_kobj);
453-
}

block/blk.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,7 @@ static inline bool integrity_req_gap_front_merge(struct request *req,
214214
bip_next->bip_vec[0].bv_offset);
215215
}
216216

217-
int blk_integrity_add(struct gendisk *disk);
218-
void blk_integrity_del(struct gendisk *);
217+
extern const struct attribute_group blk_integrity_attr_group;
219218
#else /* CONFIG_BLK_DEV_INTEGRITY */
220219
static inline bool blk_integrity_merge_rq(struct request_queue *rq,
221220
struct request *r1, struct request *r2)
@@ -248,13 +247,6 @@ static inline bool bio_integrity_endio(struct bio *bio)
248247
static inline void bio_integrity_free(struct bio *bio)
249248
{
250249
}
251-
static inline int blk_integrity_add(struct gendisk *disk)
252-
{
253-
return 0;
254-
}
255-
static inline void blk_integrity_del(struct gendisk *disk)
256-
{
257-
}
258250
#endif /* CONFIG_BLK_DEV_INTEGRITY */
259251

260252
unsigned long blk_rq_timeout(unsigned long timeout);

block/genhd.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -478,15 +478,11 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
478478
*/
479479
pm_runtime_set_memalloc_noio(ddev, true);
480480

481-
ret = blk_integrity_add(disk);
482-
if (ret)
483-
goto out_del_block_link;
484-
485481
disk->part0->bd_holder_dir =
486482
kobject_create_and_add("holders", &ddev->kobj);
487483
if (!disk->part0->bd_holder_dir) {
488484
ret = -ENOMEM;
489-
goto out_del_integrity;
485+
goto out_del_block_link;
490486
}
491487
disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
492488
if (!disk->slave_dir) {
@@ -549,8 +545,6 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
549545
disk->slave_dir = NULL;
550546
out_put_holder_dir:
551547
kobject_put(disk->part0->bd_holder_dir);
552-
out_del_integrity:
553-
blk_integrity_del(disk);
554548
out_del_block_link:
555549
if (!sysfs_deprecated)
556550
sysfs_remove_link(block_depr, dev_name(ddev));
@@ -613,7 +607,6 @@ void del_gendisk(struct gendisk *disk)
613607
if (WARN_ON_ONCE(!disk_live(disk) && !(disk->flags & GENHD_FL_HIDDEN)))
614608
return;
615609

616-
blk_integrity_del(disk);
617610
disk_del_events(disk);
618611

619612
mutex_lock(&disk->open_mutex);
@@ -1150,6 +1143,9 @@ static const struct attribute_group *disk_attr_groups[] = {
11501143
&disk_attr_group,
11511144
#ifdef CONFIG_BLK_DEV_IO_TRACE
11521145
&blk_trace_attr_group,
1146+
#endif
1147+
#ifdef CONFIG_BLK_DEV_INTEGRITY
1148+
&blk_integrity_attr_group,
11531149
#endif
11541150
NULL
11551151
};

include/linux/blkdev.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,6 @@ struct gendisk {
157157
struct timer_rand_state *random;
158158
atomic_t sync_io; /* RAID */
159159
struct disk_events *ev;
160-
#ifdef CONFIG_BLK_DEV_INTEGRITY
161-
struct kobject integrity_kobj;
162-
#endif /* CONFIG_BLK_DEV_INTEGRITY */
163160

164161
#ifdef CONFIG_BLK_DEV_ZONED
165162
/*

0 commit comments

Comments
 (0)