@@ -212,60 +212,69 @@ bool blk_integrity_merge_bio(struct request_queue *q, struct request *req,
212
212
return true;
213
213
}
214
214
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
-
221
215
static ssize_t integrity_attr_show (struct kobject * kobj , struct attribute * attr ,
222
216
char * page )
223
217
{
224
218
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 );
228
222
229
- return entry -> show (bi , page );
223
+ return dev_attr -> show (dev , dev_attr , page );
230
224
}
231
225
232
226
static ssize_t integrity_attr_store (struct kobject * kobj ,
233
227
struct attribute * attr , const char * page ,
234
228
size_t count )
235
229
{
236
230
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 );
241
234
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
+ }
244
239
245
- return ret ;
240
+ static inline struct blk_integrity * dev_to_bi (struct device * dev )
241
+ {
242
+ return & dev_to_disk (dev )-> queue -> integrity ;
246
243
}
247
244
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 )
249
247
{
248
+ struct blk_integrity * bi = dev_to_bi (dev );
249
+
250
250
if (bi -> profile && bi -> profile -> name )
251
251
return sysfs_emit (page , "%s\n" , bi -> profile -> name );
252
252
return sysfs_emit (page , "none\n" );
253
253
}
254
254
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 )
256
257
{
258
+ struct blk_integrity * bi = dev_to_bi (dev );
259
+
257
260
return sysfs_emit (page , "%u\n" , bi -> tag_size );
258
261
}
259
262
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 )
261
266
{
267
+ struct blk_integrity * bi = dev_to_bi (dev );
268
+
262
269
return sysfs_emit (page , "%u\n" ,
263
270
bi -> interval_exp ? 1 << bi -> interval_exp : 0 );
264
271
}
265
272
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 )
268
276
{
277
+ struct blk_integrity * bi = dev_to_bi (dev );
269
278
char * p = (char * ) page ;
270
279
unsigned long val = simple_strtoul (p , & p , 10 );
271
280
@@ -277,14 +286,20 @@ static ssize_t integrity_verify_store(struct blk_integrity *bi,
277
286
return count ;
278
287
}
279
288
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 )
281
291
{
292
+ struct blk_integrity * bi = dev_to_bi (dev );
293
+
282
294
return sysfs_emit (page , "%d\n" , !!(bi -> flags & BLK_INTEGRITY_VERIFY ));
283
295
}
284
296
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 )
287
300
{
301
+ struct blk_integrity * bi = dev_to_bi (dev );
302
+
288
303
char * p = (char * ) page ;
289
304
unsigned long val = simple_strtoul (p , & p , 10 );
290
305
@@ -296,57 +311,39 @@ static ssize_t integrity_generate_store(struct blk_integrity *bi,
296
311
return count ;
297
312
}
298
313
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 )
300
316
{
317
+ struct blk_integrity * bi = dev_to_bi (dev );
318
+
301
319
return sysfs_emit (page , "%d\n" , !!(bi -> flags & BLK_INTEGRITY_GENERATE ));
302
320
}
303
321
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 )
305
325
{
326
+ struct blk_integrity * bi = dev_to_bi (dev );
327
+
306
328
return sysfs_emit (page , "%u\n" ,
307
329
!!(bi -> flags & BLK_INTEGRITY_DEVICE_CAPABLE ));
308
330
}
309
331
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 );
341
338
342
339
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
350
347
};
351
348
ATTRIBUTE_GROUPS (integrity );
352
349
0 commit comments