* [PATCH v2] block: bio_check_eod() needs to consider partition
@ 2018-03-13 9:18 Christoph Hellwig
2018-03-13 14:49 ` Jens Axboe
0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2018-03-13 9:18 UTC (permalink / raw)
To: axboe; +Cc: jiufei.xue, linux-block
bio_check_eod() should check partiton size not the whole disk if
bio->bi_partno is non-zero. Does this by taking the call to bio_check_eod
into blk_partition_remap.
Based on an earlier patch from Jiufei Xue.
Fixes: 74d46992e0d9 ("block: replace bi_bdev with a gendisk pointer and partitions index")
Reported-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
block/blk-core.c | 99 ++++++++++++++++++++++++--------------------------------
1 file changed, 43 insertions(+), 56 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 6d82c4f7fadd..5a78f5537087 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2023,7 +2023,7 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
return BLK_QC_T_NONE;
}
-static void handle_bad_sector(struct bio *bio)
+static void handle_bad_sector(struct bio *bio, sector_t maxsector)
{
char b[BDEVNAME_SIZE];
@@ -2031,7 +2031,7 @@ static void handle_bad_sector(struct bio *bio)
printk(KERN_INFO "%s: rw=%d, want=%Lu, limit=%Lu\n",
bio_devname(bio, b), bio->bi_opf,
(unsigned long long)bio_end_sector(bio),
- (long long)get_capacity(bio->bi_disk));
+ (long long)maxsector);
}
#ifdef CONFIG_FAIL_MAKE_REQUEST
@@ -2092,66 +2092,57 @@ static noinline int should_fail_bio(struct bio *bio)
}
ALLOW_ERROR_INJECTION(should_fail_bio, ERRNO);
+/*
+ * Check whether this bio extends beyond the end of the device or partition.
+ * This may well happen - the kernel calls bread() without checking the size of
+ * the device, e.g., when mounting a file system.
+ */
+static inline int bio_check_eod(struct bio *bio, sector_t maxsector)
+{
+ unsigned int nr_sectors = bio_sectors(bio);
+
+ if (nr_sectors && maxsector &&
+ (nr_sectors > maxsector ||
+ bio->bi_iter.bi_sector > maxsector - nr_sectors)) {
+ handle_bad_sector(bio, maxsector);
+ return -EIO;
+ }
+ return 0;
+}
+
/*
* Remap block n of partition p to block n+start(p) of the disk.
*/
static inline int blk_partition_remap(struct bio *bio)
{
struct hd_struct *p;
- int ret = 0;
+ sector_t maxsector = 0;
rcu_read_lock();
p = __disk_get_part(bio->bi_disk, bio->bi_partno);
- if (unlikely(!p || should_fail_request(p, bio->bi_iter.bi_size) ||
- bio_check_ro(bio, p))) {
- ret = -EIO;
- goto out;
- }
+ if (unlikely(!p))
+ goto out_unlock;
+ if (unlikely(should_fail_request(p, bio->bi_iter.bi_size)))
+ goto out_unlock;
+ if (unlikely(bio_check_ro(bio, p)))
+ goto out_unlock;
/*
* Zone reset does not include bi_size so bio_sectors() is always 0.
* Include a test for the reset op code and perform the remap if needed.
*/
- if (!bio_sectors(bio) && bio_op(bio) != REQ_OP_ZONE_RESET)
- goto out;
-
- bio->bi_iter.bi_sector += p->start_sect;
- bio->bi_partno = 0;
- trace_block_bio_remap(bio->bi_disk->queue, bio, part_devt(p),
- bio->bi_iter.bi_sector - p->start_sect);
-
-out:
- rcu_read_unlock();
- return ret;
-}
-
-/*
- * Check whether this bio extends beyond the end of the device.
- */
-static inline int bio_check_eod(struct bio *bio, unsigned int nr_sectors)
-{
- sector_t maxsector;
-
- if (!nr_sectors)
- return 0;
-
- /* Test device or partition size, when known. */
- maxsector = get_capacity(bio->bi_disk);
- if (maxsector) {
- sector_t sector = bio->bi_iter.bi_sector;
-
- if (maxsector < nr_sectors || maxsector - nr_sectors < sector) {
- /*
- * This may well happen - the kernel calls bread()
- * without checking the size of the device, e.g., when
- * mounting a device.
- */
- handle_bad_sector(bio);
- return 1;
- }
+ if (bio_sectors(bio) || bio_op(bio) == REQ_OP_ZONE_RESET) {
+ bio->bi_iter.bi_sector += p->start_sect;
+ bio->bi_partno = 0;
+ trace_block_bio_remap(bio->bi_disk->queue, bio, part_devt(p),
+ bio->bi_iter.bi_sector - p->start_sect);
+ maxsector = part_nr_sects_read(p);
}
-
- return 0;
+ rcu_read_unlock();
+ return bio_check_eod(bio, maxsector);
+out_unlock:
+ rcu_read_unlock();
+ return -EIO;
}
static noinline_for_stack bool
@@ -2164,9 +2155,6 @@ generic_make_request_checks(struct bio *bio)
might_sleep();
- if (bio_check_eod(bio, nr_sectors))
- goto end_io;
-
q = bio->bi_disk->queue;
if (unlikely(!q)) {
printk(KERN_ERR
@@ -2186,17 +2174,16 @@ generic_make_request_checks(struct bio *bio)
if (should_fail_bio(bio))
goto end_io;
- if (!bio->bi_partno) {
- if (unlikely(bio_check_ro(bio, &bio->bi_disk->part0)))
+ if (bio->bi_partno) {
+ if (unlikely(blk_partition_remap(bio)))
goto end_io;
} else {
- if (blk_partition_remap(bio))
+ if (unlikely(bio_check_ro(bio, &bio->bi_disk->part0)))
+ goto end_io;
+ if (unlikely(bio_check_eod(bio, get_capacity(bio->bi_disk))))
goto end_io;
}
- if (bio_check_eod(bio, nr_sectors))
- goto end_io;
-
/*
* Filter flush bio's early so that make_request based
* drivers without flush support don't have to worry
--
2.14.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v2] block: bio_check_eod() needs to consider partition
2018-03-13 9:18 [PATCH v2] block: bio_check_eod() needs to consider partition Christoph Hellwig
@ 2018-03-13 14:49 ` Jens Axboe
2018-03-13 16:25 ` Bart Van Assche
0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2018-03-13 14:49 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: jiufei.xue, linux-block
On 3/13/18 2:18 AM, Christoph Hellwig wrote:
> bio_check_eod() should check partiton size not the whole disk if
> bio->bi_partno is non-zero. Does this by taking the call to bio_check_eod
> into blk_partition_remap.
Applied, thanks.
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] block: bio_check_eod() needs to consider partition
2018-03-13 14:49 ` Jens Axboe
@ 2018-03-13 16:25 ` Bart Van Assche
2018-03-13 16:36 ` hch
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Bart Van Assche @ 2018-03-13 16:25 UTC (permalink / raw)
To: hch@lst.de, axboe@kernel.dk
Cc: jiufei.xue@linux.alibaba.com, linux-block@vger.kernel.org
T24gVHVlLCAyMDE4LTAzLTEzIGF0IDA3OjQ5IC0wNzAwLCBKZW5zIEF4Ym9lIHdyb3RlOg0KPiBP
biAzLzEzLzE4IDI6MTggQU0sIENocmlzdG9waCBIZWxsd2lnIHdyb3RlOg0KPiA+IGJpb19jaGVj
a19lb2QoKSBzaG91bGQgY2hlY2sgcGFydGl0b24gc2l6ZSBub3QgdGhlIHdob2xlIGRpc2sgaWYN
Cj4gPiBiaW8tPmJpX3BhcnRubyBpcyBub24temVyby4gIERvZXMgdGhpcyBieSB0YWtpbmcgdGhl
IGNhbGwgdG8gYmlvX2NoZWNrX2VvZA0KPiA+IGludG8gYmxrX3BhcnRpdGlvbl9yZW1hcC4NCj4g
DQo+IEFwcGxpZWQsIHRoYW5rcy4NCg0KSGVsbG8gQ2hyaXN0b3BoIGFuZCBKZW5zLA0KDQpJIHRo
aW5rIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2V2ZXJlIHJlZ3Jlc3Npb246IHdpdGgg
dGhpcyBwYXRjaCBhcHBsaWVkDQphIFZNIHRoYXQgSSB1c2UgZm9yIGtlcm5lbCB0ZXN0aW5nIGRv
ZXNuJ3QgYm9vdCBhbnltb3JlLiBJZiBJIHJldmVydCB0aGlzIHBhdGNoDQp0aGF0IFZNIGJvb3Rz
IGZpbmUgYWdhaW4uIFRoaXMgaXMgd2hhdCBJIHNlZSBvbiB0aGUgc2VyaWFsIGNvbnNvbGUgd2l0
aCB0aGlzDQpwYXRjaCBhcHBsaWVkOg0KDQp2aXJ0aW9fYmxrIHZpcnRpbzQ6IFt2ZGFdIDQxOTQz
MDQwIDUxMi1ieXRlIGxvZ2ljYWwgYmxvY2tzICgyMS41IEdCLzIwLjAgR2lCKQ0KIHZkYTogdmRh
MQ0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2Fu
dD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQg
b2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpCdWZm
ZXIgSS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBh
Z2UgcmVhZA0Kc2NzaSBob3N0MjogVmlydGlvIFNDU0kgSEJBDQpzY3NpIDI6MDowOjA6IERpcmVj
dC1BY2Nlc3MgICAgIFFFTVUgICAgIFFFTVUgSEFSRERJU0sgICAgMi41KyBQUTogMCBBTlNJOiA1
DQpzciAwOjA6MTowOiBbc3IwXSBzY3NpMy1tbWMgZHJpdmU6IDR4LzR4IGNkL3J3IHhhL2Zvcm0y
IHRyYXkNCmNkcm9tOiBVbmlmb3JtIENELVJPTSBkcml2ZXIgUmV2aXNpb246IDMuMjANCnNyIDA6
MDoxOjA6IEF0dGFjaGVkIHNjc2kgQ0QtUk9NIHNyMA0Kc2dfaW5xICgxNDIpIHVzZWQgZ3JlYXRl
c3Qgc3RhY2sgZGVwdGg6IDI2OTEyIGJ5dGVzIGxlZnQNCnN5c3RlbWQtdWRldmRbOTBdOiBjb3Vs
ZCBub3QgY3JlYXRlIGRldmljZTogSW52YWxpZCBhcmd1bWVudA0Kc3lzdGVtZC11ZGV2ZFsxMTBd
OiBJbnNlcnRlZCAndmlydGlvX3Njc2knDQpzeXN0ZW1kLXVkZXZkWzkwXTogVmFsaWRhdGUgbW9k
dWxlIGluZGV4DQpzeXN0ZW1kLXVkZXZkWzExMF06IHBhc3NlZCBkZXZpY2UgdG8gbmV0bGluayBt
b25pdG9yIDB4NTU2NDI2OTNlZWQwDQpzeXN0ZW1kLXVkZXZkWzkwXTogQ2hlY2sgaWYgbGluayBj
b25maWd1cmF0aW9uIG5lZWRzIHJlbG9hZGluZy4NCnN5c3RlbWQtdWRldmRbOTBdOiBwYXNzZWQg
MTQ2IGJ5dGUgZGV2aWNlIHRvIG5ldGxpbmsgbW9uaXRvciAweDU1NjQyNjkyZTdkMA0Kc3lzdGVt
ZC11ZGV2ZFsxMjNdOiBwYXNzZWQgZGV2aWNlIHRvIG5ldGxpbmsgbW9uaXRvciAweDU1NjQyNjk4
MGU4MA0Kc3lzdGVtZC11ZGV2ZFs5MF06IHBhc3NlZCAxNzYgYnl0ZSBkZXZpY2UgdG8gbmV0bGlu
ayBtb25pdG9yIDB4NTU2NDI2OTJlN2QwDQpzeXN0ZW1kLXVkZXZkWzEyM106IHBhc3NlZCBkZXZp
Y2UgdG8gbmV0bGluayBtb25pdG9yIDB4NTU2NDI2OTgwZTgwDQpzeXN0ZW1kLXVkZXZkWzkwXTog
cGFzc2VkIDE3OSBieXRlIGRldmljZSB0byBuZXRsaW5rIG1vbml0b3IgMHg1NTY0MjY5MmU3ZDAN
CnNkIDI6MDowOjA6IFBvd2VyLW9uIG9yIGRldmljZSByZXNldCBvY2N1cnJlZA0Kc2QgMjowOjA6
MDogW3NkYV0gNTI0Mjg4MCA1MTItYnl0ZSBsb2dpY2FsIGJsb2NrczogKDIuNjggR0IvMi41MCBH
aUIpDQpzZCAyOjA6MDowOiBbc2RhXSBXcml0ZSBQcm90ZWN0IGlzIG9mZg0Kc2QgMjowOjA6MDog
W3NkYV0gTW9kZSBTZW5zZTogNjMgMDAgMDAgMDgNCnNkIDI6MDowOjA6IFtzZGFdIFdyaXRlIGNh
Y2hlOiBlbmFibGVkLCByZWFkIGNhY2hlOiBlbmFibGVkLCBkb2Vzbid0IHN1cHBvcnQgRFBPIG9y
IEZVQQ0Kc3lzdGVtZC11ZGV2ZCAoMTIzKSB1c2VkIGdyZWF0ZXN0IHN0YWNrIGRlcHRoOiAyNjU3
NiBieXRlcyBsZWZ0DQpzeXN0ZW1kLXVkZXZkICgxMjEpIHVzZWQgZ3JlYXRlc3Qgc3RhY2sgZGVw
dGg6IDI0OTI4IGJ5dGVzIGxlZnQNCnN5c3RlbWQtdWRldmQgKDExMCkgdXNlZCBncmVhdGVzdCBz
dGFjayBkZXB0aDogMjQ4NDggYnl0ZXMgbGVmdA0Kc2QgMjowOjA6MDogW3NkYV0gQXR0YWNoZWQg
U0NTSSBkaXNrDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBy
dz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5
b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5
NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1Miwg
YXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0K
dmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nl
c3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9
NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0
MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRl
dmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0
byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3Miwg
bGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxv
Y2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5k
IG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0
ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0
MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2lj
YWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQpzeXN0ZW1kLXVkZXZkWzkwXTogVmFs
aWRhdGUgbW9kdWxlIGluZGV4DQpzeXN0ZW1kLXVkZXZkWzkwXTogQ2hlY2sgaWYgbGluayBjb25m
aWd1cmF0aW9uIG5lZWRzIHJlbG9hZGluZy4NCnN5c3RlbWQtdWRldmRbMjA5XTogSU1QT1JUICcv
dXNyL2Jpbi9zZ19pbnEgLS1leHBvcnQgL2Rldi9zZGEnIC9saWIvdWRldi9ydWxlcy5kLzU1LXNj
c2ktc2czX2lkLnJ1bGVzOjEwDQpzeXN0ZW1kLXVkZXZkWzIxMV06IHN0YXJ0aW5nICcvdXNyL2Jp
bi9zZ19pbnEgLS1leHBvcnQgL2Rldi9zZGEnDQpzeXN0ZW1kLXVkZXZkWzIxMF06IElNUE9SVCBi
dWlsdGluICdwYXRoX2lkJyAvbGliL3VkZXYvcnVsZXMuZC82MC1wZXJzaXN0ZW50LXN0b3JhZ2Uu
cnVsZXM6NjYNCnN5c3RlbWQtdWRldmRbMjEwXTogTElOSyAnZGlzay9ieS1wYXRoL3BjaS0wMDAw
OjAwOjA3LjAnIC9saWIvdWRldi9ydWxlcy5kLzYwLXBlcnNpc3RlbnQtc3RvcmFnZS5ydWxlczo2
OA0Kc3lzdGVtZC11ZGV2ZFsyMTBdOiBMSU5LICdkaXNrL2J5LXBhdGgvdmlydGlvLXBjaS0wMDAw
OjAwOjA3LjAnIC9saWIvdWRldi9ydWxlcy5kLzYwLXBlcnNpc3RlbnQtc3RvcmFnZS5ydWxlczo3
Mg0Kc3lzdGVtZC11ZGV2ZFsyMDldOiAnL3Vzci9iaW4vc2dfaW5xIC0tZXhwb3J0IC9kZXYvc2Rh
JyhvdXQpICdTQ1NJX1RQR1M9MCcNCnN5c3RlbWQtdWRldmRbMjEwXTogSU1QT1JUIGJ1aWx0aW4g
J2Jsa2lkJyAvbGliL3VkZXYvcnVsZXMuZC82MC1wZXJzaXN0ZW50LXN0b3JhZ2UucnVsZXM6ODMN
CnN5c3RlbWQtdWRldmRbMjA5XTogJy91c3IvYmluL3NnX2lucSAtLWV4cG9ydCAvZGV2L3NkYSco
b3V0KSAnU0NTSV9UWVBFPWRpc2snDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRl
dmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0
byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3Miwg
bGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxv
Y2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5k
IG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0
ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0
MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2lj
YWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlv
bmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0
NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2Fu
dD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEs
IGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2Vz
cyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00
MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9
MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2
IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRv
IGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBs
aW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZk
YTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Ig
b24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRl
bXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQw
ODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZp
Y2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08g
ZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFk
DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50
PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBv
ZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZl
ciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFn
ZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0w
LCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25k
IGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQN
CkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5
bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRh
OiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3Mg
YmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5
Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1
MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmlj
ZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBh
Y2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGlt
aXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sg
NTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9m
IGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1w
dCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3
MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwg
YmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQg
ZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0K
YXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00
MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZkYTEsIGxv
Z2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBi
ZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkz
ODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwg
d2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2IHZk
YTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0IHRvIGFj
Y2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1p
dD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTog
cnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJyb3Igb24g
ZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQphdHRlbXB0
IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcy
LCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UN
CnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJL08gZXJy
b3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSByZWFkDQph
dHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQx
OTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBk
ZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCkJ1ZmZlciBJ
L08gZXJyb3Igb24gZGV2IHZkYTEsIGxvZ2ljYWwgYmxvY2sgNTI0MjM1MiwgYXN5bmMgcGFnZSBy
ZWFkDQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3
YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVu
ZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0
dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5
NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRl
dmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYnVmZmVyX2lv
X2Vycm9yOiAxIGNhbGxiYWNrcyBzdXBwcmVzc2VkDQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldiB2
ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBh
Y2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGlt
aXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6
IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpCdWZmZXIgSS9PIGVycm9yIG9u
IGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1w
dCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3
MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNl
DQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpCdWZmZXIgSS9PIGVy
cm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0K
YXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00
MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2Yg
ZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpCdWZmZXIg
SS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2Ug
cmVhZA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwg
d2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBl
bmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpC
dWZmZXIgSS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5j
IHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTog
cnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJl
eW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4
OTQ0DQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIs
IGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UN
CnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNj
ZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0
PTQxOTM4OTQ0DQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJsb2NrIDUy
NDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBk
ZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQg
dG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIs
IGxpbWl0PTQxOTM4OTQ0DQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dpY2FsIGJs
b2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVu
ZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0
dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5
NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldiB2ZGExLCBsb2dp
Y2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5
b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5
NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdh
bnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldiB2ZGEx
LCBsb2dpY2FsIGJsb2NrIDUyNDIzNTIsIGFzeW5jIHBhZ2UgcmVhZA0KYXR0ZW1wdCB0byBhY2Nl
c3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9
NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3
PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlv
bmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0
NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2Fu
dD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmJ1ZmZlcl9pb19lcnJvcjogMSBjYWxsYmFja3Mg
c3VwcHJlc3NlZA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1
MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2Yg
ZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0
IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcy
LCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBi
bG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBl
bmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQph
dHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQx
OTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9n
aWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJl
eW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4
OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3
YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRh
MSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNj
ZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0
PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBy
dz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBk
ZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQg
dG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIs
IGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0K
dmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJv
ciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0
dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5
NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRl
dmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkv
TyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJl
YWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdh
bnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5k
IG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVm
ZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBw
YWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3
PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlv
bmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0
NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBh
c3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2
ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2Vz
cyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00
MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQy
MzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2
aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRv
IGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBs
aW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9j
ayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQg
b2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRl
bXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQw
ODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNh
bCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9u
ZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0
DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50
PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwg
bG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNz
IGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQx
OTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0w
LCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYg
dmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8g
YWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxp
bWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRh
OiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBv
biBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVt
cHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4
NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmlj
ZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBl
cnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQN
CmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9
NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9m
IGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVy
IEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdl
IHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAs
IHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQg
ZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0K
QnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3lu
YyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6
IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBi
ZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkz
ODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUy
LCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNl
DQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFj
Y2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1p
dD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTog
cnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJl
eW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4
OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3
YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVu
ZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmJ1
ZmZlcl9pb19lcnJvcjogMiBjYWxsYmFja3Mgc3VwcHJlc3NlZA0KQnVmZmVyIEkvTyBlcnJvciBv
biBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVt
cHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4
NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmlj
ZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBl
cnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQN
CmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9
NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9m
IGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVy
IEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdl
IHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAs
IHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQg
ZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0K
QnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3lu
YyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6
IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBi
ZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkz
ODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUy
LCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNl
DQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFj
Y2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1p
dD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1
MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2Yg
ZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0
IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcy
LCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBi
bG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBl
bmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQph
dHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQx
OTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9n
aWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJl
eW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4
OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3
YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRh
MSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNj
ZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0
PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBy
dz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBk
ZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQg
dG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIs
IGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0K
dmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KYXR0ZW1wdCB0byBhY2Nl
c3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2FudD00MTk0MDg3MiwgbGltaXQ9
NDE5Mzg5NDQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3
PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlv
bmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0
NA0KYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UNCnZkYTogcnc9MCwgd2Fu
dD00MTk0MDg3MiwgbGltaXQ9NDE5Mzg5NDQNCmJ1ZmZlcl9pb19lcnJvcjogMiBjYWxsYmFja3Mg
c3VwcHJlc3NlZA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1
MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2Yg
ZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0
IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcy
LCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBi
bG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBl
bmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQph
dHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQx
OTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9n
aWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJl
eW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4
OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBydz0wLCB3
YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRh
MSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQgdG8gYWNj
ZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIsIGxpbWl0
PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0KdmRhOiBy
dz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJvciBvbiBk
ZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0dGVtcHQg
dG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5NDA4NzIs
IGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZQ0K
dmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkvTyBlcnJv
ciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJlYWQNCmF0
dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdhbnQ9NDE5
NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRl
dmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVmZmVyIEkv
TyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBwYWdlIHJl
YWQNCmF0dGVtcHQgdG8gYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlDQp2ZGE6IHJ3PTAsIHdh
bnQ9NDE5NDA4NzIsIGxpbWl0PTQxOTM4OTQ0DQphdHRlbXB0IHRvIGFjY2VzcyBiZXlvbmQgZW5k
IG9mIGRldmljZQ0KdmRhOiBydz0wLCB3YW50PTQxOTQwODcyLCBsaW1pdD00MTkzODk0NA0KQnVm
ZmVyIEkvTyBlcnJvciBvbiBkZXYgdmRhMSwgbG9naWNhbCBibG9jayA1MjQyMzUyLCBhc3luYyBw
YWdlIHJlYWQNCg0KDQo=
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v2] block: bio_check_eod() needs to consider partition
2018-03-13 16:25 ` Bart Van Assche
@ 2018-03-13 16:36 ` hch
2018-03-13 17:37 ` Jens Axboe
2018-03-14 13:03 ` hch
2 siblings, 0 replies; 7+ messages in thread
From: hch @ 2018-03-13 16:36 UTC (permalink / raw)
To: Bart Van Assche
Cc: hch@lst.de, axboe@kernel.dk, jiufei.xue@linux.alibaba.com,
linux-block@vger.kernel.org
On Tue, Mar 13, 2018 at 04:25:40PM +0000, Bart Van Assche wrote:
> On Tue, 2018-03-13 at 07:49 -0700, Jens Axboe wrote:
> > On 3/13/18 2:18 AM, Christoph Hellwig wrote:
> > > bio_check_eod() should check partiton size not the whole disk if
> > > bio->bi_partno is non-zero. Does this by taking the call to bio_check_eod
> > > into blk_partition_remap.
> >
> > Applied, thanks.
>
> Hello Christoph and Jens,
>
> I think that this patch introduces a severe regression: with this patch applied
> a VM that I use for kernel testing doesn't boot anymore. If I revert this patch
> that VM boots fine again. This is what I see on the serial console with this
> patch applied:
Ok, please revert this for now. I'm off for today and will look into
it tomorrow.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] block: bio_check_eod() needs to consider partition
2018-03-13 16:25 ` Bart Van Assche
2018-03-13 16:36 ` hch
@ 2018-03-13 17:37 ` Jens Axboe
2018-03-14 13:03 ` hch
2 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2018-03-13 17:37 UTC (permalink / raw)
To: Bart Van Assche, hch@lst.de
Cc: jiufei.xue@linux.alibaba.com, linux-block@vger.kernel.org
On 3/13/18 9:25 AM, Bart Van Assche wrote:
> On Tue, 2018-03-13 at 07:49 -0700, Jens Axboe wrote:
>> On 3/13/18 2:18 AM, Christoph Hellwig wrote:
>>> bio_check_eod() should check partiton size not the whole disk if
>>> bio->bi_partno is non-zero. Does this by taking the call to bio_check_eod
>>> into blk_partition_remap.
>>
>> Applied, thanks.
>
> Hello Christoph and Jens,
>
> I think that this patch introduces a severe regression: with this patch applied
> a VM that I use for kernel testing doesn't boot anymore. If I revert this patch
> that VM boots fine again. This is what I see on the serial console with this
> patch applied:
>
> virtio_blk virtio4: [vda] 41943040 512-byte logical blocks (21.5 GB/20.0 GiB)
> vda: vda1
> attempt to access beyond end of device
> vda: rw=0, want=41940872, limit=41938944
> attempt to access beyond end of device
> vda: rw=0, want=41940872, limit=41938944
I've killed the patch for now, thanks for the quick test, Bart.
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] block: bio_check_eod() needs to consider partition
2018-03-13 16:25 ` Bart Van Assche
2018-03-13 16:36 ` hch
2018-03-13 17:37 ` Jens Axboe
@ 2018-03-14 13:03 ` hch
2018-03-14 15:08 ` Bart Van Assche
2 siblings, 1 reply; 7+ messages in thread
From: hch @ 2018-03-14 13:03 UTC (permalink / raw)
To: Bart Van Assche
Cc: hch@lst.de, axboe@kernel.dk, jiufei.xue@linux.alibaba.com,
linux-block@vger.kernel.org
Hi Bart,
can you test the version below?
---
>From a68a8518158e31d66a0dc4f4e795ca3ceb83752c Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Tue, 13 Mar 2018 09:27:30 +0100
Subject: block: bio_check_eod() needs to consider partition
bio_check_eod() should check partiton size not the whole disk if
bio->bi_partno is non-zero. Does this by taking the call to bio_check_eod
into blk_partition_remap.
Based on an earlier patch from Jiufei Xue.
Fixes: 74d46992e0d9 ("block: replace bi_bdev with a gendisk pointer and partitions index")
Reported-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
block/blk-core.c | 93 ++++++++++++++++++++++++--------------------------------
1 file changed, 40 insertions(+), 53 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 6d82c4f7fadd..47ee24611126 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2023,7 +2023,7 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
return BLK_QC_T_NONE;
}
-static void handle_bad_sector(struct bio *bio)
+static void handle_bad_sector(struct bio *bio, sector_t maxsector)
{
char b[BDEVNAME_SIZE];
@@ -2031,7 +2031,7 @@ static void handle_bad_sector(struct bio *bio)
printk(KERN_INFO "%s: rw=%d, want=%Lu, limit=%Lu\n",
bio_devname(bio, b), bio->bi_opf,
(unsigned long long)bio_end_sector(bio),
- (long long)get_capacity(bio->bi_disk));
+ (long long)maxsector);
}
#ifdef CONFIG_FAIL_MAKE_REQUEST
@@ -2092,68 +2092,59 @@ static noinline int should_fail_bio(struct bio *bio)
}
ALLOW_ERROR_INJECTION(should_fail_bio, ERRNO);
+/*
+ * Check whether this bio extends beyond the end of the device or partition.
+ * This may well happen - the kernel calls bread() without checking the size of
+ * the device, e.g., when mounting a file system.
+ */
+static inline int bio_check_eod(struct bio *bio, sector_t maxsector)
+{
+ unsigned int nr_sectors = bio_sectors(bio);
+
+ if (nr_sectors && maxsector &&
+ (nr_sectors > maxsector ||
+ bio->bi_iter.bi_sector > maxsector - nr_sectors)) {
+ handle_bad_sector(bio, maxsector);
+ return -EIO;
+ }
+ return 0;
+}
+
/*
* Remap block n of partition p to block n+start(p) of the disk.
*/
static inline int blk_partition_remap(struct bio *bio)
{
struct hd_struct *p;
- int ret = 0;
+ int ret = -EIO;
rcu_read_lock();
p = __disk_get_part(bio->bi_disk, bio->bi_partno);
- if (unlikely(!p || should_fail_request(p, bio->bi_iter.bi_size) ||
- bio_check_ro(bio, p))) {
- ret = -EIO;
+ if (unlikely(!p))
+ goto out;
+ if (unlikely(should_fail_request(p, bio->bi_iter.bi_size)))
+ goto out;
+ if (unlikely(bio_check_ro(bio, p)))
goto out;
- }
/*
* Zone reset does not include bi_size so bio_sectors() is always 0.
* Include a test for the reset op code and perform the remap if needed.
*/
- if (!bio_sectors(bio) && bio_op(bio) != REQ_OP_ZONE_RESET)
- goto out;
-
- bio->bi_iter.bi_sector += p->start_sect;
- bio->bi_partno = 0;
- trace_block_bio_remap(bio->bi_disk->queue, bio, part_devt(p),
- bio->bi_iter.bi_sector - p->start_sect);
-
+ if (bio_sectors(bio) || bio_op(bio) == REQ_OP_ZONE_RESET) {
+ if (bio_check_eod(bio, part_nr_sects_read(p)))
+ goto out;
+ bio->bi_iter.bi_sector += p->start_sect;
+ bio->bi_partno = 0;
+ trace_block_bio_remap(bio->bi_disk->queue, bio, part_devt(p),
+ bio->bi_iter.bi_sector - p->start_sect);
+ }
+ ret = 0;
out:
rcu_read_unlock();
return ret;
}
-/*
- * Check whether this bio extends beyond the end of the device.
- */
-static inline int bio_check_eod(struct bio *bio, unsigned int nr_sectors)
-{
- sector_t maxsector;
-
- if (!nr_sectors)
- return 0;
-
- /* Test device or partition size, when known. */
- maxsector = get_capacity(bio->bi_disk);
- if (maxsector) {
- sector_t sector = bio->bi_iter.bi_sector;
-
- if (maxsector < nr_sectors || maxsector - nr_sectors < sector) {
- /*
- * This may well happen - the kernel calls bread()
- * without checking the size of the device, e.g., when
- * mounting a device.
- */
- handle_bad_sector(bio);
- return 1;
- }
- }
-
- return 0;
-}
-
static noinline_for_stack bool
generic_make_request_checks(struct bio *bio)
{
@@ -2164,9 +2155,6 @@ generic_make_request_checks(struct bio *bio)
might_sleep();
- if (bio_check_eod(bio, nr_sectors))
- goto end_io;
-
q = bio->bi_disk->queue;
if (unlikely(!q)) {
printk(KERN_ERR
@@ -2186,17 +2174,16 @@ generic_make_request_checks(struct bio *bio)
if (should_fail_bio(bio))
goto end_io;
- if (!bio->bi_partno) {
- if (unlikely(bio_check_ro(bio, &bio->bi_disk->part0)))
+ if (bio->bi_partno) {
+ if (unlikely(blk_partition_remap(bio)))
goto end_io;
} else {
- if (blk_partition_remap(bio))
+ if (unlikely(bio_check_ro(bio, &bio->bi_disk->part0)))
+ goto end_io;
+ if (unlikely(bio_check_eod(bio, get_capacity(bio->bi_disk))))
goto end_io;
}
- if (bio_check_eod(bio, nr_sectors))
- goto end_io;
-
/*
* Filter flush bio's early so that make_request based
* drivers without flush support don't have to worry
--
2.14.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v2] block: bio_check_eod() needs to consider partition
2018-03-14 13:03 ` hch
@ 2018-03-14 15:08 ` Bart Van Assche
0 siblings, 0 replies; 7+ messages in thread
From: Bart Van Assche @ 2018-03-14 15:08 UTC (permalink / raw)
To: hch@lst.de
Cc: jiufei.xue@linux.alibaba.com, linux-block@vger.kernel.org,
axboe@kernel.dk
T24gV2VkLCAyMDE4LTAzLTE0IGF0IDE0OjAzICswMTAwLCBoY2hAbHN0LmRlIHdyb3RlOg0KPiBj
YW4geW91IHRlc3QgdGhlIHZlcnNpb24gYmVsb3c/DQoNCkhlbGxvIENocmlzdG9waCwNCg0KVGhl
IHNhbWUgVk0gdGhhdCBmYWlsZWQgdG8gYm9vdCB3aXRoIHYyIG9mIHRoaXMgcGF0Y2ggYm9vdHMg
ZmluZSB3aXRoIHRoaXMNCnBhdGNoLg0KDQpUaGFua3MsDQoNCkJhcnQuDQoNCg0KDQo=
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-03-14 15:08 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-13 9:18 [PATCH v2] block: bio_check_eod() needs to consider partition Christoph Hellwig
2018-03-13 14:49 ` Jens Axboe
2018-03-13 16:25 ` Bart Van Assche
2018-03-13 16:36 ` hch
2018-03-13 17:37 ` Jens Axboe
2018-03-14 13:03 ` hch
2018-03-14 15:08 ` Bart Van Assche
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox