diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/DAC960.c | 8 | ||||
-rw-r--r-- | drivers/block/amiflop.c | 9 | ||||
-rw-r--r-- | drivers/block/ataflop.c | 14 | ||||
-rw-r--r-- | drivers/block/cciss.c | 6 | ||||
-rw-r--r-- | drivers/block/cpqarray.c | 3 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_actlog.c | 4 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_bitmap.c | 1 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_int.h | 16 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_main.c | 36 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 29 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_req.c | 4 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_worker.c | 1 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_wrappers.h | 18 | ||||
-rw-r--r-- | drivers/block/floppy.c | 11 | ||||
-rw-r--r-- | drivers/block/loop.c | 16 | ||||
-rw-r--r-- | drivers/block/paride/pcd.c | 18 | ||||
-rw-r--r-- | drivers/block/paride/pd.c | 7 | ||||
-rw-r--r-- | drivers/block/paride/pf.c | 10 | ||||
-rw-r--r-- | drivers/block/pktcdvd.c | 15 | ||||
-rw-r--r-- | drivers/block/swim.c | 8 | ||||
-rw-r--r-- | drivers/block/swim3.c | 11 | ||||
-rw-r--r-- | drivers/block/ub.c | 10 | ||||
-rw-r--r-- | drivers/block/umem.c | 26 | ||||
-rw-r--r-- | drivers/block/xsysace.c | 9 |
24 files changed, 84 insertions, 206 deletions
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c index 1f286ab461d3..79882104e431 100644 --- a/drivers/block/DAC960.c +++ b/drivers/block/DAC960.c | |||
@@ -140,13 +140,14 @@ static int DAC960_getgeo(struct block_device *bdev, struct hd_geometry *geo) | |||
140 | return 0; | 140 | return 0; |
141 | } | 141 | } |
142 | 142 | ||
143 | static int DAC960_media_changed(struct gendisk *disk) | 143 | static unsigned int DAC960_check_events(struct gendisk *disk, |
144 | unsigned int clearing) | ||
144 | { | 145 | { |
145 | DAC960_Controller_T *p = disk->queue->queuedata; | 146 | DAC960_Controller_T *p = disk->queue->queuedata; |
146 | int drive_nr = (long)disk->private_data; | 147 | int drive_nr = (long)disk->private_data; |
147 | 148 | ||
148 | if (!p->LogicalDriveInitiallyAccessible[drive_nr]) | 149 | if (!p->LogicalDriveInitiallyAccessible[drive_nr]) |
149 | return 1; | 150 | return DISK_EVENT_MEDIA_CHANGE; |
150 | return 0; | 151 | return 0; |
151 | } | 152 | } |
152 | 153 | ||
@@ -163,7 +164,7 @@ static const struct block_device_operations DAC960_BlockDeviceOperations = { | |||
163 | .owner = THIS_MODULE, | 164 | .owner = THIS_MODULE, |
164 | .open = DAC960_open, | 165 | .open = DAC960_open, |
165 | .getgeo = DAC960_getgeo, | 166 | .getgeo = DAC960_getgeo, |
166 | .media_changed = DAC960_media_changed, | 167 | .check_events = DAC960_check_events, |
167 | .revalidate_disk = DAC960_revalidate_disk, | 168 | .revalidate_disk = DAC960_revalidate_disk, |
168 | }; | 169 | }; |
169 | 170 | ||
@@ -2546,6 +2547,7 @@ static bool DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller) | |||
2546 | disk->major = MajorNumber; | 2547 | disk->major = MajorNumber; |
2547 | disk->first_minor = n << DAC960_MaxPartitionsBits; | 2548 | disk->first_minor = n << DAC960_MaxPartitionsBits; |
2548 | disk->fops = &DAC960_BlockDeviceOperations; | 2549 | disk->fops = &DAC960_BlockDeviceOperations; |
2550 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
2549 | } | 2551 | } |
2550 | /* | 2552 | /* |
2551 | Indicate the Block Device Registration completed successfully, | 2553 | Indicate the Block Device Registration completed successfully, |
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c index 363855ca376e..456c0cc90dcf 100644 --- a/drivers/block/amiflop.c +++ b/drivers/block/amiflop.c | |||
@@ -1658,12 +1658,12 @@ static int floppy_release(struct gendisk *disk, fmode_t mode) | |||
1658 | } | 1658 | } |
1659 | 1659 | ||
1660 | /* | 1660 | /* |
1661 | * floppy-change is never called from an interrupt, so we can relax a bit | 1661 | * check_events is never called from an interrupt, so we can relax a bit |
1662 | * here, sleep etc. Note that floppy-on tries to set current_DOR to point | 1662 | * here, sleep etc. Note that floppy-on tries to set current_DOR to point |
1663 | * to the desired drive, but it will probably not survive the sleep if | 1663 | * to the desired drive, but it will probably not survive the sleep if |
1664 | * several floppies are used at the same time: thus the loop. | 1664 | * several floppies are used at the same time: thus the loop. |
1665 | */ | 1665 | */ |
1666 | static int amiga_floppy_change(struct gendisk *disk) | 1666 | static unsigned amiga_check_events(struct gendisk *disk, unsigned int clearing) |
1667 | { | 1667 | { |
1668 | struct amiga_floppy_struct *p = disk->private_data; | 1668 | struct amiga_floppy_struct *p = disk->private_data; |
1669 | int drive = p - unit; | 1669 | int drive = p - unit; |
@@ -1686,7 +1686,7 @@ static int amiga_floppy_change(struct gendisk *disk) | |||
1686 | p->dirty = 0; | 1686 | p->dirty = 0; |
1687 | writepending = 0; /* if this was true before, too bad! */ | 1687 | writepending = 0; /* if this was true before, too bad! */ |
1688 | writefromint = 0; | 1688 | writefromint = 0; |
1689 | return 1; | 1689 | return DISK_EVENT_MEDIA_CHANGE; |
1690 | } | 1690 | } |
1691 | return 0; | 1691 | return 0; |
1692 | } | 1692 | } |
@@ -1697,7 +1697,7 @@ static const struct block_device_operations floppy_fops = { | |||
1697 | .release = floppy_release, | 1697 | .release = floppy_release, |
1698 | .ioctl = fd_ioctl, | 1698 | .ioctl = fd_ioctl, |
1699 | .getgeo = fd_getgeo, | 1699 | .getgeo = fd_getgeo, |
1700 | .media_changed = amiga_floppy_change, | 1700 | .check_events = amiga_check_events, |
1701 | }; | 1701 | }; |
1702 | 1702 | ||
1703 | static int __init fd_probe_drives(void) | 1703 | static int __init fd_probe_drives(void) |
@@ -1736,6 +1736,7 @@ static int __init fd_probe_drives(void) | |||
1736 | disk->major = FLOPPY_MAJOR; | 1736 | disk->major = FLOPPY_MAJOR; |
1737 | disk->first_minor = drive; | 1737 | disk->first_minor = drive; |
1738 | disk->fops = &floppy_fops; | 1738 | disk->fops = &floppy_fops; |
1739 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
1739 | sprintf(disk->disk_name, "fd%d", drive); | 1740 | sprintf(disk->disk_name, "fd%d", drive); |
1740 | disk->private_data = &unit[drive]; | 1741 | disk->private_data = &unit[drive]; |
1741 | set_capacity(disk, 880*2); | 1742 | set_capacity(disk, 880*2); |
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c index 605a67e40bbf..c871eae14120 100644 --- a/drivers/block/ataflop.c +++ b/drivers/block/ataflop.c | |||
@@ -1324,23 +1324,24 @@ static void finish_fdc_done( int dummy ) | |||
1324 | * due to unrecognised disk changes. | 1324 | * due to unrecognised disk changes. |
1325 | */ | 1325 | */ |
1326 | 1326 | ||
1327 | static int check_floppy_change(struct gendisk *disk) | 1327 | static unsigned int floppy_check_events(struct gendisk *disk, |
1328 | unsigned int clearing) | ||
1328 | { | 1329 | { |
1329 | struct atari_floppy_struct *p = disk->private_data; | 1330 | struct atari_floppy_struct *p = disk->private_data; |
1330 | unsigned int drive = p - unit; | 1331 | unsigned int drive = p - unit; |
1331 | if (test_bit (drive, &fake_change)) { | 1332 | if (test_bit (drive, &fake_change)) { |
1332 | /* simulated change (e.g. after formatting) */ | 1333 | /* simulated change (e.g. after formatting) */ |
1333 | return 1; | 1334 | return DISK_EVENT_MEDIA_CHANGE; |
1334 | } | 1335 | } |
1335 | if (test_bit (drive, &changed_floppies)) { | 1336 | if (test_bit (drive, &changed_floppies)) { |
1336 | /* surely changed (the WP signal changed at least once) */ | 1337 | /* surely changed (the WP signal changed at least once) */ |
1337 | return 1; | 1338 | return DISK_EVENT_MEDIA_CHANGE; |
1338 | } | 1339 | } |
1339 | if (UD.wpstat) { | 1340 | if (UD.wpstat) { |
1340 | /* WP is on -> could be changed: to be sure, buffers should be | 1341 | /* WP is on -> could be changed: to be sure, buffers should be |
1341 | * invalidated... | 1342 | * invalidated... |
1342 | */ | 1343 | */ |
1343 | return 1; | 1344 | return DISK_EVENT_MEDIA_CHANGE; |
1344 | } | 1345 | } |
1345 | 1346 | ||
1346 | return 0; | 1347 | return 0; |
@@ -1570,7 +1571,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, | |||
1570 | * or the next access will revalidate - and clear UDT :-( | 1571 | * or the next access will revalidate - and clear UDT :-( |
1571 | */ | 1572 | */ |
1572 | 1573 | ||
1573 | if (check_floppy_change(disk)) | 1574 | if (floppy_check_events(disk, 0)) |
1574 | floppy_revalidate(disk); | 1575 | floppy_revalidate(disk); |
1575 | 1576 | ||
1576 | if (UD.flags & FTD_MSG) | 1577 | if (UD.flags & FTD_MSG) |
@@ -1904,7 +1905,7 @@ static const struct block_device_operations floppy_fops = { | |||
1904 | .open = floppy_unlocked_open, | 1905 | .open = floppy_unlocked_open, |
1905 | .release = floppy_release, | 1906 | .release = floppy_release, |
1906 | .ioctl = fd_ioctl, | 1907 | .ioctl = fd_ioctl, |
1907 | .media_changed = check_floppy_change, | 1908 | .check_events = floppy_check_events, |
1908 | .revalidate_disk= floppy_revalidate, | 1909 | .revalidate_disk= floppy_revalidate, |
1909 | }; | 1910 | }; |
1910 | 1911 | ||
@@ -1963,6 +1964,7 @@ static int __init atari_floppy_init (void) | |||
1963 | unit[i].disk->first_minor = i; | 1964 | unit[i].disk->first_minor = i; |
1964 | sprintf(unit[i].disk->disk_name, "fd%d", i); | 1965 | sprintf(unit[i].disk->disk_name, "fd%d", i); |
1965 | unit[i].disk->fops = &floppy_fops; | 1966 | unit[i].disk->fops = &floppy_fops; |
1967 | unit[i].disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
1966 | unit[i].disk->private_data = &unit[i]; | 1968 | unit[i].disk->private_data = &unit[i]; |
1967 | unit[i].disk->queue = blk_init_queue(do_fd_request, | 1969 | unit[i].disk->queue = blk_init_queue(do_fd_request, |
1968 | &ataflop_lock); | 1970 | &ataflop_lock); |
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 9279272b3732..35658f445fca 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
@@ -3170,12 +3170,6 @@ static void do_cciss_request(struct request_queue *q) | |||
3170 | int sg_index = 0; | 3170 | int sg_index = 0; |
3171 | int chained = 0; | 3171 | int chained = 0; |
3172 | 3172 | ||
3173 | /* We call start_io here in case there is a command waiting on the | ||
3174 | * queue that has not been sent. | ||
3175 | */ | ||
3176 | if (blk_queue_plugged(q)) | ||
3177 | goto startio; | ||
3178 | |||
3179 | queue: | 3173 | queue: |
3180 | creq = blk_peek_request(q); | 3174 | creq = blk_peek_request(q); |
3181 | if (!creq) | 3175 | if (!creq) |
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c index 946dad4caef3..b2fceb53e809 100644 --- a/drivers/block/cpqarray.c +++ b/drivers/block/cpqarray.c | |||
@@ -911,9 +911,6 @@ static void do_ida_request(struct request_queue *q) | |||
911 | struct scatterlist tmp_sg[SG_MAX]; | 911 | struct scatterlist tmp_sg[SG_MAX]; |
912 | int i, dir, seg; | 912 | int i, dir, seg; |
913 | 913 | ||
914 | if (blk_queue_plugged(q)) | ||
915 | goto startio; | ||
916 | |||
917 | queue_next: | 914 | queue_next: |
918 | creq = blk_peek_request(q); | 915 | creq = blk_peek_request(q); |
919 | if (!creq) | 916 | if (!creq) |
diff --git a/drivers/block/drbd/drbd_actlog.c b/drivers/block/drbd/drbd_actlog.c index ba95cba192be..aca302492ff2 100644 --- a/drivers/block/drbd/drbd_actlog.c +++ b/drivers/block/drbd/drbd_actlog.c | |||
@@ -80,7 +80,7 @@ static int _drbd_md_sync_page_io(struct drbd_conf *mdev, | |||
80 | 80 | ||
81 | if ((rw & WRITE) && !test_bit(MD_NO_FUA, &mdev->flags)) | 81 | if ((rw & WRITE) && !test_bit(MD_NO_FUA, &mdev->flags)) |
82 | rw |= REQ_FUA; | 82 | rw |= REQ_FUA; |
83 | rw |= REQ_UNPLUG | REQ_SYNC; | 83 | rw |= REQ_SYNC; |
84 | 84 | ||
85 | bio = bio_alloc(GFP_NOIO, 1); | 85 | bio = bio_alloc(GFP_NOIO, 1); |
86 | bio->bi_bdev = bdev->md_bdev; | 86 | bio->bi_bdev = bdev->md_bdev; |
@@ -689,8 +689,6 @@ void drbd_al_to_on_disk_bm(struct drbd_conf *mdev) | |||
689 | } | 689 | } |
690 | } | 690 | } |
691 | 691 | ||
692 | drbd_blk_run_queue(bdev_get_queue(mdev->ldev->md_bdev)); | ||
693 | |||
694 | /* always (try to) flush bitmap to stable storage */ | 692 | /* always (try to) flush bitmap to stable storage */ |
695 | drbd_md_flush(mdev); | 693 | drbd_md_flush(mdev); |
696 | 694 | ||
diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c index fd42832f785b..0645ca829a94 100644 --- a/drivers/block/drbd/drbd_bitmap.c +++ b/drivers/block/drbd/drbd_bitmap.c | |||
@@ -840,7 +840,6 @@ static int bm_rw(struct drbd_conf *mdev, int rw) __must_hold(local) | |||
840 | for (i = 0; i < num_pages; i++) | 840 | for (i = 0; i < num_pages; i++) |
841 | bm_page_io_async(mdev, b, i, rw); | 841 | bm_page_io_async(mdev, b, i, rw); |
842 | 842 | ||
843 | drbd_blk_run_queue(bdev_get_queue(mdev->ldev->md_bdev)); | ||
844 | wait_event(b->bm_io_wait, atomic_read(&b->bm_async_io) == 0); | 843 | wait_event(b->bm_io_wait, atomic_read(&b->bm_async_io) == 0); |
845 | 844 | ||
846 | if (test_bit(BM_MD_IO_ERROR, &b->bm_flags)) { | 845 | if (test_bit(BM_MD_IO_ERROR, &b->bm_flags)) { |
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index 3803a0348937..b0bd27dfc1e8 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h | |||
@@ -377,7 +377,7 @@ union p_header { | |||
377 | #define DP_HARDBARRIER 1 /* depricated */ | 377 | #define DP_HARDBARRIER 1 /* depricated */ |
378 | #define DP_RW_SYNC 2 /* equals REQ_SYNC */ | 378 | #define DP_RW_SYNC 2 /* equals REQ_SYNC */ |
379 | #define DP_MAY_SET_IN_SYNC 4 | 379 | #define DP_MAY_SET_IN_SYNC 4 |
380 | #define DP_UNPLUG 8 /* equals REQ_UNPLUG */ | 380 | #define DP_UNPLUG 8 /* not used anymore */ |
381 | #define DP_FUA 16 /* equals REQ_FUA */ | 381 | #define DP_FUA 16 /* equals REQ_FUA */ |
382 | #define DP_FLUSH 32 /* equals REQ_FLUSH */ | 382 | #define DP_FLUSH 32 /* equals REQ_FLUSH */ |
383 | #define DP_DISCARD 64 /* equals REQ_DISCARD */ | 383 | #define DP_DISCARD 64 /* equals REQ_DISCARD */ |
@@ -2382,20 +2382,6 @@ static inline int drbd_queue_order_type(struct drbd_conf *mdev) | |||
2382 | return QUEUE_ORDERED_NONE; | 2382 | return QUEUE_ORDERED_NONE; |
2383 | } | 2383 | } |
2384 | 2384 | ||
2385 | static inline void drbd_blk_run_queue(struct request_queue *q) | ||
2386 | { | ||
2387 | if (q && q->unplug_fn) | ||
2388 | q->unplug_fn(q); | ||
2389 | } | ||
2390 | |||
2391 | static inline void drbd_kick_lo(struct drbd_conf *mdev) | ||
2392 | { | ||
2393 | if (get_ldev(mdev)) { | ||
2394 | drbd_blk_run_queue(bdev_get_queue(mdev->ldev->backing_bdev)); | ||
2395 | put_ldev(mdev); | ||
2396 | } | ||
2397 | } | ||
2398 | |||
2399 | static inline void drbd_md_flush(struct drbd_conf *mdev) | 2385 | static inline void drbd_md_flush(struct drbd_conf *mdev) |
2400 | { | 2386 | { |
2401 | int r; | 2387 | int r; |
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 29cd0dc9fe4f..8a43ce0edeed 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c | |||
@@ -2477,12 +2477,11 @@ static u32 bio_flags_to_wire(struct drbd_conf *mdev, unsigned long bi_rw) | |||
2477 | { | 2477 | { |
2478 | if (mdev->agreed_pro_version >= 95) | 2478 | if (mdev->agreed_pro_version >= 95) |
2479 | return (bi_rw & REQ_SYNC ? DP_RW_SYNC : 0) | | 2479 | return (bi_rw & REQ_SYNC ? DP_RW_SYNC : 0) | |
2480 | (bi_rw & REQ_UNPLUG ? DP_UNPLUG : 0) | | ||
2481 | (bi_rw & REQ_FUA ? DP_FUA : 0) | | 2480 | (bi_rw & REQ_FUA ? DP_FUA : 0) | |
2482 | (bi_rw & REQ_FLUSH ? DP_FLUSH : 0) | | 2481 | (bi_rw & REQ_FLUSH ? DP_FLUSH : 0) | |
2483 | (bi_rw & REQ_DISCARD ? DP_DISCARD : 0); | 2482 | (bi_rw & REQ_DISCARD ? DP_DISCARD : 0); |
2484 | else | 2483 | else |
2485 | return bi_rw & (REQ_SYNC | REQ_UNPLUG) ? DP_RW_SYNC : 0; | 2484 | return bi_rw & REQ_SYNC ? DP_RW_SYNC : 0; |
2486 | } | 2485 | } |
2487 | 2486 | ||
2488 | /* Used to send write requests | 2487 | /* Used to send write requests |
@@ -2719,35 +2718,6 @@ static int drbd_release(struct gendisk *gd, fmode_t mode) | |||
2719 | return 0; | 2718 | return 0; |
2720 | } | 2719 | } |
2721 | 2720 | ||
2722 | static void drbd_unplug_fn(struct request_queue *q) | ||
2723 | { | ||
2724 | struct drbd_conf *mdev = q->queuedata; | ||
2725 | |||
2726 | /* unplug FIRST */ | ||
2727 | spin_lock_irq(q->queue_lock); | ||
2728 | blk_remove_plug(q); | ||
2729 | spin_unlock_irq(q->queue_lock); | ||
2730 | |||
2731 | /* only if connected */ | ||
2732 | spin_lock_irq(&mdev->req_lock); | ||
2733 | if (mdev->state.pdsk >= D_INCONSISTENT && mdev->state.conn >= C_CONNECTED) { | ||
2734 | D_ASSERT(mdev->state.role == R_PRIMARY); | ||
2735 | if (test_and_clear_bit(UNPLUG_REMOTE, &mdev->flags)) { | ||
2736 | /* add to the data.work queue, | ||
2737 | * unless already queued. | ||
2738 | * XXX this might be a good addition to drbd_queue_work | ||
2739 | * anyways, to detect "double queuing" ... */ | ||
2740 | if (list_empty(&mdev->unplug_work.list)) | ||
2741 | drbd_queue_work(&mdev->data.work, | ||
2742 | &mdev->unplug_work); | ||
2743 | } | ||
2744 | } | ||
2745 | spin_unlock_irq(&mdev->req_lock); | ||
2746 | |||
2747 | if (mdev->state.disk >= D_INCONSISTENT) | ||
2748 | drbd_kick_lo(mdev); | ||
2749 | } | ||
2750 | |||
2751 | static void drbd_set_defaults(struct drbd_conf *mdev) | 2721 | static void drbd_set_defaults(struct drbd_conf *mdev) |
2752 | { | 2722 | { |
2753 | /* This way we get a compile error when sync_conf grows, | 2723 | /* This way we get a compile error when sync_conf grows, |
@@ -3222,9 +3192,7 @@ struct drbd_conf *drbd_new_device(unsigned int minor) | |||
3222 | blk_queue_max_segment_size(q, DRBD_MAX_SEGMENT_SIZE); | 3192 | blk_queue_max_segment_size(q, DRBD_MAX_SEGMENT_SIZE); |
3223 | blk_queue_bounce_limit(q, BLK_BOUNCE_ANY); | 3193 | blk_queue_bounce_limit(q, BLK_BOUNCE_ANY); |
3224 | blk_queue_merge_bvec(q, drbd_merge_bvec); | 3194 | blk_queue_merge_bvec(q, drbd_merge_bvec); |
3225 | q->queue_lock = &mdev->req_lock; /* needed since we use */ | 3195 | q->queue_lock = &mdev->req_lock; |
3226 | /* plugging on a queue, that actually has no requests! */ | ||
3227 | q->unplug_fn = drbd_unplug_fn; | ||
3228 | 3196 | ||
3229 | mdev->md_io_page = alloc_page(GFP_KERNEL); | 3197 | mdev->md_io_page = alloc_page(GFP_KERNEL); |
3230 | if (!mdev->md_io_page) | 3198 | if (!mdev->md_io_page) |
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 24487d4fb202..8e68be939deb 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
@@ -187,15 +187,6 @@ static struct page *drbd_pp_first_pages_or_try_alloc(struct drbd_conf *mdev, int | |||
187 | return NULL; | 187 | return NULL; |
188 | } | 188 | } |
189 | 189 | ||
190 | /* kick lower level device, if we have more than (arbitrary number) | ||
191 | * reference counts on it, which typically are locally submitted io | ||
192 | * requests. don't use unacked_cnt, so we speed up proto A and B, too. */ | ||
193 | static void maybe_kick_lo(struct drbd_conf *mdev) | ||
194 | { | ||
195 | if (atomic_read(&mdev->local_cnt) >= mdev->net_conf->unplug_watermark) | ||
196 | drbd_kick_lo(mdev); | ||
197 | } | ||
198 | |||
199 | static void reclaim_net_ee(struct drbd_conf *mdev, struct list_head *to_be_freed) | 190 | static void reclaim_net_ee(struct drbd_conf *mdev, struct list_head *to_be_freed) |
200 | { | 191 | { |
201 | struct drbd_epoch_entry *e; | 192 | struct drbd_epoch_entry *e; |
@@ -219,7 +210,6 @@ static void drbd_kick_lo_and_reclaim_net(struct drbd_conf *mdev) | |||
219 | LIST_HEAD(reclaimed); | 210 | LIST_HEAD(reclaimed); |
220 | struct drbd_epoch_entry *e, *t; | 211 | struct drbd_epoch_entry *e, *t; |
221 | 212 | ||
222 | maybe_kick_lo(mdev); | ||
223 | spin_lock_irq(&mdev->req_lock); | 213 | spin_lock_irq(&mdev->req_lock); |
224 | reclaim_net_ee(mdev, &reclaimed); | 214 | reclaim_net_ee(mdev, &reclaimed); |
225 | spin_unlock_irq(&mdev->req_lock); | 215 | spin_unlock_irq(&mdev->req_lock); |
@@ -436,8 +426,7 @@ void _drbd_wait_ee_list_empty(struct drbd_conf *mdev, struct list_head *head) | |||
436 | while (!list_empty(head)) { | 426 | while (!list_empty(head)) { |
437 | prepare_to_wait(&mdev->ee_wait, &wait, TASK_UNINTERRUPTIBLE); | 427 | prepare_to_wait(&mdev->ee_wait, &wait, TASK_UNINTERRUPTIBLE); |
438 | spin_unlock_irq(&mdev->req_lock); | 428 | spin_unlock_irq(&mdev->req_lock); |
439 | drbd_kick_lo(mdev); | 429 | io_schedule(); |
440 | schedule(); | ||
441 | finish_wait(&mdev->ee_wait, &wait); | 430 | finish_wait(&mdev->ee_wait, &wait); |
442 | spin_lock_irq(&mdev->req_lock); | 431 | spin_lock_irq(&mdev->req_lock); |
443 | } | 432 | } |
@@ -1111,8 +1100,6 @@ next_bio: | |||
1111 | /* > e->sector, unless this is the first bio */ | 1100 | /* > e->sector, unless this is the first bio */ |
1112 | bio->bi_sector = sector; | 1101 | bio->bi_sector = sector; |
1113 | bio->bi_bdev = mdev->ldev->backing_bdev; | 1102 | bio->bi_bdev = mdev->ldev->backing_bdev; |
1114 | /* we special case some flags in the multi-bio case, see below | ||
1115 | * (REQ_UNPLUG) */ | ||
1116 | bio->bi_rw = rw; | 1103 | bio->bi_rw = rw; |
1117 | bio->bi_private = e; | 1104 | bio->bi_private = e; |
1118 | bio->bi_end_io = drbd_endio_sec; | 1105 | bio->bi_end_io = drbd_endio_sec; |
@@ -1141,13 +1128,8 @@ next_bio: | |||
1141 | bios = bios->bi_next; | 1128 | bios = bios->bi_next; |
1142 | bio->bi_next = NULL; | 1129 | bio->bi_next = NULL; |
1143 | 1130 | ||
1144 | /* strip off REQ_UNPLUG unless it is the last bio */ | ||
1145 | if (bios) | ||
1146 | bio->bi_rw &= ~REQ_UNPLUG; | ||
1147 | |||
1148 | drbd_generic_make_request(mdev, fault_type, bio); | 1131 | drbd_generic_make_request(mdev, fault_type, bio); |
1149 | } while (bios); | 1132 | } while (bios); |
1150 | maybe_kick_lo(mdev); | ||
1151 | return 0; | 1133 | return 0; |
1152 | 1134 | ||
1153 | fail: | 1135 | fail: |
@@ -1167,9 +1149,6 @@ static int receive_Barrier(struct drbd_conf *mdev, enum drbd_packets cmd, unsign | |||
1167 | 1149 | ||
1168 | inc_unacked(mdev); | 1150 | inc_unacked(mdev); |
1169 | 1151 | ||
1170 | if (mdev->net_conf->wire_protocol != DRBD_PROT_C) | ||
1171 | drbd_kick_lo(mdev); | ||
1172 | |||
1173 | mdev->current_epoch->barrier_nr = p->barrier; | 1152 | mdev->current_epoch->barrier_nr = p->barrier; |
1174 | rv = drbd_may_finish_epoch(mdev, mdev->current_epoch, EV_GOT_BARRIER_NR); | 1153 | rv = drbd_may_finish_epoch(mdev, mdev->current_epoch, EV_GOT_BARRIER_NR); |
1175 | 1154 | ||
@@ -1636,12 +1615,11 @@ static unsigned long write_flags_to_bio(struct drbd_conf *mdev, u32 dpf) | |||
1636 | { | 1615 | { |
1637 | if (mdev->agreed_pro_version >= 95) | 1616 | if (mdev->agreed_pro_version >= 95) |
1638 | return (dpf & DP_RW_SYNC ? REQ_SYNC : 0) | | 1617 | return (dpf & DP_RW_SYNC ? REQ_SYNC : 0) | |
1639 | (dpf & DP_UNPLUG ? REQ_UNPLUG : 0) | | ||
1640 | (dpf & DP_FUA ? REQ_FUA : 0) | | 1618 | (dpf & DP_FUA ? REQ_FUA : 0) | |
1641 | (dpf & DP_FLUSH ? REQ_FUA : 0) | | 1619 | (dpf & DP_FLUSH ? REQ_FUA : 0) | |
1642 | (dpf & DP_DISCARD ? REQ_DISCARD : 0); | 1620 | (dpf & DP_DISCARD ? REQ_DISCARD : 0); |
1643 | else | 1621 | else |
1644 | return dpf & DP_RW_SYNC ? (REQ_SYNC | REQ_UNPLUG) : 0; | 1622 | return dpf & DP_RW_SYNC ? REQ_SYNC : 0; |
1645 | } | 1623 | } |
1646 | 1624 | ||
1647 | /* mirrored write */ | 1625 | /* mirrored write */ |
@@ -3556,9 +3534,6 @@ static int receive_skip(struct drbd_conf *mdev, enum drbd_packets cmd, unsigned | |||
3556 | 3534 | ||
3557 | static int receive_UnplugRemote(struct drbd_conf *mdev, enum drbd_packets cmd, unsigned int data_size) | 3535 | static int receive_UnplugRemote(struct drbd_conf *mdev, enum drbd_packets cmd, unsigned int data_size) |
3558 | { | 3536 | { |
3559 | if (mdev->state.disk >= D_INCONSISTENT) | ||
3560 | drbd_kick_lo(mdev); | ||
3561 | |||
3562 | /* Make sure we've acked all the TCP data associated | 3537 | /* Make sure we've acked all the TCP data associated |
3563 | * with the data requests being unplugged */ | 3538 | * with the data requests being unplugged */ |
3564 | drbd_tcp_quickack(mdev->data.socket); | 3539 | drbd_tcp_quickack(mdev->data.socket); |
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 11a75d32a2e2..ad3fc6228f27 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c | |||
@@ -960,10 +960,6 @@ allocate_barrier: | |||
960 | bio_endio(req->private_bio, -EIO); | 960 | bio_endio(req->private_bio, -EIO); |
961 | } | 961 | } |
962 | 962 | ||
963 | /* we need to plug ALWAYS since we possibly need to kick lo_dev. | ||
964 | * we plug after submit, so we won't miss an unplug event */ | ||
965 | drbd_plug_device(mdev); | ||
966 | |||
967 | return 0; | 963 | return 0; |
968 | 964 | ||
969 | fail_conflicting: | 965 | fail_conflicting: |
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c index 34f224b018b3..e027446590d3 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c | |||
@@ -792,7 +792,6 @@ int drbd_resync_finished(struct drbd_conf *mdev) | |||
792 | * queue (or even the read operations for those packets | 792 | * queue (or even the read operations for those packets |
793 | * is not finished by now). Retry in 100ms. */ | 793 | * is not finished by now). Retry in 100ms. */ |
794 | 794 | ||
795 | drbd_kick_lo(mdev); | ||
796 | __set_current_state(TASK_INTERRUPTIBLE); | 795 | __set_current_state(TASK_INTERRUPTIBLE); |
797 | schedule_timeout(HZ / 10); | 796 | schedule_timeout(HZ / 10); |
798 | w = kmalloc(sizeof(struct drbd_work), GFP_ATOMIC); | 797 | w = kmalloc(sizeof(struct drbd_work), GFP_ATOMIC); |
diff --git a/drivers/block/drbd/drbd_wrappers.h b/drivers/block/drbd/drbd_wrappers.h index defdb5013ea3..53586fa5ae1b 100644 --- a/drivers/block/drbd/drbd_wrappers.h +++ b/drivers/block/drbd/drbd_wrappers.h | |||
@@ -45,24 +45,6 @@ static inline void drbd_generic_make_request(struct drbd_conf *mdev, | |||
45 | generic_make_request(bio); | 45 | generic_make_request(bio); |
46 | } | 46 | } |
47 | 47 | ||
48 | static inline void drbd_plug_device(struct drbd_conf *mdev) | ||
49 | { | ||
50 | struct request_queue *q; | ||
51 | q = bdev_get_queue(mdev->this_bdev); | ||
52 | |||
53 | spin_lock_irq(q->queue_lock); | ||
54 | |||
55 | /* XXX the check on !blk_queue_plugged is redundant, | ||
56 | * implicitly checked in blk_plug_device */ | ||
57 | |||
58 | if (!blk_queue_plugged(q)) { | ||
59 | blk_plug_device(q); | ||
60 | del_timer(&q->unplug_timer); | ||
61 | /* unplugging should not happen automatically... */ | ||
62 | } | ||
63 | spin_unlock_irq(q->queue_lock); | ||
64 | } | ||
65 | |||
66 | static inline int drbd_crypto_is_hash(struct crypto_tfm *tfm) | 48 | static inline int drbd_crypto_is_hash(struct crypto_tfm *tfm) |
67 | { | 49 | { |
68 | return (crypto_tfm_alg_type(tfm) & CRYPTO_ALG_TYPE_HASH_MASK) | 50 | return (crypto_tfm_alg_type(tfm) & CRYPTO_ALG_TYPE_HASH_MASK) |
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index 77fc76f8aea9..301d7a9a41a6 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c | |||
@@ -3770,13 +3770,14 @@ out2: | |||
3770 | /* | 3770 | /* |
3771 | * Check if the disk has been changed or if a change has been faked. | 3771 | * Check if the disk has been changed or if a change has been faked. |
3772 | */ | 3772 | */ |
3773 | static int check_floppy_change(struct gendisk *disk) | 3773 | static unsigned int floppy_check_events(struct gendisk *disk, |
3774 | unsigned int clearing) | ||
3774 | { | 3775 | { |
3775 | int drive = (long)disk->private_data; | 3776 | int drive = (long)disk->private_data; |
3776 | 3777 | ||
3777 | if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags) || | 3778 | if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags) || |
3778 | test_bit(FD_VERIFY_BIT, &UDRS->flags)) | 3779 | test_bit(FD_VERIFY_BIT, &UDRS->flags)) |
3779 | return 1; | 3780 | return DISK_EVENT_MEDIA_CHANGE; |
3780 | 3781 | ||
3781 | if (time_after(jiffies, UDRS->last_checked + UDP->checkfreq)) { | 3782 | if (time_after(jiffies, UDRS->last_checked + UDP->checkfreq)) { |
3782 | lock_fdc(drive, false); | 3783 | lock_fdc(drive, false); |
@@ -3788,7 +3789,7 @@ static int check_floppy_change(struct gendisk *disk) | |||
3788 | test_bit(FD_VERIFY_BIT, &UDRS->flags) || | 3789 | test_bit(FD_VERIFY_BIT, &UDRS->flags) || |
3789 | test_bit(drive, &fake_change) || | 3790 | test_bit(drive, &fake_change) || |
3790 | drive_no_geom(drive)) | 3791 | drive_no_geom(drive)) |
3791 | return 1; | 3792 | return DISK_EVENT_MEDIA_CHANGE; |
3792 | return 0; | 3793 | return 0; |
3793 | } | 3794 | } |
3794 | 3795 | ||
@@ -3837,7 +3838,6 @@ static int __floppy_read_block_0(struct block_device *bdev) | |||
3837 | bio.bi_end_io = floppy_rb0_complete; | 3838 | bio.bi_end_io = floppy_rb0_complete; |
3838 | 3839 | ||
3839 | submit_bio(READ, &bio); | 3840 | submit_bio(READ, &bio); |
3840 | generic_unplug_device(bdev_get_queue(bdev)); | ||
3841 | process_fd_request(); | 3841 | process_fd_request(); |
3842 | wait_for_completion(&complete); | 3842 | wait_for_completion(&complete); |
3843 | 3843 | ||
@@ -3898,7 +3898,7 @@ static const struct block_device_operations floppy_fops = { | |||
3898 | .release = floppy_release, | 3898 | .release = floppy_release, |
3899 | .ioctl = fd_ioctl, | 3899 | .ioctl = fd_ioctl, |
3900 | .getgeo = fd_getgeo, | 3900 | .getgeo = fd_getgeo, |
3901 | .media_changed = check_floppy_change, | 3901 | .check_events = floppy_check_events, |
3902 | .revalidate_disk = floppy_revalidate, | 3902 | .revalidate_disk = floppy_revalidate, |
3903 | }; | 3903 | }; |
3904 | 3904 | ||
@@ -4205,6 +4205,7 @@ static int __init floppy_init(void) | |||
4205 | disks[dr]->major = FLOPPY_MAJOR; | 4205 | disks[dr]->major = FLOPPY_MAJOR; |
4206 | disks[dr]->first_minor = TOMINOR(dr); | 4206 | disks[dr]->first_minor = TOMINOR(dr); |
4207 | disks[dr]->fops = &floppy_fops; | 4207 | disks[dr]->fops = &floppy_fops; |
4208 | disks[dr]->events = DISK_EVENT_MEDIA_CHANGE; | ||
4208 | sprintf(disks[dr]->disk_name, "fd%d", dr); | 4209 | sprintf(disks[dr]->disk_name, "fd%d", dr); |
4209 | 4210 | ||
4210 | init_timer(&motor_off_timer[dr]); | 4211 | init_timer(&motor_off_timer[dr]); |
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index dbf31ec9114d..a076a14ca72d 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -540,17 +540,6 @@ out: | |||
540 | return 0; | 540 | return 0; |
541 | } | 541 | } |
542 | 542 | ||
543 | /* | ||
544 | * kick off io on the underlying address space | ||
545 | */ | ||
546 | static void loop_unplug(struct request_queue *q) | ||
547 | { | ||
548 | struct loop_device *lo = q->queuedata; | ||
549 | |||
550 | queue_flag_clear_unlocked(QUEUE_FLAG_PLUGGED, q); | ||
551 | blk_run_address_space(lo->lo_backing_file->f_mapping); | ||
552 | } | ||
553 | |||
554 | struct switch_request { | 543 | struct switch_request { |
555 | struct file *file; | 544 | struct file *file; |
556 | struct completion wait; | 545 | struct completion wait; |
@@ -917,7 +906,6 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, | |||
917 | */ | 906 | */ |
918 | blk_queue_make_request(lo->lo_queue, loop_make_request); | 907 | blk_queue_make_request(lo->lo_queue, loop_make_request); |
919 | lo->lo_queue->queuedata = lo; | 908 | lo->lo_queue->queuedata = lo; |
920 | lo->lo_queue->unplug_fn = loop_unplug; | ||
921 | 909 | ||
922 | if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync) | 910 | if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync) |
923 | blk_queue_flush(lo->lo_queue, REQ_FLUSH); | 911 | blk_queue_flush(lo->lo_queue, REQ_FLUSH); |
@@ -1019,7 +1007,6 @@ static int loop_clr_fd(struct loop_device *lo, struct block_device *bdev) | |||
1019 | 1007 | ||
1020 | kthread_stop(lo->lo_thread); | 1008 | kthread_stop(lo->lo_thread); |
1021 | 1009 | ||
1022 | lo->lo_queue->unplug_fn = NULL; | ||
1023 | lo->lo_backing_file = NULL; | 1010 | lo->lo_backing_file = NULL; |
1024 | 1011 | ||
1025 | loop_release_xfer(lo); | 1012 | loop_release_xfer(lo); |
@@ -1636,9 +1623,6 @@ out: | |||
1636 | 1623 | ||
1637 | static void loop_free(struct loop_device *lo) | 1624 | static void loop_free(struct loop_device *lo) |
1638 | { | 1625 | { |
1639 | if (!lo->lo_queue->queue_lock) | ||
1640 | lo->lo_queue->queue_lock = &lo->lo_queue->__queue_lock; | ||
1641 | |||
1642 | blk_cleanup_queue(lo->lo_queue); | 1626 | blk_cleanup_queue(lo->lo_queue); |
1643 | put_disk(lo->lo_disk); | 1627 | put_disk(lo->lo_disk); |
1644 | list_del(&lo->lo_list); | 1628 | list_del(&lo->lo_list); |
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index 62cec6afd7ad..2f2ccf686251 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c | |||
@@ -172,7 +172,8 @@ module_param_array(drive3, int, NULL, 0); | |||
172 | static int pcd_open(struct cdrom_device_info *cdi, int purpose); | 172 | static int pcd_open(struct cdrom_device_info *cdi, int purpose); |
173 | static void pcd_release(struct cdrom_device_info *cdi); | 173 | static void pcd_release(struct cdrom_device_info *cdi); |
174 | static int pcd_drive_status(struct cdrom_device_info *cdi, int slot_nr); | 174 | static int pcd_drive_status(struct cdrom_device_info *cdi, int slot_nr); |
175 | static int pcd_media_changed(struct cdrom_device_info *cdi, int slot_nr); | 175 | static unsigned int pcd_check_events(struct cdrom_device_info *cdi, |
176 | unsigned int clearing, int slot_nr); | ||
176 | static int pcd_tray_move(struct cdrom_device_info *cdi, int position); | 177 | static int pcd_tray_move(struct cdrom_device_info *cdi, int position); |
177 | static int pcd_lock_door(struct cdrom_device_info *cdi, int lock); | 178 | static int pcd_lock_door(struct cdrom_device_info *cdi, int lock); |
178 | static int pcd_drive_reset(struct cdrom_device_info *cdi); | 179 | static int pcd_drive_reset(struct cdrom_device_info *cdi); |
@@ -257,10 +258,11 @@ static int pcd_block_ioctl(struct block_device *bdev, fmode_t mode, | |||
257 | return ret; | 258 | return ret; |
258 | } | 259 | } |
259 | 260 | ||
260 | static int pcd_block_media_changed(struct gendisk *disk) | 261 | static unsigned int pcd_block_check_events(struct gendisk *disk, |
262 | unsigned int clearing) | ||
261 | { | 263 | { |
262 | struct pcd_unit *cd = disk->private_data; | 264 | struct pcd_unit *cd = disk->private_data; |
263 | return cdrom_media_changed(&cd->info); | 265 | return cdrom_check_events(&cd->info, clearing); |
264 | } | 266 | } |
265 | 267 | ||
266 | static const struct block_device_operations pcd_bdops = { | 268 | static const struct block_device_operations pcd_bdops = { |
@@ -268,14 +270,14 @@ static const struct block_device_operations pcd_bdops = { | |||
268 | .open = pcd_block_open, | 270 | .open = pcd_block_open, |
269 | .release = pcd_block_release, | 271 | .release = pcd_block_release, |
270 | .ioctl = pcd_block_ioctl, | 272 | .ioctl = pcd_block_ioctl, |
271 | .media_changed = pcd_block_media_changed, | 273 | .check_events = pcd_block_check_events, |
272 | }; | 274 | }; |
273 | 275 | ||
274 | static struct cdrom_device_ops pcd_dops = { | 276 | static struct cdrom_device_ops pcd_dops = { |
275 | .open = pcd_open, | 277 | .open = pcd_open, |
276 | .release = pcd_release, | 278 | .release = pcd_release, |
277 | .drive_status = pcd_drive_status, | 279 | .drive_status = pcd_drive_status, |
278 | .media_changed = pcd_media_changed, | 280 | .check_events = pcd_check_events, |
279 | .tray_move = pcd_tray_move, | 281 | .tray_move = pcd_tray_move, |
280 | .lock_door = pcd_lock_door, | 282 | .lock_door = pcd_lock_door, |
281 | .get_mcn = pcd_get_mcn, | 283 | .get_mcn = pcd_get_mcn, |
@@ -318,6 +320,7 @@ static void pcd_init_units(void) | |||
318 | disk->first_minor = unit; | 320 | disk->first_minor = unit; |
319 | strcpy(disk->disk_name, cd->name); /* umm... */ | 321 | strcpy(disk->disk_name, cd->name); /* umm... */ |
320 | disk->fops = &pcd_bdops; | 322 | disk->fops = &pcd_bdops; |
323 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
321 | } | 324 | } |
322 | } | 325 | } |
323 | 326 | ||
@@ -502,13 +505,14 @@ static int pcd_packet(struct cdrom_device_info *cdi, struct packet_command *cgc) | |||
502 | 505 | ||
503 | #define DBMSG(msg) ((verbose>1)?(msg):NULL) | 506 | #define DBMSG(msg) ((verbose>1)?(msg):NULL) |
504 | 507 | ||
505 | static int pcd_media_changed(struct cdrom_device_info *cdi, int slot_nr) | 508 | static unsigned int pcd_check_events(struct cdrom_device_info *cdi, |
509 | unsigned int clearing, int slot_nr) | ||
506 | { | 510 | { |
507 | struct pcd_unit *cd = cdi->handle; | 511 | struct pcd_unit *cd = cdi->handle; |
508 | int res = cd->changed; | 512 | int res = cd->changed; |
509 | if (res) | 513 | if (res) |
510 | cd->changed = 0; | 514 | cd->changed = 0; |
511 | return res; | 515 | return res ? DISK_EVENT_MEDIA_CHANGE : 0; |
512 | } | 516 | } |
513 | 517 | ||
514 | static int pcd_lock_door(struct cdrom_device_info *cdi, int lock) | 518 | static int pcd_lock_door(struct cdrom_device_info *cdi, int lock) |
diff --git a/drivers/block/paride/pd.c b/drivers/block/paride/pd.c index c0ee1558b9bb..21dfdb776869 100644 --- a/drivers/block/paride/pd.c +++ b/drivers/block/paride/pd.c | |||
@@ -794,7 +794,7 @@ static int pd_release(struct gendisk *p, fmode_t mode) | |||
794 | return 0; | 794 | return 0; |
795 | } | 795 | } |
796 | 796 | ||
797 | static int pd_check_media(struct gendisk *p) | 797 | static unsigned int pd_check_events(struct gendisk *p, unsigned int clearing) |
798 | { | 798 | { |
799 | struct pd_unit *disk = p->private_data; | 799 | struct pd_unit *disk = p->private_data; |
800 | int r; | 800 | int r; |
@@ -803,7 +803,7 @@ static int pd_check_media(struct gendisk *p) | |||
803 | pd_special_command(disk, pd_media_check); | 803 | pd_special_command(disk, pd_media_check); |
804 | r = disk->changed; | 804 | r = disk->changed; |
805 | disk->changed = 0; | 805 | disk->changed = 0; |
806 | return r; | 806 | return r ? DISK_EVENT_MEDIA_CHANGE : 0; |
807 | } | 807 | } |
808 | 808 | ||
809 | static int pd_revalidate(struct gendisk *p) | 809 | static int pd_revalidate(struct gendisk *p) |
@@ -822,7 +822,7 @@ static const struct block_device_operations pd_fops = { | |||
822 | .release = pd_release, | 822 | .release = pd_release, |
823 | .ioctl = pd_ioctl, | 823 | .ioctl = pd_ioctl, |
824 | .getgeo = pd_getgeo, | 824 | .getgeo = pd_getgeo, |
825 | .media_changed = pd_check_media, | 825 | .check_events = pd_check_events, |
826 | .revalidate_disk= pd_revalidate | 826 | .revalidate_disk= pd_revalidate |
827 | }; | 827 | }; |
828 | 828 | ||
@@ -837,6 +837,7 @@ static void pd_probe_drive(struct pd_unit *disk) | |||
837 | p->fops = &pd_fops; | 837 | p->fops = &pd_fops; |
838 | p->major = major; | 838 | p->major = major; |
839 | p->first_minor = (disk - pd) << PD_BITS; | 839 | p->first_minor = (disk - pd) << PD_BITS; |
840 | p->events = DISK_EVENT_MEDIA_CHANGE; | ||
840 | disk->gd = p; | 841 | disk->gd = p; |
841 | p->private_data = disk; | 842 | p->private_data = disk; |
842 | p->queue = pd_queue; | 843 | p->queue = pd_queue; |
diff --git a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c index 635f25dd9e10..7adeb1edbf43 100644 --- a/drivers/block/paride/pf.c +++ b/drivers/block/paride/pf.c | |||
@@ -243,7 +243,8 @@ static struct pf_unit units[PF_UNITS]; | |||
243 | static int pf_identify(struct pf_unit *pf); | 243 | static int pf_identify(struct pf_unit *pf); |
244 | static void pf_lock(struct pf_unit *pf, int func); | 244 | static void pf_lock(struct pf_unit *pf, int func); |
245 | static void pf_eject(struct pf_unit *pf); | 245 | static void pf_eject(struct pf_unit *pf); |
246 | static int pf_check_media(struct gendisk *disk); | 246 | static unsigned int pf_check_events(struct gendisk *disk, |
247 | unsigned int clearing); | ||
247 | 248 | ||
248 | static char pf_scratch[512]; /* scratch block buffer */ | 249 | static char pf_scratch[512]; /* scratch block buffer */ |
249 | 250 | ||
@@ -270,7 +271,7 @@ static const struct block_device_operations pf_fops = { | |||
270 | .release = pf_release, | 271 | .release = pf_release, |
271 | .ioctl = pf_ioctl, | 272 | .ioctl = pf_ioctl, |
272 | .getgeo = pf_getgeo, | 273 | .getgeo = pf_getgeo, |
273 | .media_changed = pf_check_media, | 274 | .check_events = pf_check_events, |
274 | }; | 275 | }; |
275 | 276 | ||
276 | static void __init pf_init_units(void) | 277 | static void __init pf_init_units(void) |
@@ -293,6 +294,7 @@ static void __init pf_init_units(void) | |||
293 | disk->first_minor = unit; | 294 | disk->first_minor = unit; |
294 | strcpy(disk->disk_name, pf->name); | 295 | strcpy(disk->disk_name, pf->name); |
295 | disk->fops = &pf_fops; | 296 | disk->fops = &pf_fops; |
297 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
296 | if (!(*drives[unit])[D_PRT]) | 298 | if (!(*drives[unit])[D_PRT]) |
297 | pf_drive_count++; | 299 | pf_drive_count++; |
298 | } | 300 | } |
@@ -377,9 +379,9 @@ static int pf_release(struct gendisk *disk, fmode_t mode) | |||
377 | 379 | ||
378 | } | 380 | } |
379 | 381 | ||
380 | static int pf_check_media(struct gendisk *disk) | 382 | static unsigned int pf_check_events(struct gendisk *disk, unsigned int clearing) |
381 | { | 383 | { |
382 | return 1; | 384 | return DISK_EVENT_MEDIA_CHANGE; |
383 | } | 385 | } |
384 | 386 | ||
385 | static inline int status_reg(struct pf_unit *pf) | 387 | static inline int status_reg(struct pf_unit *pf) |
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c index 77d70eebb6b2..07a382eaf0a8 100644 --- a/drivers/block/pktcdvd.c +++ b/drivers/block/pktcdvd.c | |||
@@ -1606,8 +1606,6 @@ static int kcdrwd(void *foobar) | |||
1606 | min_sleep_time = pkt->sleep_time; | 1606 | min_sleep_time = pkt->sleep_time; |
1607 | } | 1607 | } |
1608 | 1608 | ||
1609 | generic_unplug_device(bdev_get_queue(pd->bdev)); | ||
1610 | |||
1611 | VPRINTK("kcdrwd: sleeping\n"); | 1609 | VPRINTK("kcdrwd: sleeping\n"); |
1612 | residue = schedule_timeout(min_sleep_time); | 1610 | residue = schedule_timeout(min_sleep_time); |
1613 | VPRINTK("kcdrwd: wake up\n"); | 1611 | VPRINTK("kcdrwd: wake up\n"); |
@@ -2796,7 +2794,8 @@ static int pkt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, | |||
2796 | return ret; | 2794 | return ret; |
2797 | } | 2795 | } |
2798 | 2796 | ||
2799 | static int pkt_media_changed(struct gendisk *disk) | 2797 | static unsigned int pkt_check_events(struct gendisk *disk, |
2798 | unsigned int clearing) | ||
2800 | { | 2799 | { |
2801 | struct pktcdvd_device *pd = disk->private_data; | 2800 | struct pktcdvd_device *pd = disk->private_data; |
2802 | struct gendisk *attached_disk; | 2801 | struct gendisk *attached_disk; |
@@ -2806,9 +2805,9 @@ static int pkt_media_changed(struct gendisk *disk) | |||
2806 | if (!pd->bdev) | 2805 | if (!pd->bdev) |
2807 | return 0; | 2806 | return 0; |
2808 | attached_disk = pd->bdev->bd_disk; | 2807 | attached_disk = pd->bdev->bd_disk; |
2809 | if (!attached_disk) | 2808 | if (!attached_disk || !attached_disk->fops->check_events) |
2810 | return 0; | 2809 | return 0; |
2811 | return attached_disk->fops->media_changed(attached_disk); | 2810 | return attached_disk->fops->check_events(attached_disk, clearing); |
2812 | } | 2811 | } |
2813 | 2812 | ||
2814 | static const struct block_device_operations pktcdvd_ops = { | 2813 | static const struct block_device_operations pktcdvd_ops = { |
@@ -2816,7 +2815,7 @@ static const struct block_device_operations pktcdvd_ops = { | |||
2816 | .open = pkt_open, | 2815 | .open = pkt_open, |
2817 | .release = pkt_close, | 2816 | .release = pkt_close, |
2818 | .ioctl = pkt_ioctl, | 2817 | .ioctl = pkt_ioctl, |
2819 | .media_changed = pkt_media_changed, | 2818 | .check_events = pkt_check_events, |
2820 | }; | 2819 | }; |
2821 | 2820 | ||
2822 | static char *pktcdvd_devnode(struct gendisk *gd, mode_t *mode) | 2821 | static char *pktcdvd_devnode(struct gendisk *gd, mode_t *mode) |
@@ -2889,6 +2888,10 @@ static int pkt_setup_dev(dev_t dev, dev_t* pkt_dev) | |||
2889 | if (ret) | 2888 | if (ret) |
2890 | goto out_new_dev; | 2889 | goto out_new_dev; |
2891 | 2890 | ||
2891 | /* inherit events of the host device */ | ||
2892 | disk->events = pd->bdev->bd_disk->events; | ||
2893 | disk->async_events = pd->bdev->bd_disk->async_events; | ||
2894 | |||
2892 | add_disk(disk); | 2895 | add_disk(disk); |
2893 | 2896 | ||
2894 | pkt_sysfs_dev_new(pd); | 2897 | pkt_sysfs_dev_new(pd); |
diff --git a/drivers/block/swim.c b/drivers/block/swim.c index 75333d0a3327..24a482f2fbd6 100644 --- a/drivers/block/swim.c +++ b/drivers/block/swim.c | |||
@@ -741,11 +741,12 @@ static int floppy_getgeo(struct block_device *bdev, struct hd_geometry *geo) | |||
741 | return 0; | 741 | return 0; |
742 | } | 742 | } |
743 | 743 | ||
744 | static int floppy_check_change(struct gendisk *disk) | 744 | static unsigned int floppy_check_events(struct gendisk *disk, |
745 | unsigned int clearing) | ||
745 | { | 746 | { |
746 | struct floppy_state *fs = disk->private_data; | 747 | struct floppy_state *fs = disk->private_data; |
747 | 748 | ||
748 | return fs->ejected; | 749 | return fs->ejected ? DISK_EVENT_MEDIA_CHANGE : 0; |
749 | } | 750 | } |
750 | 751 | ||
751 | static int floppy_revalidate(struct gendisk *disk) | 752 | static int floppy_revalidate(struct gendisk *disk) |
@@ -772,7 +773,7 @@ static const struct block_device_operations floppy_fops = { | |||
772 | .release = floppy_release, | 773 | .release = floppy_release, |
773 | .ioctl = floppy_ioctl, | 774 | .ioctl = floppy_ioctl, |
774 | .getgeo = floppy_getgeo, | 775 | .getgeo = floppy_getgeo, |
775 | .media_changed = floppy_check_change, | 776 | .check_events = floppy_check_events, |
776 | .revalidate_disk = floppy_revalidate, | 777 | .revalidate_disk = floppy_revalidate, |
777 | }; | 778 | }; |
778 | 779 | ||
@@ -857,6 +858,7 @@ static int __devinit swim_floppy_init(struct swim_priv *swd) | |||
857 | swd->unit[drive].disk->first_minor = drive; | 858 | swd->unit[drive].disk->first_minor = drive; |
858 | sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive); | 859 | sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive); |
859 | swd->unit[drive].disk->fops = &floppy_fops; | 860 | swd->unit[drive].disk->fops = &floppy_fops; |
861 | swd->unit[drive].disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
860 | swd->unit[drive].disk->private_data = &swd->unit[drive]; | 862 | swd->unit[drive].disk->private_data = &swd->unit[drive]; |
861 | swd->unit[drive].disk->queue = swd->queue; | 863 | swd->unit[drive].disk->queue = swd->queue; |
862 | set_capacity(swd->unit[drive].disk, 2880); | 864 | set_capacity(swd->unit[drive].disk, 2880); |
diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c index bf3a5b859299..4c10f56facbf 100644 --- a/drivers/block/swim3.c +++ b/drivers/block/swim3.c | |||
@@ -250,7 +250,8 @@ static int floppy_ioctl(struct block_device *bdev, fmode_t mode, | |||
250 | unsigned int cmd, unsigned long param); | 250 | unsigned int cmd, unsigned long param); |
251 | static int floppy_open(struct block_device *bdev, fmode_t mode); | 251 | static int floppy_open(struct block_device *bdev, fmode_t mode); |
252 | static int floppy_release(struct gendisk *disk, fmode_t mode); | 252 | static int floppy_release(struct gendisk *disk, fmode_t mode); |
253 | static int floppy_check_change(struct gendisk *disk); | 253 | static unsigned int floppy_check_events(struct gendisk *disk, |
254 | unsigned int clearing); | ||
254 | static int floppy_revalidate(struct gendisk *disk); | 255 | static int floppy_revalidate(struct gendisk *disk); |
255 | 256 | ||
256 | static bool swim3_end_request(int err, unsigned int nr_bytes) | 257 | static bool swim3_end_request(int err, unsigned int nr_bytes) |
@@ -975,10 +976,11 @@ static int floppy_release(struct gendisk *disk, fmode_t mode) | |||
975 | return 0; | 976 | return 0; |
976 | } | 977 | } |
977 | 978 | ||
978 | static int floppy_check_change(struct gendisk *disk) | 979 | static unsigned int floppy_check_events(struct gendisk *disk, |
980 | unsigned int clearing) | ||
979 | { | 981 | { |
980 | struct floppy_state *fs = disk->private_data; | 982 | struct floppy_state *fs = disk->private_data; |
981 | return fs->ejected; | 983 | return fs->ejected ? DISK_EVENT_MEDIA_CHANGE : 0; |
982 | } | 984 | } |
983 | 985 | ||
984 | static int floppy_revalidate(struct gendisk *disk) | 986 | static int floppy_revalidate(struct gendisk *disk) |
@@ -1025,7 +1027,7 @@ static const struct block_device_operations floppy_fops = { | |||
1025 | .open = floppy_unlocked_open, | 1027 | .open = floppy_unlocked_open, |
1026 | .release = floppy_release, | 1028 | .release = floppy_release, |
1027 | .ioctl = floppy_ioctl, | 1029 | .ioctl = floppy_ioctl, |
1028 | .media_changed = floppy_check_change, | 1030 | .check_events = floppy_check_events, |
1029 | .revalidate_disk= floppy_revalidate, | 1031 | .revalidate_disk= floppy_revalidate, |
1030 | }; | 1032 | }; |
1031 | 1033 | ||
@@ -1161,6 +1163,7 @@ static int __devinit swim3_attach(struct macio_dev *mdev, const struct of_device | |||
1161 | disk->major = FLOPPY_MAJOR; | 1163 | disk->major = FLOPPY_MAJOR; |
1162 | disk->first_minor = i; | 1164 | disk->first_minor = i; |
1163 | disk->fops = &floppy_fops; | 1165 | disk->fops = &floppy_fops; |
1166 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
1164 | disk->private_data = &floppy_states[i]; | 1167 | disk->private_data = &floppy_states[i]; |
1165 | disk->queue = swim3_queue; | 1168 | disk->queue = swim3_queue; |
1166 | disk->flags |= GENHD_FL_REMOVABLE; | 1169 | disk->flags |= GENHD_FL_REMOVABLE; |
diff --git a/drivers/block/ub.c b/drivers/block/ub.c index 9ae3bb713286..68b9430c7cfe 100644 --- a/drivers/block/ub.c +++ b/drivers/block/ub.c | |||
@@ -1788,7 +1788,8 @@ static int ub_bd_revalidate(struct gendisk *disk) | |||
1788 | * | 1788 | * |
1789 | * The return code is bool! | 1789 | * The return code is bool! |
1790 | */ | 1790 | */ |
1791 | static int ub_bd_media_changed(struct gendisk *disk) | 1791 | static unsigned int ub_bd_check_events(struct gendisk *disk, |
1792 | unsigned int clearing) | ||
1792 | { | 1793 | { |
1793 | struct ub_lun *lun = disk->private_data; | 1794 | struct ub_lun *lun = disk->private_data; |
1794 | 1795 | ||
@@ -1806,10 +1807,10 @@ static int ub_bd_media_changed(struct gendisk *disk) | |||
1806 | */ | 1807 | */ |
1807 | if (ub_sync_tur(lun->udev, lun) != 0) { | 1808 | if (ub_sync_tur(lun->udev, lun) != 0) { |
1808 | lun->changed = 1; | 1809 | lun->changed = 1; |
1809 | return 1; | 1810 | return DISK_EVENT_MEDIA_CHANGE; |
1810 | } | 1811 | } |
1811 | 1812 | ||
1812 | return lun->changed; | 1813 | return lun->changed ? DISK_EVENT_MEDIA_CHANGE : 0; |
1813 | } | 1814 | } |
1814 | 1815 | ||
1815 | static const struct block_device_operations ub_bd_fops = { | 1816 | static const struct block_device_operations ub_bd_fops = { |
@@ -1817,7 +1818,7 @@ static const struct block_device_operations ub_bd_fops = { | |||
1817 | .open = ub_bd_unlocked_open, | 1818 | .open = ub_bd_unlocked_open, |
1818 | .release = ub_bd_release, | 1819 | .release = ub_bd_release, |
1819 | .ioctl = ub_bd_ioctl, | 1820 | .ioctl = ub_bd_ioctl, |
1820 | .media_changed = ub_bd_media_changed, | 1821 | .check_events = ub_bd_check_events, |
1821 | .revalidate_disk = ub_bd_revalidate, | 1822 | .revalidate_disk = ub_bd_revalidate, |
1822 | }; | 1823 | }; |
1823 | 1824 | ||
@@ -2333,6 +2334,7 @@ static int ub_probe_lun(struct ub_dev *sc, int lnum) | |||
2333 | disk->major = UB_MAJOR; | 2334 | disk->major = UB_MAJOR; |
2334 | disk->first_minor = lun->id * UB_PARTS_PER_LUN; | 2335 | disk->first_minor = lun->id * UB_PARTS_PER_LUN; |
2335 | disk->fops = &ub_bd_fops; | 2336 | disk->fops = &ub_bd_fops; |
2337 | disk->events = DISK_EVENT_MEDIA_CHANGE; | ||
2336 | disk->private_data = lun; | 2338 | disk->private_data = lun; |
2337 | disk->driverfs_dev = &sc->intf->dev; | 2339 | disk->driverfs_dev = &sc->intf->dev; |
2338 | 2340 | ||
diff --git a/drivers/block/umem.c b/drivers/block/umem.c index 8be57151f5d6..031ca720d926 100644 --- a/drivers/block/umem.c +++ b/drivers/block/umem.c | |||
@@ -241,8 +241,7 @@ static void dump_dmastat(struct cardinfo *card, unsigned int dmastat) | |||
241 | * | 241 | * |
242 | * Whenever IO on the active page completes, the Ready page is activated | 242 | * Whenever IO on the active page completes, the Ready page is activated |
243 | * and the ex-Active page is clean out and made Ready. | 243 | * and the ex-Active page is clean out and made Ready. |
244 | * Otherwise the Ready page is only activated when it becomes full, or | 244 | * Otherwise the Ready page is only activated when it becomes full. |
245 | * when mm_unplug_device is called via the unplug_io_fn. | ||
246 | * | 245 | * |
247 | * If a request arrives while both pages a full, it is queued, and b_rdev is | 246 | * If a request arrives while both pages a full, it is queued, and b_rdev is |
248 | * overloaded to record whether it was a read or a write. | 247 | * overloaded to record whether it was a read or a write. |
@@ -333,17 +332,6 @@ static inline void reset_page(struct mm_page *page) | |||
333 | page->biotail = &page->bio; | 332 | page->biotail = &page->bio; |
334 | } | 333 | } |
335 | 334 | ||
336 | static void mm_unplug_device(struct request_queue *q) | ||
337 | { | ||
338 | struct cardinfo *card = q->queuedata; | ||
339 | unsigned long flags; | ||
340 | |||
341 | spin_lock_irqsave(&card->lock, flags); | ||
342 | if (blk_remove_plug(q)) | ||
343 | activate(card); | ||
344 | spin_unlock_irqrestore(&card->lock, flags); | ||
345 | } | ||
346 | |||
347 | /* | 335 | /* |
348 | * If there is room on Ready page, take | 336 | * If there is room on Ready page, take |
349 | * one bh off list and add it. | 337 | * one bh off list and add it. |
@@ -535,7 +523,6 @@ static int mm_make_request(struct request_queue *q, struct bio *bio) | |||
535 | *card->biotail = bio; | 523 | *card->biotail = bio; |
536 | bio->bi_next = NULL; | 524 | bio->bi_next = NULL; |
537 | card->biotail = &bio->bi_next; | 525 | card->biotail = &bio->bi_next; |
538 | blk_plug_device(q); | ||
539 | spin_unlock_irq(&card->lock); | 526 | spin_unlock_irq(&card->lock); |
540 | 527 | ||
541 | return 0; | 528 | return 0; |
@@ -779,20 +766,10 @@ static int mm_getgeo(struct block_device *bdev, struct hd_geometry *geo) | |||
779 | return 0; | 766 | return 0; |
780 | } | 767 | } |
781 | 768 | ||
782 | /* | ||
783 | * Future support for removable devices | ||
784 | */ | ||
785 | static int mm_check_change(struct gendisk *disk) | ||
786 | { | ||
787 | /* struct cardinfo *dev = disk->private_data; */ | ||
788 | return 0; | ||
789 | } | ||
790 | |||
791 | static const struct block_device_operations mm_fops = { | 769 | static const struct block_device_operations mm_fops = { |
792 | .owner = THIS_MODULE, | 770 | .owner = THIS_MODULE, |
793 | .getgeo = mm_getgeo, | 771 | .getgeo = mm_getgeo, |
794 | .revalidate_disk = mm_revalidate, | 772 | .revalidate_disk = mm_revalidate, |
795 | .media_changed = mm_check_change, | ||
796 | }; | 773 | }; |
797 | 774 | ||
798 | static int __devinit mm_pci_probe(struct pci_dev *dev, | 775 | static int __devinit mm_pci_probe(struct pci_dev *dev, |
@@ -907,7 +884,6 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, | |||
907 | blk_queue_make_request(card->queue, mm_make_request); | 884 | blk_queue_make_request(card->queue, mm_make_request); |
908 | card->queue->queue_lock = &card->lock; | 885 | card->queue->queue_lock = &card->lock; |
909 | card->queue->queuedata = card; | 886 | card->queue->queuedata = card; |
910 | card->queue->unplug_fn = mm_unplug_device; | ||
911 | 887 | ||
912 | tasklet_init(&card->tasklet, process_page, (unsigned long)card); | 888 | tasklet_init(&card->tasklet, process_page, (unsigned long)card); |
913 | 889 | ||
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index 2c590a796aa1..73354b081ed3 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c | |||
@@ -867,12 +867,12 @@ static void ace_request(struct request_queue * q) | |||
867 | } | 867 | } |
868 | } | 868 | } |
869 | 869 | ||
870 | static int ace_media_changed(struct gendisk *gd) | 870 | static unsigned int ace_check_events(struct gendisk *gd, unsigned int clearing) |
871 | { | 871 | { |
872 | struct ace_device *ace = gd->private_data; | 872 | struct ace_device *ace = gd->private_data; |
873 | dev_dbg(ace->dev, "ace_media_changed(): %i\n", ace->media_change); | 873 | dev_dbg(ace->dev, "ace_check_events(): %i\n", ace->media_change); |
874 | 874 | ||
875 | return ace->media_change; | 875 | return ace->media_change ? DISK_EVENT_MEDIA_CHANGE : 0; |
876 | } | 876 | } |
877 | 877 | ||
878 | static int ace_revalidate_disk(struct gendisk *gd) | 878 | static int ace_revalidate_disk(struct gendisk *gd) |
@@ -953,7 +953,7 @@ static const struct block_device_operations ace_fops = { | |||
953 | .owner = THIS_MODULE, | 953 | .owner = THIS_MODULE, |
954 | .open = ace_open, | 954 | .open = ace_open, |
955 | .release = ace_release, | 955 | .release = ace_release, |
956 | .media_changed = ace_media_changed, | 956 | .check_events = ace_check_events, |
957 | .revalidate_disk = ace_revalidate_disk, | 957 | .revalidate_disk = ace_revalidate_disk, |
958 | .getgeo = ace_getgeo, | 958 | .getgeo = ace_getgeo, |
959 | }; | 959 | }; |
@@ -1005,6 +1005,7 @@ static int __devinit ace_setup(struct ace_device *ace) | |||
1005 | ace->gd->major = ace_major; | 1005 | ace->gd->major = ace_major; |
1006 | ace->gd->first_minor = ace->id * ACE_NUM_MINORS; | 1006 | ace->gd->first_minor = ace->id * ACE_NUM_MINORS; |
1007 | ace->gd->fops = &ace_fops; | 1007 | ace->gd->fops = &ace_fops; |
1008 | ace->gd->events = DISK_EVENT_MEDIA_CHANGE; | ||
1008 | ace->gd->queue = ace->queue; | 1009 | ace->gd->queue = ace->queue; |
1009 | ace->gd->private_data = ace; | 1010 | ace->gd->private_data = ace; |
1010 | snprintf(ace->gd->disk_name, 32, "xs%c", ace->id + 'a'); | 1011 | snprintf(ace->gd->disk_name, 32, "xs%c", ace->id + 'a'); |