Skip to content

Commit d5afaf9

Browse files
committed
Merge tag 'block-6.11-20240823' of git://git.kernel.dk/linux
Pull block fixes from Jens Axboe: - NVMe pull request via Keith - Remove unused struct field (Nilay) - Fix fabrics keep-alive teardown order (Ming) - Write zeroes fixes (John) * tag 'block-6.11-20240823' of git://git.kernel.dk/linux: nvme: Remove unused field nvme: move stopping keep-alive into nvme_uninit_ctrl() block: Drop NULL check in bdev_write_zeroes_sectors() block: Read max write zeroes once for __blkdev_issue_write_zeroes()
2 parents 489270f + e6b09a1 commit d5afaf9

File tree

4 files changed

+20
-15
lines changed

4 files changed

+20
-15
lines changed

block/blk-lib.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,20 @@ static sector_t bio_write_zeroes_limit(struct block_device *bdev)
111111
(UINT_MAX >> SECTOR_SHIFT) & ~bs_mask);
112112
}
113113

114+
/*
115+
* There is no reliable way for the SCSI subsystem to determine whether a
116+
* device supports a WRITE SAME operation without actually performing a write
117+
* to media. As a result, write_zeroes is enabled by default and will be
118+
* disabled if a zeroing operation subsequently fails. This means that this
119+
* queue limit is likely to change at runtime.
120+
*/
114121
static void __blkdev_issue_write_zeroes(struct block_device *bdev,
115122
sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
116-
struct bio **biop, unsigned flags)
123+
struct bio **biop, unsigned flags, sector_t limit)
117124
{
125+
118126
while (nr_sects) {
119-
unsigned int len = min_t(sector_t, nr_sects,
120-
bio_write_zeroes_limit(bdev));
127+
unsigned int len = min(nr_sects, limit);
121128
struct bio *bio;
122129

123130
if ((flags & BLKDEV_ZERO_KILLABLE) &&
@@ -141,12 +148,14 @@ static void __blkdev_issue_write_zeroes(struct block_device *bdev,
141148
static int blkdev_issue_write_zeroes(struct block_device *bdev, sector_t sector,
142149
sector_t nr_sects, gfp_t gfp, unsigned flags)
143150
{
151+
sector_t limit = bio_write_zeroes_limit(bdev);
144152
struct bio *bio = NULL;
145153
struct blk_plug plug;
146154
int ret = 0;
147155

148156
blk_start_plug(&plug);
149-
__blkdev_issue_write_zeroes(bdev, sector, nr_sects, gfp, &bio, flags);
157+
__blkdev_issue_write_zeroes(bdev, sector, nr_sects, gfp, &bio,
158+
flags, limit);
150159
if (bio) {
151160
if ((flags & BLKDEV_ZERO_KILLABLE) &&
152161
fatal_signal_pending(current)) {
@@ -165,7 +174,7 @@ static int blkdev_issue_write_zeroes(struct block_device *bdev, sector_t sector,
165174
* on an I/O error, in which case we'll turn any error into
166175
* "not supported" here.
167176
*/
168-
if (ret && !bdev_write_zeroes_sectors(bdev))
177+
if (ret && !limit)
169178
return -EOPNOTSUPP;
170179
return ret;
171180
}
@@ -265,12 +274,14 @@ int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
265274
sector_t nr_sects, gfp_t gfp_mask, struct bio **biop,
266275
unsigned flags)
267276
{
277+
sector_t limit = bio_write_zeroes_limit(bdev);
278+
268279
if (bdev_read_only(bdev))
269280
return -EPERM;
270281

271-
if (bdev_write_zeroes_sectors(bdev)) {
282+
if (limit) {
272283
__blkdev_issue_write_zeroes(bdev, sector, nr_sects,
273-
gfp_mask, biop, flags);
284+
gfp_mask, biop, flags, limit);
274285
} else {
275286
if (flags & BLKDEV_ZERO_NOFALLBACK)
276287
return -EOPNOTSUPP;

drivers/nvme/host/core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4612,7 +4612,6 @@ void nvme_stop_ctrl(struct nvme_ctrl *ctrl)
46124612
{
46134613
nvme_mpath_stop(ctrl);
46144614
nvme_auth_stop(ctrl);
4615-
nvme_stop_keep_alive(ctrl);
46164615
nvme_stop_failfast_work(ctrl);
46174616
flush_work(&ctrl->async_event_work);
46184617
cancel_work_sync(&ctrl->fw_act_work);
@@ -4648,6 +4647,7 @@ EXPORT_SYMBOL_GPL(nvme_start_ctrl);
46484647

46494648
void nvme_uninit_ctrl(struct nvme_ctrl *ctrl)
46504649
{
4650+
nvme_stop_keep_alive(ctrl);
46514651
nvme_hwmon_exit(ctrl);
46524652
nvme_fault_inject_fini(&ctrl->fault_inject);
46534653
dev_pm_qos_hide_latency_tolerance(ctrl->device);

drivers/nvme/host/nvme.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,6 @@ struct nvme_ctrl {
301301

302302
struct opal_dev *opal_dev;
303303

304-
char name[12];
305304
u16 cntlid;
306305

307306
u16 mtfa;

include/linux/blkdev.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,12 +1296,7 @@ bdev_max_secure_erase_sectors(struct block_device *bdev)
12961296

12971297
static inline unsigned int bdev_write_zeroes_sectors(struct block_device *bdev)
12981298
{
1299-
struct request_queue *q = bdev_get_queue(bdev);
1300-
1301-
if (q)
1302-
return q->limits.max_write_zeroes_sectors;
1303-
1304-
return 0;
1299+
return bdev_get_queue(bdev)->limits.max_write_zeroes_sectors;
13051300
}
13061301

13071302
static inline bool bdev_nonrot(struct block_device *bdev)

0 commit comments

Comments
 (0)