Skip to content

Commit 76b8c31

Browse files
t-8chaxboe
authored andcommitted
blk-integrity: convert to struct device_attribute
An upcoming patch will register the integrity attributes directly with the struct device kobject. For this the attributes have to be implemented in terms of struct device_attribute. 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-2-ceccb4493c46@weissschuh.net Signed-off-by: Jens Axboe <[email protected]>
1 parent 3315e16 commit 76b8c31

File tree

1 file changed

+62
-65
lines changed

1 file changed

+62
-65
lines changed

block/blk-integrity.c

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

215-
struct integrity_sysfs_entry {
216-
struct attribute attr;
217-
ssize_t (*show)(struct blk_integrity *, char *);
218-
ssize_t (*store)(struct blk_integrity *, const char *, size_t);
219-
};
220-
221215
static ssize_t integrity_attr_show(struct kobject *kobj, struct attribute *attr,
222216
char *page)
223217
{
224218
struct gendisk *disk = container_of(kobj, struct gendisk, integrity_kobj);
225-
struct blk_integrity *bi = &disk->queue->integrity;
226-
struct integrity_sysfs_entry *entry =
227-
container_of(attr, struct integrity_sysfs_entry, attr);
219+
struct device *dev = disk_to_dev(disk);
220+
struct device_attribute *dev_attr =
221+
container_of(attr, struct device_attribute, attr);
228222

229-
return entry->show(bi, page);
223+
return dev_attr->show(dev, dev_attr, page);
230224
}
231225

232226
static ssize_t integrity_attr_store(struct kobject *kobj,
233227
struct attribute *attr, const char *page,
234228
size_t count)
235229
{
236230
struct gendisk *disk = container_of(kobj, struct gendisk, integrity_kobj);
237-
struct blk_integrity *bi = &disk->queue->integrity;
238-
struct integrity_sysfs_entry *entry =
239-
container_of(attr, struct integrity_sysfs_entry, attr);
240-
ssize_t ret = 0;
231+
struct device *dev = disk_to_dev(disk);
232+
struct device_attribute *dev_attr =
233+
container_of(attr, struct device_attribute, attr);
241234

242-
if (entry->store)
243-
ret = entry->store(bi, page, count);
235+
if (!dev_attr->store)
236+
return 0;
237+
return dev_attr->store(dev, dev_attr, page, count);
238+
}
244239

245-
return ret;
240+
static inline struct blk_integrity *dev_to_bi(struct device *dev)
241+
{
242+
return &dev_to_disk(dev)->queue->integrity;
246243
}
247244

248-
static ssize_t integrity_format_show(struct blk_integrity *bi, char *page)
245+
static ssize_t format_show(struct device *dev, struct device_attribute *attr,
246+
char *page)
249247
{
248+
struct blk_integrity *bi = dev_to_bi(dev);
249+
250250
if (bi->profile && bi->profile->name)
251251
return sysfs_emit(page, "%s\n", bi->profile->name);
252252
return sysfs_emit(page, "none\n");
253253
}
254254

255-
static ssize_t integrity_tag_size_show(struct blk_integrity *bi, char *page)
255+
static ssize_t tag_size_show(struct device *dev, struct device_attribute *attr,
256+
char *page)
256257
{
258+
struct blk_integrity *bi = dev_to_bi(dev);
259+
257260
return sysfs_emit(page, "%u\n", bi->tag_size);
258261
}
259262

260-
static ssize_t integrity_interval_show(struct blk_integrity *bi, char *page)
263+
static ssize_t protection_interval_bytes_show(struct device *dev,
264+
struct device_attribute *attr,
265+
char *page)
261266
{
267+
struct blk_integrity *bi = dev_to_bi(dev);
268+
262269
return sysfs_emit(page, "%u\n",
263270
bi->interval_exp ? 1 << bi->interval_exp : 0);
264271
}
265272

266-
static ssize_t integrity_verify_store(struct blk_integrity *bi,
267-
const char *page, size_t count)
273+
static ssize_t read_verify_store(struct device *dev,
274+
struct device_attribute *attr,
275+
const char *page, size_t count)
268276
{
277+
struct blk_integrity *bi = dev_to_bi(dev);
269278
char *p = (char *) page;
270279
unsigned long val = simple_strtoul(p, &p, 10);
271280

@@ -277,14 +286,20 @@ static ssize_t integrity_verify_store(struct blk_integrity *bi,
277286
return count;
278287
}
279288

280-
static ssize_t integrity_verify_show(struct blk_integrity *bi, char *page)
289+
static ssize_t read_verify_show(struct device *dev,
290+
struct device_attribute *attr, char *page)
281291
{
292+
struct blk_integrity *bi = dev_to_bi(dev);
293+
282294
return sysfs_emit(page, "%d\n", !!(bi->flags & BLK_INTEGRITY_VERIFY));
283295
}
284296

285-
static ssize_t integrity_generate_store(struct blk_integrity *bi,
286-
const char *page, size_t count)
297+
static ssize_t write_generate_store(struct device *dev,
298+
struct device_attribute *attr,
299+
const char *page, size_t count)
287300
{
301+
struct blk_integrity *bi = dev_to_bi(dev);
302+
288303
char *p = (char *) page;
289304
unsigned long val = simple_strtoul(p, &p, 10);
290305

@@ -296,57 +311,39 @@ static ssize_t integrity_generate_store(struct blk_integrity *bi,
296311
return count;
297312
}
298313

299-
static ssize_t integrity_generate_show(struct blk_integrity *bi, char *page)
314+
static ssize_t write_generate_show(struct device *dev,
315+
struct device_attribute *attr, char *page)
300316
{
317+
struct blk_integrity *bi = dev_to_bi(dev);
318+
301319
return sysfs_emit(page, "%d\n", !!(bi->flags & BLK_INTEGRITY_GENERATE));
302320
}
303321

304-
static ssize_t integrity_device_show(struct blk_integrity *bi, char *page)
322+
static ssize_t device_is_integrity_capable_show(struct device *dev,
323+
struct device_attribute *attr,
324+
char *page)
305325
{
326+
struct blk_integrity *bi = dev_to_bi(dev);
327+
306328
return sysfs_emit(page, "%u\n",
307329
!!(bi->flags & BLK_INTEGRITY_DEVICE_CAPABLE));
308330
}
309331

310-
static struct integrity_sysfs_entry integrity_format_entry = {
311-
.attr = { .name = "format", .mode = 0444 },
312-
.show = integrity_format_show,
313-
};
314-
315-
static struct integrity_sysfs_entry integrity_tag_size_entry = {
316-
.attr = { .name = "tag_size", .mode = 0444 },
317-
.show = integrity_tag_size_show,
318-
};
319-
320-
static struct integrity_sysfs_entry integrity_interval_entry = {
321-
.attr = { .name = "protection_interval_bytes", .mode = 0444 },
322-
.show = integrity_interval_show,
323-
};
324-
325-
static struct integrity_sysfs_entry integrity_verify_entry = {
326-
.attr = { .name = "read_verify", .mode = 0644 },
327-
.show = integrity_verify_show,
328-
.store = integrity_verify_store,
329-
};
330-
331-
static struct integrity_sysfs_entry integrity_generate_entry = {
332-
.attr = { .name = "write_generate", .mode = 0644 },
333-
.show = integrity_generate_show,
334-
.store = integrity_generate_store,
335-
};
336-
337-
static struct integrity_sysfs_entry integrity_device_entry = {
338-
.attr = { .name = "device_is_integrity_capable", .mode = 0444 },
339-
.show = integrity_device_show,
340-
};
332+
static DEVICE_ATTR_RO(format);
333+
static DEVICE_ATTR_RO(tag_size);
334+
static DEVICE_ATTR_RO(protection_interval_bytes);
335+
static DEVICE_ATTR_RW(read_verify);
336+
static DEVICE_ATTR_RW(write_generate);
337+
static DEVICE_ATTR_RO(device_is_integrity_capable);
341338

342339
static struct attribute *integrity_attrs[] = {
343-
&integrity_format_entry.attr,
344-
&integrity_tag_size_entry.attr,
345-
&integrity_interval_entry.attr,
346-
&integrity_verify_entry.attr,
347-
&integrity_generate_entry.attr,
348-
&integrity_device_entry.attr,
349-
NULL,
340+
&dev_attr_format.attr,
341+
&dev_attr_tag_size.attr,
342+
&dev_attr_protection_interval_bytes.attr,
343+
&dev_attr_read_verify.attr,
344+
&dev_attr_write_generate.attr,
345+
&dev_attr_device_is_integrity_capable.attr,
346+
NULL
350347
};
351348
ATTRIBUTE_GROUPS(integrity);
352349

0 commit comments

Comments
 (0)