mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
Merge tag 'block-6.14-20250214' of git://git.kernel.dk/linux
Pull block fixes from Jens Axboe: - Fix for request rejection for batch addition - Fix a few issues for bogus mac partition tables * tag 'block-6.14-20250214' of git://git.kernel.dk/linux: partitions: mac: fix handling of bogus partition table block: cleanup and fix batch completion adding conditions
This commit is contained in:
@@ -53,13 +53,25 @@ int mac_partition(struct parsed_partitions *state)
|
||||
}
|
||||
secsize = be16_to_cpu(md->block_size);
|
||||
put_dev_sector(sect);
|
||||
|
||||
/*
|
||||
* If the "block size" is not a power of 2, things get weird - we might
|
||||
* end up with a partition straddling a sector boundary, so we wouldn't
|
||||
* be able to read a partition entry with read_part_sector().
|
||||
* Real block sizes are probably (?) powers of two, so just require
|
||||
* that.
|
||||
*/
|
||||
if (!is_power_of_2(secsize))
|
||||
return -1;
|
||||
datasize = round_down(secsize, 512);
|
||||
data = read_part_sector(state, datasize / 512, §);
|
||||
if (!data)
|
||||
return -1;
|
||||
partoffset = secsize % 512;
|
||||
if (partoffset + sizeof(*part) > datasize)
|
||||
if (partoffset + sizeof(*part) > datasize) {
|
||||
put_dev_sector(sect);
|
||||
return -1;
|
||||
}
|
||||
part = (struct mac_partition *) (data + partoffset);
|
||||
if (be16_to_cpu(part->signature) != MAC_PARTITION_MAGIC) {
|
||||
put_dev_sector(sect);
|
||||
@@ -112,8 +124,8 @@ int mac_partition(struct parsed_partitions *state)
|
||||
int i, l;
|
||||
|
||||
goodness++;
|
||||
l = strlen(part->name);
|
||||
if (strcmp(part->name, "/") == 0)
|
||||
l = strnlen(part->name, sizeof(part->name));
|
||||
if (strncmp(part->name, "/", sizeof(part->name)) == 0)
|
||||
goodness++;
|
||||
for (i = 0; i <= l - 4; ++i) {
|
||||
if (strncasecmp(part->name + i, "root",
|
||||
|
||||
@@ -861,12 +861,22 @@ static inline bool blk_mq_add_to_batch(struct request *req,
|
||||
void (*complete)(struct io_comp_batch *))
|
||||
{
|
||||
/*
|
||||
* blk_mq_end_request_batch() can't end request allocated from
|
||||
* sched tags
|
||||
* Check various conditions that exclude batch processing:
|
||||
* 1) No batch container
|
||||
* 2) Has scheduler data attached
|
||||
* 3) Not a passthrough request and end_io set
|
||||
* 4) Not a passthrough request and an ioerror
|
||||
*/
|
||||
if (!iob || (req->rq_flags & RQF_SCHED_TAGS) || ioerror ||
|
||||
(req->end_io && !blk_rq_is_passthrough(req)))
|
||||
if (!iob)
|
||||
return false;
|
||||
if (req->rq_flags & RQF_SCHED_TAGS)
|
||||
return false;
|
||||
if (!blk_rq_is_passthrough(req)) {
|
||||
if (req->end_io)
|
||||
return false;
|
||||
if (ioerror < 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!iob->complete)
|
||||
iob->complete = complete;
|
||||
|
||||
Reference in New Issue
Block a user