mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
block: switch polling to be bio based
Replace the blk_poll interface that requires the caller to keep a queue and cookie from the submissions with polling based on the bio. Polling for the bio itself leads to a few advantages: - the cookie construction can made entirely private in blk-mq.c - the caller does not need to remember the request_queue and cookie separately and thus sidesteps their lifetime issues - keeping the device and the cookie inside the bio allows to trivially support polling BIOs remapping by stacking drivers - a lot of code to propagate the cookie back up the submission path can be removed entirely. Signed-off-by: Christoph Hellwig <hch@lst.de> Tested-by: Mark Wunderlich <mark.wunderlich@intel.com> Link: https://lore.kernel.org/r/20211012111226.760968-15-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
19416123ab
commit
3e08773c38
39 changed files with 232 additions and 264 deletions
|
@ -25,6 +25,7 @@ struct request;
|
|||
struct sg_io_hdr;
|
||||
struct blkcg_gq;
|
||||
struct blk_flush_queue;
|
||||
struct kiocb;
|
||||
struct pr_ops;
|
||||
struct rq_qos;
|
||||
struct blk_queue_stats;
|
||||
|
@ -550,7 +551,7 @@ static inline unsigned int blk_queue_depth(struct request_queue *q)
|
|||
|
||||
extern int blk_register_queue(struct gendisk *disk);
|
||||
extern void blk_unregister_queue(struct gendisk *disk);
|
||||
blk_qc_t submit_bio_noacct(struct bio *bio);
|
||||
void submit_bio_noacct(struct bio *bio);
|
||||
|
||||
extern int blk_lld_busy(struct request_queue *q);
|
||||
extern void blk_queue_split(struct bio **);
|
||||
|
@ -568,7 +569,8 @@ blk_status_t errno_to_blk_status(int errno);
|
|||
#define BLK_POLL_ONESHOT (1 << 0)
|
||||
/* do not sleep to wait for the expected completion time */
|
||||
#define BLK_POLL_NOSLEEP (1 << 1)
|
||||
int blk_poll(struct request_queue *q, blk_qc_t cookie, unsigned int flags);
|
||||
int bio_poll(struct bio *bio, unsigned int flags);
|
||||
int iocb_bio_iopoll(struct kiocb *kiocb, unsigned int flags);
|
||||
|
||||
static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
|
||||
{
|
||||
|
@ -1176,7 +1178,7 @@ static inline void blk_ksm_unregister(struct request_queue *q) { }
|
|||
|
||||
|
||||
struct block_device_operations {
|
||||
blk_qc_t (*submit_bio) (struct bio *bio);
|
||||
void (*submit_bio)(struct bio *bio);
|
||||
int (*open) (struct block_device *, fmode_t);
|
||||
void (*release) (struct gendisk *, fmode_t);
|
||||
int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue