Skip to content

Commit 1b1391b

Browse files
committed
Merge tag 'block-6.18-20251009' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux
Pull block fixes from Jens Axboe: - Don't include __GFP_NOWARN for loop worker allocation, as it already uses GFP_NOWAIT which has __GFP_NOWARN set already - Small series cleaning up the recent bio_iov_iter_get_pages() changes - loop fix for leaking the backing reference file, if validation fails - Update of a comment pertaining to disk/partition stat locking * tag 'block-6.18-20251009' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux: loop: remove redundant __GFP_NOWARN flag block: move bio_iov_iter_get_bdev_pages to block/fops.c iomap: open code bio_iov_iter_get_bdev_pages block: rename bio_iov_iter_get_pages_aligned to bio_iov_iter_get_pages block: remove bio_iov_iter_get_pages block: Update a comment of disk statistics loop: fix backing file reference leak on validation error
2 parents eba41c0 + 455281c commit 1b1391b

File tree

8 files changed

+29
-26
lines changed

8 files changed

+29
-26
lines changed

block/bio.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,7 +1316,7 @@ static int bio_iov_iter_align_down(struct bio *bio, struct iov_iter *iter,
13161316
}
13171317

13181318
/**
1319-
* bio_iov_iter_get_pages_aligned - add user or kernel pages to a bio
1319+
* bio_iov_iter_get_pages - add user or kernel pages to a bio
13201320
* @bio: bio to add pages to
13211321
* @iter: iov iterator describing the region to be added
13221322
* @len_align_mask: the mask to align the total size to, 0 for any length
@@ -1336,7 +1336,7 @@ static int bio_iov_iter_align_down(struct bio *bio, struct iov_iter *iter,
13361336
* MM encounters an error pinning the requested pages, it stops. Error
13371337
* is returned only if 0 pages could be pinned.
13381338
*/
1339-
int bio_iov_iter_get_pages_aligned(struct bio *bio, struct iov_iter *iter,
1339+
int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter,
13401340
unsigned len_align_mask)
13411341
{
13421342
int ret = 0;
@@ -1360,7 +1360,6 @@ int bio_iov_iter_get_pages_aligned(struct bio *bio, struct iov_iter *iter,
13601360
return bio_iov_iter_align_down(bio, iter, len_align_mask);
13611361
return ret;
13621362
}
1363-
EXPORT_SYMBOL_GPL(bio_iov_iter_get_pages_aligned);
13641363

13651364
static void submit_bio_wait_endio(struct bio *bio)
13661365
{

block/blk-map.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,11 @@ static int bio_map_user_iov(struct request *rq, struct iov_iter *iter,
283283
bio = blk_rq_map_bio_alloc(rq, nr_vecs, gfp_mask);
284284
if (!bio)
285285
return -ENOMEM;
286-
ret = bio_iov_iter_get_pages(bio, iter);
286+
/*
287+
* No alignment requirements on our part to support arbitrary
288+
* passthrough commands.
289+
*/
290+
ret = bio_iov_iter_get_pages(bio, iter, 0);
287291
if (ret)
288292
goto out_put;
289293
ret = blk_rq_append_bio(rq, bio);

block/fops.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ static bool blkdev_dio_invalid(struct block_device *bdev, struct kiocb *iocb,
4343
(bdev_logical_block_size(bdev) - 1);
4444
}
4545

46+
static inline int blkdev_iov_iter_get_pages(struct bio *bio,
47+
struct iov_iter *iter, struct block_device *bdev)
48+
{
49+
return bio_iov_iter_get_pages(bio, iter,
50+
bdev_logical_block_size(bdev) - 1);
51+
}
52+
4653
#define DIO_INLINE_BIO_VECS 4
4754

4855
static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
@@ -78,7 +85,7 @@ static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
7885
if (iocb->ki_flags & IOCB_ATOMIC)
7986
bio.bi_opf |= REQ_ATOMIC;
8087

81-
ret = bio_iov_iter_get_bdev_pages(&bio, iter, bdev);
88+
ret = blkdev_iov_iter_get_pages(&bio, iter, bdev);
8289
if (unlikely(ret))
8390
goto out;
8491
ret = bio.bi_iter.bi_size;
@@ -212,7 +219,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
212219
bio->bi_end_io = blkdev_bio_end_io;
213220
bio->bi_ioprio = iocb->ki_ioprio;
214221

215-
ret = bio_iov_iter_get_bdev_pages(bio, iter, bdev);
222+
ret = blkdev_iov_iter_get_pages(bio, iter, bdev);
216223
if (unlikely(ret)) {
217224
bio->bi_status = BLK_STS_IOERR;
218225
bio_endio(bio);
@@ -348,7 +355,7 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb,
348355
*/
349356
bio_iov_bvec_set(bio, iter);
350357
} else {
351-
ret = bio_iov_iter_get_bdev_pages(bio, iter, bdev);
358+
ret = blkdev_iov_iter_get_pages(bio, iter, bdev);
352359
if (unlikely(ret))
353360
goto out_bio_put;
354361
}

drivers/block/loop.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,10 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
551551
return -EBADF;
552552

553553
error = loop_check_backing_file(file);
554-
if (error)
554+
if (error) {
555+
fput(file);
555556
return error;
557+
}
556558

557559
/* suppress uevents while reconfiguring the device */
558560
dev_set_uevent_suppress(disk_to_dev(lo->lo_disk), 1);
@@ -822,7 +824,7 @@ static void loop_queue_work(struct loop_device *lo, struct loop_cmd *cmd)
822824
if (worker)
823825
goto queue_work;
824826

825-
worker = kzalloc(sizeof(struct loop_worker), GFP_NOWAIT | __GFP_NOWARN);
827+
worker = kzalloc(sizeof(struct loop_worker), GFP_NOWAIT);
826828
/*
827829
* In the event we cannot allocate a worker, just queue on the
828830
* rootcg worker and issue the I/O as the rootcg
@@ -993,8 +995,10 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
993995
return -EBADF;
994996

995997
error = loop_check_backing_file(file);
996-
if (error)
998+
if (error) {
999+
fput(file);
9971000
return error;
1001+
}
9981002

9991003
is_loop = is_loop_device(file);
10001004

fs/iomap/direct-io.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,8 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio)
433433
bio->bi_private = dio;
434434
bio->bi_end_io = iomap_dio_bio_end_io;
435435

436-
ret = bio_iov_iter_get_bdev_pages(bio, dio->submit.iter, iomap->bdev);
436+
ret = bio_iov_iter_get_pages(bio, dio->submit.iter,
437+
bdev_logical_block_size(iomap->bdev) - 1);
437438
if (unlikely(ret)) {
438439
/*
439440
* We have to stop part way through an IO. We must fall

include/linux/bio.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -446,14 +446,9 @@ int submit_bio_wait(struct bio *bio);
446446
int bdev_rw_virt(struct block_device *bdev, sector_t sector, void *data,
447447
size_t len, enum req_op op);
448448

449-
int bio_iov_iter_get_pages_aligned(struct bio *bio, struct iov_iter *iter,
449+
int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter,
450450
unsigned len_align_mask);
451451

452-
static inline int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
453-
{
454-
return bio_iov_iter_get_pages_aligned(bio, iter, 0);
455-
}
456-
457452
void bio_iov_bvec_set(struct bio *bio, const struct iov_iter *iter);
458453
void __bio_release_pages(struct bio *bio, bool mark_dirty);
459454
extern void bio_set_pages_dirty(struct bio *bio);

include/linux/blkdev.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1873,13 +1873,6 @@ static inline int bio_split_rw_at(struct bio *bio,
18731873
return bio_split_io_at(bio, lim, segs, max_bytes, lim->dma_alignment);
18741874
}
18751875

1876-
static inline int bio_iov_iter_get_bdev_pages(struct bio *bio,
1877-
struct iov_iter *iter, struct block_device *bdev)
1878-
{
1879-
return bio_iov_iter_get_pages_aligned(bio, iter,
1880-
bdev_logical_block_size(bdev) - 1);
1881-
}
1882-
18831876
#define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { }
18841877

18851878
#endif /* _LINUX_BLKDEV_H */

include/linux/part_stat.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ struct disk_stats {
1717
/*
1818
* Macros to operate on percpu disk statistics:
1919
*
20-
* {disk|part|all}_stat_{add|sub|inc|dec}() modify the stat counters and should
21-
* be called between disk_stat_lock() and disk_stat_unlock().
20+
* part_stat_{add|sub|inc|dec}() modify the stat counters and should
21+
* be called between part_stat_lock() and part_stat_unlock().
2222
*
2323
* part_stat_read() can be called at any time.
2424
*/

0 commit comments

Comments
 (0)