aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2024-03-15 14:55:50 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2024-03-15 14:55:50 -0700
commit277100b3d5fefacba4f5ff18e2e52a9553eb6e3f (patch)
treed8c2807c782fa25fa5e7f1599932bd6d2e5a066b
parentc8e769961668ef56acabc67f040c58ed769c57e4 (diff)
parent4c4ab8ae416350ce817339f239bdaaf351212f15 (diff)
downloadvfs-master.tar.gz
Merge tag 'block-6.9-20240315' of git://git.kernel.dk/linuxHEADmaster
Pull block fixes from Jens Axboe: - Revert of a change for mq-deadline that went into the 6.8 release, causing a performance regression for some (Bart) - Revert of the interruptible discard handling. This needs more work since the ioctl and fs path aren't properly split, and will happen for the 6.10 kernel release. For 6.9, do the minimal revert (Christoph) - Fix for an issue with the timestamp caching code (me) - kerneldoc fix (Jiapeng) * tag 'block-6.9-20240315' of git://git.kernel.dk/linux: block: fix mismatched kerneldoc function name Revert "blk-lib: check for kill signal" Revert "block/mq-deadline: use correct way to throttling write requests" block: limit block time caching to in_task() context
-rw-r--r--block/blk-lib.c40
-rw-r--r--block/blk-settings.c2
-rw-r--r--block/blk.h2
-rw-r--r--block/mq-deadline.c3
4 files changed, 4 insertions, 43 deletions
diff --git a/block/blk-lib.c b/block/blk-lib.c
index dc8e35d0a51d6d..a6954eafb8c8af 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -35,26 +35,6 @@ static sector_t bio_discard_limit(struct block_device *bdev, sector_t sector)
return round_down(UINT_MAX, discard_granularity) >> SECTOR_SHIFT;
}
-static void await_bio_endio(struct bio *bio)
-{
- complete(bio->bi_private);
- bio_put(bio);
-}
-
-/*
- * await_bio_chain - ends @bio and waits for every chained bio to complete
- */
-static void await_bio_chain(struct bio *bio)
-{
- DECLARE_COMPLETION_ONSTACK_MAP(done,
- bio->bi_bdev->bd_disk->lockdep_map);
-
- bio->bi_private = &done;
- bio->bi_end_io = await_bio_endio;
- bio_endio(bio);
- blk_wait_io(&done);
-}
-
int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
sector_t nr_sects, gfp_t gfp_mask, struct bio **biop)
{
@@ -97,10 +77,6 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
* is disabled.
*/
cond_resched();
- if (fatal_signal_pending(current)) {
- await_bio_chain(bio);
- return -EINTR;
- }
}
*biop = bio;
@@ -167,10 +143,6 @@ static int __blkdev_issue_write_zeroes(struct block_device *bdev,
nr_sects -= len;
sector += len;
cond_resched();
- if (fatal_signal_pending(current)) {
- await_bio_chain(bio);
- return -EINTR;
- }
}
*biop = bio;
@@ -215,10 +187,6 @@ static int __blkdev_issue_zero_pages(struct block_device *bdev,
break;
}
cond_resched();
- if (fatal_signal_pending(current)) {
- await_bio_chain(bio);
- return -EINTR;
- }
}
*biop = bio;
@@ -309,7 +277,7 @@ retry:
bio_put(bio);
}
blk_finish_plug(&plug);
- if (ret && ret != -EINTR && try_write_zeroes) {
+ if (ret && try_write_zeroes) {
if (!(flags & BLKDEV_ZERO_NOFALLBACK)) {
try_write_zeroes = false;
goto retry;
@@ -361,12 +329,6 @@ int blkdev_issue_secure_erase(struct block_device *bdev, sector_t sector,
sector += len;
nr_sects -= len;
cond_resched();
- if (fatal_signal_pending(current)) {
- await_bio_chain(bio);
- ret = -EINTR;
- bio = NULL;
- break;
- }
}
if (bio) {
ret = submit_bio_wait(bio);
diff --git a/block/blk-settings.c b/block/blk-settings.c
index e160d56e8edaa1..3c7d8d638ab59d 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -267,7 +267,7 @@ int queue_limits_commit_update(struct request_queue *q,
EXPORT_SYMBOL_GPL(queue_limits_commit_update);
/**
- * queue_limits_commit_set - apply queue limits to queue
+ * queue_limits_set - apply queue limits to queue
* @q: queue to update
* @lim: limits to apply
*
diff --git a/block/blk.h b/block/blk.h
index a19b7b42e6503c..5cac4e29ae1744 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -534,7 +534,7 @@ static inline u64 blk_time_get_ns(void)
{
struct blk_plug *plug = current->plug;
- if (!plug)
+ if (!plug || !in_task())
return ktime_get_ns();
/*
diff --git a/block/mq-deadline.c b/block/mq-deadline.c
index f958e79277b8bc..02a916ba62ee75 100644
--- a/block/mq-deadline.c
+++ b/block/mq-deadline.c
@@ -646,9 +646,8 @@ static void dd_depth_updated(struct blk_mq_hw_ctx *hctx)
struct request_queue *q = hctx->queue;
struct deadline_data *dd = q->elevator->elevator_data;
struct blk_mq_tags *tags = hctx->sched_tags;
- unsigned int shift = tags->bitmap_tags.sb.shift;
- dd->async_depth = max(1U, 3 * (1U << shift) / 4);
+ dd->async_depth = max(1UL, 3 * q->nr_requests / 4);
sbitmap_queue_min_shallow_depth(&tags->bitmap_tags, dd->async_depth);
}