@@ -390,9 +390,17 @@ int bdev_read_page(struct block_device *bdev, sector_t sector,
390
390
struct page * page )
391
391
{
392
392
const struct block_device_operations * ops = bdev -> bd_disk -> fops ;
393
+ int result = - EOPNOTSUPP ;
394
+
393
395
if (!ops -> rw_page || bdev_get_integrity (bdev ))
394
- return - EOPNOTSUPP ;
395
- return ops -> rw_page (bdev , sector + get_start_sect (bdev ), page , READ );
396
+ return result ;
397
+
398
+ result = blk_queue_enter (bdev -> bd_queue , GFP_KERNEL );
399
+ if (result )
400
+ return result ;
401
+ result = ops -> rw_page (bdev , sector + get_start_sect (bdev ), page , READ );
402
+ blk_queue_exit (bdev -> bd_queue );
403
+ return result ;
396
404
}
397
405
EXPORT_SYMBOL_GPL (bdev_read_page );
398
406
@@ -421,14 +429,20 @@ int bdev_write_page(struct block_device *bdev, sector_t sector,
421
429
int result ;
422
430
int rw = (wbc -> sync_mode == WB_SYNC_ALL ) ? WRITE_SYNC : WRITE ;
423
431
const struct block_device_operations * ops = bdev -> bd_disk -> fops ;
432
+
424
433
if (!ops -> rw_page || bdev_get_integrity (bdev ))
425
434
return - EOPNOTSUPP ;
435
+ result = blk_queue_enter (bdev -> bd_queue , GFP_KERNEL );
436
+ if (result )
437
+ return result ;
438
+
426
439
set_page_writeback (page );
427
440
result = ops -> rw_page (bdev , sector + get_start_sect (bdev ), page , rw );
428
441
if (result )
429
442
end_page_writeback (page );
430
443
else
431
444
unlock_page (page );
445
+ blk_queue_exit (bdev -> bd_queue );
432
446
return result ;
433
447
}
434
448
EXPORT_SYMBOL_GPL (bdev_write_page );
0 commit comments