Skip to content

Commit 4f1ba49

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.dk/linux-block
* 'for-linus' of git://git.kernel.dk/linux-block: block: Use hlist_entry() for io_context.cic_list.first cfq-iosched: Remove bogus check in queue_fail path xen/blkback: potential null dereference in error handling xen/blkback: don't call vbd_size() if bd_disk is NULL block: blkdev_get() should access ->bd_disk only after success CFQ: Fix typo and remove unnecessary semicolon block: remove unwanted semicolons Revert "block: Remove extra discard_alignment from hd_struct." nbd: adjust 'max_part' according to part_shift nbd: limit module parameters to a sane value nbd: pass MSG_* flags to kernel_recvmsg() block: improve the bio_add_page() and bio_add_pc_page() descriptions
2 parents 39b4a46 + e3a57b3 commit 4f1ba49

File tree

9 files changed

+41
-28
lines changed

9 files changed

+41
-28
lines changed

block/blk-ioc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ static void cfq_dtor(struct io_context *ioc)
2121
if (!hlist_empty(&ioc->cic_list)) {
2222
struct cfq_io_context *cic;
2323

24-
cic = list_entry(ioc->cic_list.first, struct cfq_io_context,
24+
cic = hlist_entry(ioc->cic_list.first, struct cfq_io_context,
2525
cic_list);
2626
cic->dtor(ioc);
2727
}
@@ -57,7 +57,7 @@ static void cfq_exit(struct io_context *ioc)
5757
if (!hlist_empty(&ioc->cic_list)) {
5858
struct cfq_io_context *cic;
5959

60-
cic = list_entry(ioc->cic_list.first, struct cfq_io_context,
60+
cic = hlist_entry(ioc->cic_list.first, struct cfq_io_context,
6161
cic_list);
6262
cic->exit(ioc);
6363
}

block/cfq-iosched.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ struct cfq_group {
185185
int nr_cfqq;
186186

187187
/*
188-
* Per group busy queus average. Useful for workload slice calc. We
188+
* Per group busy queues average. Useful for workload slice calc. We
189189
* create the array for each prio class but at run time it is used
190190
* only for RT and BE class and slot for IDLE class remains unused.
191191
* This is primarily done to avoid confusion and a gcc warning.
@@ -369,16 +369,16 @@ CFQ_CFQQ_FNS(wait_busy);
369369
#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \
370370
blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \
371371
cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \
372-
blkg_path(&(cfqq)->cfqg->blkg), ##args);
372+
blkg_path(&(cfqq)->cfqg->blkg), ##args)
373373

374374
#define cfq_log_cfqg(cfqd, cfqg, fmt, args...) \
375375
blk_add_trace_msg((cfqd)->queue, "%s " fmt, \
376-
blkg_path(&(cfqg)->blkg), ##args); \
376+
blkg_path(&(cfqg)->blkg), ##args) \
377377

378378
#else
379379
#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \
380380
blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args)
381-
#define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {} while (0);
381+
#define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {} while (0)
382382
#endif
383383
#define cfq_log(cfqd, fmt, args...) \
384384
blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args)
@@ -3786,9 +3786,6 @@ cfq_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask)
37863786
return 0;
37873787

37883788
queue_fail:
3789-
if (cic)
3790-
put_io_context(cic->ioc);
3791-
37923789
cfq_schedule_dispatch(cfqd);
37933790
spin_unlock_irqrestore(q->queue_lock, flags);
37943791
cfq_log(cfqd, "set_request fail");

drivers/block/nbd.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ static int sock_xmit(struct nbd_device *lo, int send, void *buf, int size,
192192
if (lo->xmit_timeout)
193193
del_timer_sync(&ti);
194194
} else
195-
result = kernel_recvmsg(sock, &msg, &iov, 1, size, 0);
195+
result = kernel_recvmsg(sock, &msg, &iov, 1, size,
196+
msg.msg_flags);
196197

197198
if (signal_pending(current)) {
198199
siginfo_t info;
@@ -753,9 +754,26 @@ static int __init nbd_init(void)
753754
return -ENOMEM;
754755

755756
part_shift = 0;
756-
if (max_part > 0)
757+
if (max_part > 0) {
757758
part_shift = fls(max_part);
758759

760+
/*
761+
* Adjust max_part according to part_shift as it is exported
762+
* to user space so that user can know the max number of
763+
* partition kernel should be able to manage.
764+
*
765+
* Note that -1 is required because partition 0 is reserved
766+
* for the whole disk.
767+
*/
768+
max_part = (1UL << part_shift) - 1;
769+
}
770+
771+
if ((1UL << part_shift) > DISK_MAX_PARTS)
772+
return -EINVAL;
773+
774+
if (nbds_max > 1UL << (MINORBITS - part_shift))
775+
return -EINVAL;
776+
759777
for (i = 0; i < nbds_max; i++) {
760778
struct gendisk *disk = alloc_disk(1 << part_shift);
761779
if (!disk)

drivers/block/xen-blkback/blkback.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -809,11 +809,13 @@ static int __init xen_blkif_init(void)
809809
failed_init:
810810
kfree(blkbk->pending_reqs);
811811
kfree(blkbk->pending_grant_handles);
812-
for (i = 0; i < mmap_pages; i++) {
813-
if (blkbk->pending_pages[i])
814-
__free_page(blkbk->pending_pages[i]);
812+
if (blkbk->pending_pages) {
813+
for (i = 0; i < mmap_pages; i++) {
814+
if (blkbk->pending_pages[i])
815+
__free_page(blkbk->pending_pages[i]);
816+
}
817+
kfree(blkbk->pending_pages);
815818
}
816-
kfree(blkbk->pending_pages);
817819
kfree(blkbk);
818820
blkbk = NULL;
819821
return rc;

drivers/block/xen-blkback/xenbus.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,14 +357,13 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
357357
}
358358

359359
vbd->bdev = bdev;
360-
vbd->size = vbd_sz(vbd);
361-
362360
if (vbd->bdev->bd_disk == NULL) {
363361
DPRINTK("xen_vbd_create: device %08x doesn't exist.\n",
364362
vbd->pdevice);
365363
xen_vbd_free(vbd);
366364
return -ENOENT;
367365
}
366+
vbd->size = vbd_sz(vbd);
368367

369368
if (vbd->bdev->bd_disk->flags & GENHD_FL_CD || cdrom)
370369
vbd->type |= VDISK_CDROM;

fs/block_dev.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,8 +1272,8 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
12721272
* individual writeable reference is too fragile given the
12731273
* way @mode is used in blkdev_get/put().
12741274
*/
1275-
if ((disk->flags & GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE) &&
1276-
!res && (mode & FMODE_WRITE) && !bdev->bd_write_holder) {
1275+
if (!res && (mode & FMODE_WRITE) && !bdev->bd_write_holder &&
1276+
(disk->flags & GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE)) {
12771277
bdev->bd_write_holder = true;
12781278
disk_block_events(disk);
12791279
}

fs/partitions/check.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,7 @@ ssize_t part_discard_alignment_show(struct device *dev,
255255
struct device_attribute *attr, char *buf)
256256
{
257257
struct hd_struct *p = dev_to_part(dev);
258-
struct gendisk *disk = dev_to_disk(dev);
259-
unsigned int alignment = 0;
260-
261-
if (disk->queue)
262-
alignment = queue_limit_discard_alignment(&disk->queue->limits,
263-
p->start_sect);
264-
return sprintf(buf, "%u\n", alignment);
258+
return sprintf(buf, "%u\n", p->discard_alignment);
265259
}
266260

267261
ssize_t part_stat_show(struct device *dev,
@@ -455,6 +449,8 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
455449
p->start_sect = start;
456450
p->alignment_offset =
457451
queue_limit_alignment_offset(&disk->queue->limits, start);
452+
p->discard_alignment =
453+
queue_limit_discard_alignment(&disk->queue->limits, start);
458454
p->nr_sects = len;
459455
p->partno = partno;
460456
p->policy = get_disk_ro(disk);

include/linux/blkdev.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,8 +1282,8 @@ queue_max_integrity_segments(struct request_queue *q)
12821282
#define blk_get_integrity(a) (0)
12831283
#define blk_integrity_compare(a, b) (0)
12841284
#define blk_integrity_register(a, b) (0)
1285-
#define blk_integrity_unregister(a) do { } while (0);
1286-
#define blk_queue_max_integrity_segments(a, b) do { } while (0);
1285+
#define blk_integrity_unregister(a) do { } while (0)
1286+
#define blk_queue_max_integrity_segments(a, b) do { } while (0)
12871287
#define queue_max_integrity_segments(a) (0)
12881288
#define blk_integrity_merge_rq(a, b, c) (0)
12891289
#define blk_integrity_merge_bio(a, b, c) (0)

include/linux/genhd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ struct hd_struct {
100100
sector_t start_sect;
101101
sector_t nr_sects;
102102
sector_t alignment_offset;
103+
unsigned int discard_alignment;
103104
struct device __dev;
104105
struct kobject *holder_dir;
105106
int policy, partno;

0 commit comments

Comments
 (0)