block: move blk_io_schedule() out of header file
blk_io_schedule() isn't called from performance sensitive code path, and
it is easier to maintain by exporting it as symbol.
Also blk_io_schedule() is only called by CONFIG_BLOCK code, so it is safe
to do this way. Meantime fixes build failure when CONFIG_BLOCK is off.
Cc: Christoph Hellwig <hch@infradead.org>
Fixes: e6249cdd46
("block: add blk_io_schedule() for avoiding task hung in sync dio")
Reported-by: Satya Tangirala <satyat@google.com>
Tested-by: Satya Tangirala <satyat@google.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
@@ -38,6 +38,7 @@
|
|||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/bpf.h>
|
#include <linux/bpf.h>
|
||||||
#include <linux/psi.h>
|
#include <linux/psi.h>
|
||||||
|
#include <linux/sched/sysctl.h>
|
||||||
|
|
||||||
#define CREATE_TRACE_POINTS
|
#define CREATE_TRACE_POINTS
|
||||||
#include <trace/events/block.h>
|
#include <trace/events/block.h>
|
||||||
@@ -1812,6 +1813,18 @@ void blk_finish_plug(struct blk_plug *plug)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(blk_finish_plug);
|
EXPORT_SYMBOL(blk_finish_plug);
|
||||||
|
|
||||||
|
void blk_io_schedule(void)
|
||||||
|
{
|
||||||
|
/* Prevent hang_check timer from firing at us during very long I/O */
|
||||||
|
unsigned long timeout = sysctl_hung_task_timeout_secs * HZ / 2;
|
||||||
|
|
||||||
|
if (timeout)
|
||||||
|
io_schedule_timeout(timeout);
|
||||||
|
else
|
||||||
|
io_schedule();
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(blk_io_schedule);
|
||||||
|
|
||||||
int __init blk_dev_init(void)
|
int __init blk_dev_init(void)
|
||||||
{
|
{
|
||||||
BUILD_BUG_ON(REQ_OP_LAST >= (1 << REQ_OP_BITS));
|
BUILD_BUG_ON(REQ_OP_LAST >= (1 << REQ_OP_BITS));
|
||||||
|
@@ -27,7 +27,6 @@
|
|||||||
#include <linux/percpu-refcount.h>
|
#include <linux/percpu-refcount.h>
|
||||||
#include <linux/scatterlist.h>
|
#include <linux/scatterlist.h>
|
||||||
#include <linux/blkzoned.h>
|
#include <linux/blkzoned.h>
|
||||||
#include <linux/sched/sysctl.h>
|
|
||||||
|
|
||||||
struct module;
|
struct module;
|
||||||
struct scsi_ioctl_command;
|
struct scsi_ioctl_command;
|
||||||
@@ -1221,6 +1220,8 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk)
|
|||||||
!list_empty(&plug->cb_list));
|
!list_empty(&plug->cb_list));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void blk_io_schedule(void);
|
||||||
|
|
||||||
extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *);
|
extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *);
|
||||||
extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
|
extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
|
||||||
sector_t nr_sects, gfp_t gfp_mask, struct page *page);
|
sector_t nr_sects, gfp_t gfp_mask, struct page *page);
|
||||||
@@ -1851,15 +1852,4 @@ static inline void blk_wake_io_task(struct task_struct *waiter)
|
|||||||
wake_up_process(waiter);
|
wake_up_process(waiter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void blk_io_schedule(void)
|
|
||||||
{
|
|
||||||
/* Prevent hang_check timer from firing at us during very long I/O */
|
|
||||||
unsigned long timeout = sysctl_hung_task_timeout_secs * HZ / 2;
|
|
||||||
|
|
||||||
if (timeout)
|
|
||||||
io_schedule_timeout(timeout);
|
|
||||||
else
|
|
||||||
io_schedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user