Patch "fs: guard_bio_eod() needs to consider partitions" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
fs: guard_bio_eod() needs to consider partitions
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
fs-guard_bio_eod-needs-to-consider-partitions.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
67f2519fe2903c4041c0e94394d14d372fe51399Mon Sep 17 00:00:00 2001
From: Greg Edwards <[email protected]>
Date: Tue, 24 Oct 2017 11:21:48 -0600
Subject: fs: guard_bio_eod() needs to consider partitions
From: Greg Edwards <[email protected]>
commit 67f2519fe2903c4041c0e94394d14d372fe51399 upstream.
guard_bio_eod() needs to look at the partition capacity, not just the capacity of the whole device, when determining if truncation is necessary.
[ 60.268688] attempt to access beyond end of device [ 60.268690] unknown-block(9,1): rw=0, want=67103509, limit=67103506 [ 60.268693] buffer_io_error: 2 callbacks suppressed [ 60.268696] Buffer I/O error on dev md1p7, logical block 4524305, async page read
--- fs/buffer.c | 10 +++++++++- include/linux/genhd.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-)
fs/buffer.c +9 -1
@@ -3055,8 +3055,16 @@ void guard_bio_eod(int op, struct bio *bsector_t maxsector;struct bio_vec *bvec = &bio->bi_io_vec[bio->bi_vcnt -1 ];unsigned truncated_bytes; +struct hd_struct *part; + +rcu_read_lock (); + part =__disk_get_part (bio->bi_disk, bio->bi_partno); +if (part) + maxsector =part_nr_sects_read (part); +else + maxsector =get_capacity (bio->bi_disk); +rcu_read_unlock (); - maxsector =get_capacity (bio->bi_disk);if (!maxsector)return ;
include/linux/genhd.h +1 -0
@@ -243,6 +243,7 @@ static inline dev_t part_devt(struct hd_return part_to_dev (part)->devt; } +extern struct hd_struct *__disk_get_part (struct gendisk *disk,int partno);extern struct hd_struct *disk_get_part (struct gendisk *disk,int partno);static inline void disk_put_part (struct hd_struct *part)
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/fs-guard_bio_eod-needs-to-consider-partitions.patch