Skip to content

Commit 914e170

Browse files
committed
Merge tag 'block-6.8-2024-01-26' of git://git.kernel.dk/linux
Pull block fixes from Jens Axboe: - RCU warning fix for md (Mikulas) - Fix for an aoe issue that lockdep rightfully complained about (Maksim) - Fix for an error code change in partitioning that caused a regression with some tools (Li) - Fix for a data direction warning with bi-direction commands (Christian) * tag 'block-6.8-2024-01-26' of git://git.kernel.dk/linux: md: fix a suspicious RCU usage warning aoe: avoid potential deadlock at set_capacity block: Fix WARNING in _copy_from_iter block: Move checking GENHD_FL_NO_PART to bdev_add_partition()
2 parents cced1c5 + 5af2c3f commit 914e170

File tree

5 files changed

+20
-7
lines changed

5 files changed

+20
-7
lines changed

block/blk-map.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,19 @@ static int bio_copy_user_iov(struct request *rq, struct rq_map_data *map_data,
205205
/*
206206
* success
207207
*/
208-
if ((iov_iter_rw(iter) == WRITE &&
209-
(!map_data || !map_data->null_mapped)) ||
210-
(map_data && map_data->from_user)) {
208+
if (iov_iter_rw(iter) == WRITE &&
209+
(!map_data || !map_data->null_mapped)) {
211210
ret = bio_copy_from_iter(bio, iter);
212211
if (ret)
213212
goto cleanup;
213+
} else if (map_data && map_data->from_user) {
214+
struct iov_iter iter2 = *iter;
215+
216+
/* This is the copy-in part of SG_DXFER_TO_FROM_DEV. */
217+
iter2.data_source = ITER_SOURCE;
218+
ret = bio_copy_from_iter(bio, &iter2);
219+
if (ret)
220+
goto cleanup;
214221
} else {
215222
if (bmd->is_our_pages)
216223
zero_fill_bio(bio);

block/ioctl.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ static int blkpg_do_ioctl(struct block_device *bdev,
2020
struct blkpg_partition p;
2121
sector_t start, length;
2222

23-
if (disk->flags & GENHD_FL_NO_PART)
24-
return -EINVAL;
2523
if (!capable(CAP_SYS_ADMIN))
2624
return -EACCES;
2725
if (copy_from_user(&p, upart, sizeof(struct blkpg_partition)))

block/partitions/core.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,11 @@ int bdev_add_partition(struct gendisk *disk, int partno, sector_t start,
439439
goto out;
440440
}
441441

442+
if (disk->flags & GENHD_FL_NO_PART) {
443+
ret = -EINVAL;
444+
goto out;
445+
}
446+
442447
if (partition_overlaps(disk, start, length, -1)) {
443448
ret = -EBUSY;
444449
goto out;

drivers/block/aoe/aoeblk.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ aoeblk_gdalloc(void *vp)
333333
struct gendisk *gd;
334334
mempool_t *mp;
335335
struct blk_mq_tag_set *set;
336+
sector_t ssize;
336337
ulong flags;
337338
int late = 0;
338339
int err;
@@ -396,7 +397,7 @@ aoeblk_gdalloc(void *vp)
396397
gd->minors = AOE_PARTITIONS;
397398
gd->fops = &aoe_bdops;
398399
gd->private_data = d;
399-
set_capacity(gd, d->ssize);
400+
ssize = d->ssize;
400401
snprintf(gd->disk_name, sizeof gd->disk_name, "etherd/e%ld.%d",
401402
d->aoemajor, d->aoeminor);
402403

@@ -405,6 +406,8 @@ aoeblk_gdalloc(void *vp)
405406

406407
spin_unlock_irqrestore(&d->lock, flags);
407408

409+
set_capacity(gd, ssize);
410+
408411
err = device_add_disk(NULL, gd, aoe_attr_groups);
409412
if (err)
410413
goto out_disk_cleanup;

drivers/md/raid1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2262,7 +2262,7 @@ static void fix_read_error(struct r1conf *conf, struct r1bio *r1_bio)
22622262
int sectors = r1_bio->sectors;
22632263
int read_disk = r1_bio->read_disk;
22642264
struct mddev *mddev = conf->mddev;
2265-
struct md_rdev *rdev = rcu_dereference(conf->mirrors[read_disk].rdev);
2265+
struct md_rdev *rdev = conf->mirrors[read_disk].rdev;
22662266

22672267
if (exceed_read_errors(mddev, rdev)) {
22682268
r1_bio->bios[r1_bio->read_disk] = IO_BLOCKED;

0 commit comments

Comments
 (0)