@@ -1284,72 +1284,6 @@ static int blk_trace_setup_queue(struct request_queue *q, dev_t dev)
1284
1284
* sysfs interface to enable and configure tracing
1285
1285
*/
1286
1286
1287
- static ssize_t sysfs_blk_trace_enable_show (struct device * dev ,
1288
- struct device_attribute * attr ,
1289
- char * buf )
1290
- {
1291
- struct hd_struct * p = dev_to_part (dev );
1292
- struct block_device * bdev ;
1293
- ssize_t ret = - ENXIO ;
1294
-
1295
- lock_kernel ();
1296
- bdev = bdget (part_devt (p ));
1297
- if (bdev != NULL ) {
1298
- struct request_queue * q = bdev_get_queue (bdev );
1299
-
1300
- if (q != NULL ) {
1301
- mutex_lock (& bdev -> bd_mutex );
1302
- ret = sprintf (buf , "%u\n" , !!q -> blk_trace );
1303
- mutex_unlock (& bdev -> bd_mutex );
1304
- }
1305
-
1306
- bdput (bdev );
1307
- }
1308
-
1309
- unlock_kernel ();
1310
- return ret ;
1311
- }
1312
-
1313
- static ssize_t sysfs_blk_trace_enable_store (struct device * dev ,
1314
- struct device_attribute * attr ,
1315
- const char * buf , size_t count )
1316
- {
1317
- struct block_device * bdev ;
1318
- struct request_queue * q ;
1319
- struct hd_struct * p ;
1320
- int value ;
1321
- ssize_t ret = - ENXIO ;
1322
-
1323
- if (count == 0 || sscanf (buf , "%d" , & value ) != 1 )
1324
- goto out ;
1325
-
1326
- lock_kernel ();
1327
- p = dev_to_part (dev );
1328
- bdev = bdget (part_devt (p ));
1329
- if (bdev == NULL )
1330
- goto out_unlock_kernel ;
1331
-
1332
- q = bdev_get_queue (bdev );
1333
- if (q == NULL )
1334
- goto out_bdput ;
1335
-
1336
- mutex_lock (& bdev -> bd_mutex );
1337
- if (value )
1338
- ret = blk_trace_setup_queue (q , bdev -> bd_dev );
1339
- else
1340
- ret = blk_trace_remove_queue (q );
1341
- mutex_unlock (& bdev -> bd_mutex );
1342
-
1343
- if (ret == 0 )
1344
- ret = count ;
1345
- out_bdput :
1346
- bdput (bdev );
1347
- out_unlock_kernel :
1348
- unlock_kernel ();
1349
- out :
1350
- return ret ;
1351
- }
1352
-
1353
1287
static ssize_t sysfs_blk_trace_attr_show (struct device * dev ,
1354
1288
struct device_attribute * attr ,
1355
1289
char * buf );
@@ -1361,8 +1295,7 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
1361
1295
sysfs_blk_trace_attr_show, \
1362
1296
sysfs_blk_trace_attr_store)
1363
1297
1364
- static DEVICE_ATTR (enable , S_IRUGO | S_IWUSR ,
1365
- sysfs_blk_trace_enable_show , sysfs_blk_trace_enable_store ) ;
1298
+ static BLK_TRACE_DEVICE_ATTR (enable );
1366
1299
static BLK_TRACE_DEVICE_ATTR (act_mask );
1367
1300
static BLK_TRACE_DEVICE_ATTR (pid );
1368
1301
static BLK_TRACE_DEVICE_ATTR (start_lba );
@@ -1447,6 +1380,12 @@ static ssize_t sysfs_blk_trace_attr_show(struct device *dev,
1447
1380
if (q == NULL )
1448
1381
goto out_bdput ;
1449
1382
mutex_lock (& bdev -> bd_mutex );
1383
+
1384
+ if (attr == & dev_attr_enable ) {
1385
+ ret = sprintf (buf , "%u\n" , !!q -> blk_trace );
1386
+ goto out_unlock_bdev ;
1387
+ }
1388
+
1450
1389
if (q -> blk_trace == NULL )
1451
1390
ret = sprintf (buf , "disabled\n" );
1452
1391
else if (attr == & dev_attr_act_mask )
@@ -1457,6 +1396,8 @@ static ssize_t sysfs_blk_trace_attr_show(struct device *dev,
1457
1396
ret = sprintf (buf , "%llu\n" , q -> blk_trace -> start_lba );
1458
1397
else if (attr == & dev_attr_end_lba )
1459
1398
ret = sprintf (buf , "%llu\n" , q -> blk_trace -> end_lba );
1399
+
1400
+ out_unlock_bdev :
1460
1401
mutex_unlock (& bdev -> bd_mutex );
1461
1402
out_bdput :
1462
1403
bdput (bdev );
@@ -1499,6 +1440,15 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
1499
1440
goto out_bdput ;
1500
1441
1501
1442
mutex_lock (& bdev -> bd_mutex );
1443
+
1444
+ if (attr == & dev_attr_enable ) {
1445
+ if (value )
1446
+ ret = blk_trace_setup_queue (q , bdev -> bd_dev );
1447
+ else
1448
+ ret = blk_trace_remove_queue (q );
1449
+ goto out_unlock_bdev ;
1450
+ }
1451
+
1502
1452
ret = 0 ;
1503
1453
if (q -> blk_trace == NULL )
1504
1454
ret = blk_trace_setup_queue (q , bdev -> bd_dev );
@@ -1512,13 +1462,15 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
1512
1462
q -> blk_trace -> start_lba = value ;
1513
1463
else if (attr == & dev_attr_end_lba )
1514
1464
q -> blk_trace -> end_lba = value ;
1515
- ret = count ;
1516
1465
}
1466
+
1467
+ out_unlock_bdev :
1517
1468
mutex_unlock (& bdev -> bd_mutex );
1518
1469
out_bdput :
1519
1470
bdput (bdev );
1520
1471
out_unlock_kernel :
1521
1472
unlock_kernel ();
1522
1473
out :
1523
- return ret ;
1474
+ return ret ? ret : count ;
1524
1475
}
1476
+
0 commit comments