ANDROID: dm: Split zoned writes at the top of the stack
Prevent that __submit_bio_noacct() reorders zoned writes by making the topmost dm driver split bios. Bug: 415836627 Change-Id: I4c9e3a9d9747ec85b27ddb20612fcc23cbca7091 Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
+7
-4
@@ -1788,11 +1788,14 @@ static inline bool dm_zone_bio_needs_split(struct mapped_device *md,
|
|||||||
struct bio *bio)
|
struct bio *bio)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* For mapped device that need zone append emulation, we must
|
* For a mapped device that needs zone append emulation, we must
|
||||||
* split any large BIO that straddles zone boundaries.
|
* split any large BIO that straddles zone boundaries. Additionally,
|
||||||
|
* split sequential zoned writes to prevent that splitting lower in the
|
||||||
|
* stack causes bio reordering.
|
||||||
*/
|
*/
|
||||||
return dm_emulate_zone_append(md) && bio_straddles_zones(bio) &&
|
return ((dm_emulate_zone_append(md) && bio_straddles_zones(bio)) ||
|
||||||
!bio_flagged(bio, BIO_ZONE_WRITE_PLUGGING);
|
(bio_op(bio) == REQ_OP_WRITE && bdev_is_zoned(bio->bi_bdev))) &&
|
||||||
|
!bio_flagged(bio, BIO_ZONE_WRITE_PLUGGING);
|
||||||
}
|
}
|
||||||
static inline bool dm_zone_plug_bio(struct mapped_device *md, struct bio *bio)
|
static inline bool dm_zone_plug_bio(struct mapped_device *md, struct bio *bio)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user