@@ -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-
221215static 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
232226static 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
342339static 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};
351348ATTRIBUTE_GROUPS (integrity );
352349
0 commit comments