History

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

Linus Torvalds committed 15 years ago

Commit 4f1ba492 parents 39b4a46 e3a57b39 files · +41 −28Browse files

Unified · Split

9 files
  1. block/blk-ioc.c +2 −2
  2. block/cfq-iosched.c +4 −7
  3. drivers/block/nbd.c +20 −2
  4. drivers/block/xen-blkback/blkback.c +6 −4
  5. drivers/block/xen-blkback/xenbus.c +1 −2
  6. fs/block_dev.c +2 −2
  7. fs/partitions/check.c +3 −7
  8. include/linux/blkdev.h +2 −2
  9. include/linux/genhd.h +1 −0
block/blk-ioc.c+2−2
@@ -21,7 +21,7 @@ static void cfq_dtor(struct io_context *ioc) · 20 unmodified lines
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) · 29 unmodified lines
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+4−7
@@ -185,7 +185,7 @@ struct cfq_group { · 184 unmodified lines
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); · 177 unmodified lines
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 @@ new_queue: · 3401 unmodified lines
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+20−2
@@ -192,7 +192,8 @@ static int sock_xmit(struct nbd_device *lo, int send, void *buf, int size, · 191 unmodified lines
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) · 554 unmodified lines
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+6−4
@@ -809,11 +809,13 @@ static int __init xen_blkif_init(void) · 808 unmodified lines
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+1−2
@@ -357,14 +357,13 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle, · 356 unmodified lines
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+2−2
@@ -1272,8 +1272,8 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder) · 1271 unmodified lines
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+3−7
@@ -255,13 +255,7 @@ ssize_t part_discard_alignment_show(struct device *dev, · 254 unmodified lines
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, · 187 unmodified lines
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+2−2
@@ -1282,8 +1282,8 @@ queue_max_integrity_segments(struct request_queue *q) · 1281 unmodified lines
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+1−0
@@ -100,6 +100,7 @@ struct hd_struct { · 99 unmodified lines
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;