diff options
Diffstat (limited to 'drivers/s390/block')
-rw-r--r-- | drivers/s390/block/Kconfig | 8 | ||||
-rw-r--r-- | drivers/s390/block/dasd.c | 34 | ||||
-rw-r--r-- | drivers/s390/block/dasd_diag.c | 11 | ||||
-rw-r--r-- | drivers/s390/block/dasd_diag.h | 31 | ||||
-rw-r--r-- | drivers/s390/block/dasd_eckd.c | 9 | ||||
-rw-r--r-- | drivers/s390/block/dasd_fba.c | 6 | ||||
-rw-r--r-- | drivers/s390/block/dasd_int.h | 3 | ||||
-rw-r--r-- | drivers/s390/block/dasd_ioctl.c | 5 | ||||
-rw-r--r-- | drivers/s390/block/dcssblk.c | 2 | ||||
-rw-r--r-- | drivers/s390/block/xpram.c | 4 |
10 files changed, 59 insertions, 54 deletions
diff --git a/drivers/s390/block/Kconfig b/drivers/s390/block/Kconfig index 6e7d7b06421d..6f50cc9323d9 100644 --- a/drivers/s390/block/Kconfig +++ b/drivers/s390/block/Kconfig | |||
@@ -1,11 +1,11 @@ | |||
1 | if ARCH_S390 | 1 | if S390 |
2 | 2 | ||
3 | comment "S/390 block device drivers" | 3 | comment "S/390 block device drivers" |
4 | depends on ARCH_S390 | 4 | depends on S390 |
5 | 5 | ||
6 | config BLK_DEV_XPRAM | 6 | config BLK_DEV_XPRAM |
7 | tristate "XPRAM disk support" | 7 | tristate "XPRAM disk support" |
8 | depends on ARCH_S390 | 8 | depends on S390 |
9 | help | 9 | help |
10 | Select this option if you want to use your expanded storage on S/390 | 10 | Select this option if you want to use your expanded storage on S/390 |
11 | or zSeries as a disk. This is useful as a _fast_ swap device if you | 11 | or zSeries as a disk. This is useful as a _fast_ swap device if you |
@@ -49,7 +49,7 @@ config DASD_FBA | |||
49 | 49 | ||
50 | config DASD_DIAG | 50 | config DASD_DIAG |
51 | tristate "Support for DIAG access to Disks" | 51 | tristate "Support for DIAG access to Disks" |
52 | depends on DASD && ( ARCH_S390X = 'n' || EXPERIMENTAL) | 52 | depends on DASD && ( 64BIT = 'n' || EXPERIMENTAL) |
53 | help | 53 | help |
54 | Select this option if you want to use Diagnose250 command to access | 54 | Select this option if you want to use Diagnose250 command to access |
55 | Disks under VM. If you are not running under VM or unsure what it is, | 55 | Disks under VM. If you are not running under VM or unsure what it is, |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 7008d32433bf..f779f674dfa0 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 |
9 | * | 9 | * |
10 | * $Revision: 1.167 $ | 10 | * $Revision: 1.172 $ |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/config.h> | 13 | #include <linux/config.h> |
@@ -604,7 +604,7 @@ dasd_smalloc_request(char *magic, int cplength, int datasize, | |||
604 | void | 604 | void |
605 | dasd_kfree_request(struct dasd_ccw_req * cqr, struct dasd_device * device) | 605 | dasd_kfree_request(struct dasd_ccw_req * cqr, struct dasd_device * device) |
606 | { | 606 | { |
607 | #ifdef CONFIG_ARCH_S390X | 607 | #ifdef CONFIG_64BIT |
608 | struct ccw1 *ccw; | 608 | struct ccw1 *ccw; |
609 | 609 | ||
610 | /* Clear any idals used for the request. */ | 610 | /* Clear any idals used for the request. */ |
@@ -1035,7 +1035,7 @@ dasd_end_request(struct request *req, int uptodate) | |||
1035 | if (end_that_request_first(req, uptodate, req->hard_nr_sectors)) | 1035 | if (end_that_request_first(req, uptodate, req->hard_nr_sectors)) |
1036 | BUG(); | 1036 | BUG(); |
1037 | add_disk_randomness(req->rq_disk); | 1037 | add_disk_randomness(req->rq_disk); |
1038 | end_that_request_last(req); | 1038 | end_that_request_last(req, uptodate); |
1039 | } | 1039 | } |
1040 | 1040 | ||
1041 | /* | 1041 | /* |
@@ -1224,6 +1224,12 @@ __dasd_start_head(struct dasd_device * device) | |||
1224 | if (list_empty(&device->ccw_queue)) | 1224 | if (list_empty(&device->ccw_queue)) |
1225 | return; | 1225 | return; |
1226 | cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, list); | 1226 | cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, list); |
1227 | /* check FAILFAST */ | ||
1228 | if (device->stopped & ~DASD_STOPPED_PENDING && | ||
1229 | test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags)) { | ||
1230 | cqr->status = DASD_CQR_FAILED; | ||
1231 | dasd_schedule_bh(device); | ||
1232 | } | ||
1227 | if ((cqr->status == DASD_CQR_QUEUED) && | 1233 | if ((cqr->status == DASD_CQR_QUEUED) && |
1228 | (!device->stopped)) { | 1234 | (!device->stopped)) { |
1229 | /* try to start the first I/O that can be started */ | 1235 | /* try to start the first I/O that can be started */ |
@@ -1323,7 +1329,7 @@ void | |||
1323 | dasd_schedule_bh(struct dasd_device * device) | 1329 | dasd_schedule_bh(struct dasd_device * device) |
1324 | { | 1330 | { |
1325 | /* Protect against rescheduling. */ | 1331 | /* Protect against rescheduling. */ |
1326 | if (atomic_compare_and_swap (0, 1, &device->tasklet_scheduled)) | 1332 | if (atomic_cmpxchg (&device->tasklet_scheduled, 0, 1) != 0) |
1327 | return; | 1333 | return; |
1328 | dasd_get_device(device); | 1334 | dasd_get_device(device); |
1329 | tasklet_hi_schedule(&device->tasklet); | 1335 | tasklet_hi_schedule(&device->tasklet); |
@@ -1750,8 +1756,10 @@ dasd_exit(void) | |||
1750 | * SECTION: common functions for ccw_driver use | 1756 | * SECTION: common functions for ccw_driver use |
1751 | */ | 1757 | */ |
1752 | 1758 | ||
1753 | /* initial attempt at a probe function. this can be simplified once | 1759 | /* |
1754 | * the other detection code is gone */ | 1760 | * Initial attempt at a probe function. this can be simplified once |
1761 | * the other detection code is gone. | ||
1762 | */ | ||
1755 | int | 1763 | int |
1756 | dasd_generic_probe (struct ccw_device *cdev, | 1764 | dasd_generic_probe (struct ccw_device *cdev, |
1757 | struct dasd_discipline *discipline) | 1765 | struct dasd_discipline *discipline) |
@@ -1770,8 +1778,10 @@ dasd_generic_probe (struct ccw_device *cdev, | |||
1770 | return ret; | 1778 | return ret; |
1771 | } | 1779 | } |
1772 | 1780 | ||
1773 | /* this will one day be called from a global not_oper handler. | 1781 | /* |
1774 | * It is also used by driver_unregister during module unload */ | 1782 | * This will one day be called from a global not_oper handler. |
1783 | * It is also used by driver_unregister during module unload. | ||
1784 | */ | ||
1775 | void | 1785 | void |
1776 | dasd_generic_remove (struct ccw_device *cdev) | 1786 | dasd_generic_remove (struct ccw_device *cdev) |
1777 | { | 1787 | { |
@@ -1798,9 +1808,11 @@ dasd_generic_remove (struct ccw_device *cdev) | |||
1798 | dasd_delete_device(device); | 1808 | dasd_delete_device(device); |
1799 | } | 1809 | } |
1800 | 1810 | ||
1801 | /* activate a device. This is called from dasd_{eckd,fba}_probe() when either | 1811 | /* |
1812 | * Activate a device. This is called from dasd_{eckd,fba}_probe() when either | ||
1802 | * the device is detected for the first time and is supposed to be used | 1813 | * the device is detected for the first time and is supposed to be used |
1803 | * or the user has started activation through sysfs */ | 1814 | * or the user has started activation through sysfs. |
1815 | */ | ||
1804 | int | 1816 | int |
1805 | dasd_generic_set_online (struct ccw_device *cdev, | 1817 | dasd_generic_set_online (struct ccw_device *cdev, |
1806 | struct dasd_discipline *discipline) | 1818 | struct dasd_discipline *discipline) |
@@ -1917,7 +1929,6 @@ dasd_generic_notify(struct ccw_device *cdev, int event) | |||
1917 | if (cqr->status == DASD_CQR_IN_IO) | 1929 | if (cqr->status == DASD_CQR_IN_IO) |
1918 | cqr->status = DASD_CQR_FAILED; | 1930 | cqr->status = DASD_CQR_FAILED; |
1919 | device->stopped |= DASD_STOPPED_DC_EIO; | 1931 | device->stopped |= DASD_STOPPED_DC_EIO; |
1920 | dasd_schedule_bh(device); | ||
1921 | } else { | 1932 | } else { |
1922 | list_for_each_entry(cqr, &device->ccw_queue, list) | 1933 | list_for_each_entry(cqr, &device->ccw_queue, list) |
1923 | if (cqr->status == DASD_CQR_IN_IO) { | 1934 | if (cqr->status == DASD_CQR_IN_IO) { |
@@ -1927,6 +1938,7 @@ dasd_generic_notify(struct ccw_device *cdev, int event) | |||
1927 | device->stopped |= DASD_STOPPED_DC_WAIT; | 1938 | device->stopped |= DASD_STOPPED_DC_WAIT; |
1928 | dasd_set_timer(device, 0); | 1939 | dasd_set_timer(device, 0); |
1929 | } | 1940 | } |
1941 | dasd_schedule_bh(device); | ||
1930 | ret = 1; | 1942 | ret = 1; |
1931 | break; | 1943 | break; |
1932 | case CIO_OPER: | 1944 | case CIO_OPER: |
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index ab8754e566bc..ba80fdea7ebf 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
@@ -6,7 +6,7 @@ | |||
6 | * Bugreports.to..: <Linux390@de.ibm.com> | 6 | * Bugreports.to..: <Linux390@de.ibm.com> |
7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
8 | * | 8 | * |
9 | * $Revision: 1.51 $ | 9 | * $Revision: 1.53 $ |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/config.h> | 12 | #include <linux/config.h> |
@@ -25,6 +25,7 @@ | |||
25 | #include <asm/io.h> | 25 | #include <asm/io.h> |
26 | #include <asm/s390_ext.h> | 26 | #include <asm/s390_ext.h> |
27 | #include <asm/todclk.h> | 27 | #include <asm/todclk.h> |
28 | #include <asm/vtoc.h> | ||
28 | 29 | ||
29 | #include "dasd_int.h" | 30 | #include "dasd_int.h" |
30 | #include "dasd_diag.h" | 31 | #include "dasd_diag.h" |
@@ -74,7 +75,7 @@ dia250(void *iob, int cmd) | |||
74 | int rc; | 75 | int rc; |
75 | 76 | ||
76 | __asm__ __volatile__( | 77 | __asm__ __volatile__( |
77 | #ifdef CONFIG_ARCH_S390X | 78 | #ifdef CONFIG_64BIT |
78 | " lghi %0,3\n" | 79 | " lghi %0,3\n" |
79 | " lgr 0,%3\n" | 80 | " lgr 0,%3\n" |
80 | " diag 0,%2,0x250\n" | 81 | " diag 0,%2,0x250\n" |
@@ -329,7 +330,7 @@ dasd_diag_check_device(struct dasd_device *device) | |||
329 | struct dasd_diag_private *private; | 330 | struct dasd_diag_private *private; |
330 | struct dasd_diag_characteristics *rdc_data; | 331 | struct dasd_diag_characteristics *rdc_data; |
331 | struct dasd_diag_bio bio; | 332 | struct dasd_diag_bio bio; |
332 | struct dasd_diag_cms_label *label; | 333 | struct vtoc_cms_label *label; |
333 | blocknum_t end_block; | 334 | blocknum_t end_block; |
334 | unsigned int sb, bsize; | 335 | unsigned int sb, bsize; |
335 | int rc; | 336 | int rc; |
@@ -380,7 +381,7 @@ dasd_diag_check_device(struct dasd_device *device) | |||
380 | mdsk_term_io(device); | 381 | mdsk_term_io(device); |
381 | 382 | ||
382 | /* figure out blocksize of device */ | 383 | /* figure out blocksize of device */ |
383 | label = (struct dasd_diag_cms_label *) get_zeroed_page(GFP_KERNEL); | 384 | label = (struct vtoc_cms_label *) get_zeroed_page(GFP_KERNEL); |
384 | if (label == NULL) { | 385 | if (label == NULL) { |
385 | DEV_MESSAGE(KERN_WARNING, device, "%s", | 386 | DEV_MESSAGE(KERN_WARNING, device, "%s", |
386 | "No memory to allocate initialization request"); | 387 | "No memory to allocate initialization request"); |
@@ -548,6 +549,8 @@ dasd_diag_build_cp(struct dasd_device * device, struct request *req) | |||
548 | } | 549 | } |
549 | cqr->retries = DIAG_MAX_RETRIES; | 550 | cqr->retries = DIAG_MAX_RETRIES; |
550 | cqr->buildclk = get_clock(); | 551 | cqr->buildclk = get_clock(); |
552 | if (req->flags & REQ_FAILFAST) | ||
553 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
551 | cqr->device = device; | 554 | cqr->device = device; |
552 | cqr->expires = DIAG_TIMEOUT; | 555 | cqr->expires = DIAG_TIMEOUT; |
553 | cqr->status = DASD_CQR_FILLED; | 556 | cqr->status = DASD_CQR_FILLED; |
diff --git a/drivers/s390/block/dasd_diag.h b/drivers/s390/block/dasd_diag.h index df31484d73a7..a4f80bd735f1 100644 --- a/drivers/s390/block/dasd_diag.h +++ b/drivers/s390/block/dasd_diag.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Bugreports.to..: <Linux390@de.ibm.com> | 6 | * Bugreports.to..: <Linux390@de.ibm.com> |
7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
8 | * | 8 | * |
9 | * $Revision: 1.8 $ | 9 | * $Revision: 1.9 $ |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #define MDSK_WRITE_REQ 0x01 | 12 | #define MDSK_WRITE_REQ 0x01 |
@@ -44,29 +44,8 @@ struct dasd_diag_characteristics { | |||
44 | u8 rdev_features; | 44 | u8 rdev_features; |
45 | } __attribute__ ((packed, aligned(4))); | 45 | } __attribute__ ((packed, aligned(4))); |
46 | 46 | ||
47 | struct dasd_diag_cms_label { | 47 | |
48 | u8 label_id[4]; | 48 | #ifdef CONFIG_64BIT |
49 | u8 vol_id[6]; | ||
50 | u16 version_id; | ||
51 | u32 block_size; | ||
52 | u32 origin_ptr; | ||
53 | u32 usable_count; | ||
54 | u32 formatted_count; | ||
55 | u32 block_count; | ||
56 | u32 used_count; | ||
57 | u32 fst_size; | ||
58 | u32 fst_count; | ||
59 | u8 format_date[6]; | ||
60 | u8 reserved1[2]; | ||
61 | u32 disk_offset; | ||
62 | u32 map_block; | ||
63 | u32 hblk_disp; | ||
64 | u32 user_disp; | ||
65 | u8 reserved2[4]; | ||
66 | u8 segment_name[8]; | ||
67 | } __attribute__ ((packed)); | ||
68 | |||
69 | #ifdef CONFIG_ARCH_S390X | ||
70 | #define DASD_DIAG_FLAGA_DEFAULT DASD_DIAG_FLAGA_FORMAT_64BIT | 49 | #define DASD_DIAG_FLAGA_DEFAULT DASD_DIAG_FLAGA_FORMAT_64BIT |
71 | 50 | ||
72 | typedef u64 blocknum_t; | 51 | typedef u64 blocknum_t; |
@@ -107,7 +86,7 @@ struct dasd_diag_rw_io { | |||
107 | struct dasd_diag_bio *bio_list; | 86 | struct dasd_diag_bio *bio_list; |
108 | u8 spare4[8]; | 87 | u8 spare4[8]; |
109 | } __attribute__ ((packed, aligned(8))); | 88 | } __attribute__ ((packed, aligned(8))); |
110 | #else /* CONFIG_ARCH_S390X */ | 89 | #else /* CONFIG_64BIT */ |
111 | #define DASD_DIAG_FLAGA_DEFAULT 0x0 | 90 | #define DASD_DIAG_FLAGA_DEFAULT 0x0 |
112 | 91 | ||
113 | typedef u32 blocknum_t; | 92 | typedef u32 blocknum_t; |
@@ -146,4 +125,4 @@ struct dasd_diag_rw_io { | |||
146 | u32 interrupt_params; | 125 | u32 interrupt_params; |
147 | u8 spare3[20]; | 126 | u8 spare3[20]; |
148 | } __attribute__ ((packed, aligned(8))); | 127 | } __attribute__ ((packed, aligned(8))); |
149 | #endif /* CONFIG_ARCH_S390X */ | 128 | #endif /* CONFIG_64BIT */ |
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 811060e10c00..96eb48258580 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
9 | * | 9 | * |
10 | * $Revision: 1.71 $ | 10 | * $Revision: 1.74 $ |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/config.h> | 13 | #include <linux/config.h> |
@@ -1041,7 +1041,7 @@ dasd_eckd_build_cp(struct dasd_device * device, struct request *req) | |||
1041 | /* Eckd can only do full blocks. */ | 1041 | /* Eckd can only do full blocks. */ |
1042 | return ERR_PTR(-EINVAL); | 1042 | return ERR_PTR(-EINVAL); |
1043 | count += bv->bv_len >> (device->s2b_shift + 9); | 1043 | count += bv->bv_len >> (device->s2b_shift + 9); |
1044 | #if defined(CONFIG_ARCH_S390X) | 1044 | #if defined(CONFIG_64BIT) |
1045 | if (idal_is_needed (page_address(bv->bv_page), | 1045 | if (idal_is_needed (page_address(bv->bv_page), |
1046 | bv->bv_len)) | 1046 | bv->bv_len)) |
1047 | cidaw += bv->bv_len >> (device->s2b_shift + 9); | 1047 | cidaw += bv->bv_len >> (device->s2b_shift + 9); |
@@ -1136,6 +1136,8 @@ dasd_eckd_build_cp(struct dasd_device * device, struct request *req) | |||
1136 | recid++; | 1136 | recid++; |
1137 | } | 1137 | } |
1138 | } | 1138 | } |
1139 | if (req->flags & REQ_FAILFAST) | ||
1140 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
1139 | cqr->device = device; | 1141 | cqr->device = device; |
1140 | cqr->expires = 5 * 60 * HZ; /* 5 minutes */ | 1142 | cqr->expires = 5 * 60 * HZ; /* 5 minutes */ |
1141 | cqr->lpm = private->path_data.ppm; | 1143 | cqr->lpm = private->path_data.ppm; |
@@ -1252,6 +1254,7 @@ dasd_eckd_release(struct block_device *bdev, int no, long args) | |||
1252 | cqr->cpaddr->cda = (__u32)(addr_t) cqr->data; | 1254 | cqr->cpaddr->cda = (__u32)(addr_t) cqr->data; |
1253 | cqr->device = device; | 1255 | cqr->device = device; |
1254 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); | 1256 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); |
1257 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
1255 | cqr->retries = 0; | 1258 | cqr->retries = 0; |
1256 | cqr->expires = 2 * HZ; | 1259 | cqr->expires = 2 * HZ; |
1257 | cqr->buildclk = get_clock(); | 1260 | cqr->buildclk = get_clock(); |
@@ -1296,6 +1299,7 @@ dasd_eckd_reserve(struct block_device *bdev, int no, long args) | |||
1296 | cqr->cpaddr->cda = (__u32)(addr_t) cqr->data; | 1299 | cqr->cpaddr->cda = (__u32)(addr_t) cqr->data; |
1297 | cqr->device = device; | 1300 | cqr->device = device; |
1298 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); | 1301 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); |
1302 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
1299 | cqr->retries = 0; | 1303 | cqr->retries = 0; |
1300 | cqr->expires = 2 * HZ; | 1304 | cqr->expires = 2 * HZ; |
1301 | cqr->buildclk = get_clock(); | 1305 | cqr->buildclk = get_clock(); |
@@ -1339,6 +1343,7 @@ dasd_eckd_steal_lock(struct block_device *bdev, int no, long args) | |||
1339 | cqr->cpaddr->cda = (__u32)(addr_t) cqr->data; | 1343 | cqr->cpaddr->cda = (__u32)(addr_t) cqr->data; |
1340 | cqr->device = device; | 1344 | cqr->device = device; |
1341 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); | 1345 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); |
1346 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
1342 | cqr->retries = 0; | 1347 | cqr->retries = 0; |
1343 | cqr->expires = 2 * HZ; | 1348 | cqr->expires = 2 * HZ; |
1344 | cqr->buildclk = get_clock(); | 1349 | cqr->buildclk = get_clock(); |
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c index 28cb4613b7f5..8ec75dc08e2c 100644 --- a/drivers/s390/block/dasd_fba.c +++ b/drivers/s390/block/dasd_fba.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
6 | * | 6 | * |
7 | * $Revision: 1.40 $ | 7 | * $Revision: 1.41 $ |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/config.h> | 10 | #include <linux/config.h> |
@@ -271,7 +271,7 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req) | |||
271 | /* Fba can only do full blocks. */ | 271 | /* Fba can only do full blocks. */ |
272 | return ERR_PTR(-EINVAL); | 272 | return ERR_PTR(-EINVAL); |
273 | count += bv->bv_len >> (device->s2b_shift + 9); | 273 | count += bv->bv_len >> (device->s2b_shift + 9); |
274 | #if defined(CONFIG_ARCH_S390X) | 274 | #if defined(CONFIG_64BIT) |
275 | if (idal_is_needed (page_address(bv->bv_page), | 275 | if (idal_is_needed (page_address(bv->bv_page), |
276 | bv->bv_len)) | 276 | bv->bv_len)) |
277 | cidaw += bv->bv_len / blksize; | 277 | cidaw += bv->bv_len / blksize; |
@@ -352,6 +352,8 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req) | |||
352 | recid++; | 352 | recid++; |
353 | } | 353 | } |
354 | } | 354 | } |
355 | if (req->flags & REQ_FAILFAST) | ||
356 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags); | ||
355 | cqr->device = device; | 357 | cqr->device = device; |
356 | cqr->expires = 5 * 60 * HZ; /* 5 minutes */ | 358 | cqr->expires = 5 * 60 * HZ; /* 5 minutes */ |
357 | cqr->retries = 32; | 359 | cqr->retries = 32; |
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h index 9fab04f3056d..2fb05c4a528c 100644 --- a/drivers/s390/block/dasd_int.h +++ b/drivers/s390/block/dasd_int.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Bugreports.to..: <Linux390@de.ibm.com> | 6 | * Bugreports.to..: <Linux390@de.ibm.com> |
7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
8 | * | 8 | * |
9 | * $Revision: 1.65 $ | 9 | * $Revision: 1.68 $ |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #ifndef DASD_INT_H | 12 | #ifndef DASD_INT_H |
@@ -208,6 +208,7 @@ struct dasd_ccw_req { | |||
208 | 208 | ||
209 | /* per dasd_ccw_req flags */ | 209 | /* per dasd_ccw_req flags */ |
210 | #define DASD_CQR_FLAGS_USE_ERP 0 /* use ERP for this request */ | 210 | #define DASD_CQR_FLAGS_USE_ERP 0 /* use ERP for this request */ |
211 | #define DASD_CQR_FLAGS_FAILFAST 1 /* FAILFAST */ | ||
211 | 212 | ||
212 | /* Signature for error recovery functions. */ | 213 | /* Signature for error recovery functions. */ |
213 | typedef struct dasd_ccw_req *(*dasd_erp_fn_t) (struct dasd_ccw_req *); | 214 | typedef struct dasd_ccw_req *(*dasd_erp_fn_t) (struct dasd_ccw_req *); |
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c index 789595b3fa09..044b75371990 100644 --- a/drivers/s390/block/dasd_ioctl.c +++ b/drivers/s390/block/dasd_ioctl.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 |
9 | * | 9 | * |
10 | * $Revision: 1.47 $ | 10 | * $Revision: 1.50 $ |
11 | * | 11 | * |
12 | * i/o controls for the dasd driver. | 12 | * i/o controls for the dasd driver. |
13 | */ | 13 | */ |
@@ -352,6 +352,9 @@ dasd_ioctl_read_profile(struct block_device *bdev, int no, long args) | |||
352 | if (device == NULL) | 352 | if (device == NULL) |
353 | return -ENODEV; | 353 | return -ENODEV; |
354 | 354 | ||
355 | if (dasd_profile_level == DASD_PROFILE_OFF) | ||
356 | return -EIO; | ||
357 | |||
355 | if (copy_to_user((long __user *) args, (long *) &device->profile, | 358 | if (copy_to_user((long __user *) args, (long *) &device->profile, |
356 | sizeof (struct dasd_profile_info_t))) | 359 | sizeof (struct dasd_profile_info_t))) |
357 | return -EFAULT; | 360 | return -EFAULT; |
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 4fde41188996..2e727f49ad19 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | #include <linux/completion.h> | 16 | #include <linux/completion.h> |
17 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
18 | #include <asm/ccwdev.h> // for s390_root_dev_(un)register() | 18 | #include <asm/s390_rdev.h> |
19 | 19 | ||
20 | //#define DCSSBLK_DEBUG /* Debug messages on/off */ | 20 | //#define DCSSBLK_DEBUG /* Debug messages on/off */ |
21 | #define DCSSBLK_NAME "dcssblk" | 21 | #define DCSSBLK_NAME "dcssblk" |
diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c index d428c909b8a0..bf3a67c3cc5e 100644 --- a/drivers/s390/block/xpram.c +++ b/drivers/s390/block/xpram.c | |||
@@ -160,7 +160,7 @@ static int xpram_page_in (unsigned long page_addr, unsigned int xpage_index) | |||
160 | "0: ipm %0\n" | 160 | "0: ipm %0\n" |
161 | " srl %0,28\n" | 161 | " srl %0,28\n" |
162 | "1:\n" | 162 | "1:\n" |
163 | #ifndef CONFIG_ARCH_S390X | 163 | #ifndef CONFIG_64BIT |
164 | ".section __ex_table,\"a\"\n" | 164 | ".section __ex_table,\"a\"\n" |
165 | " .align 4\n" | 165 | " .align 4\n" |
166 | " .long 0b,1b\n" | 166 | " .long 0b,1b\n" |
@@ -208,7 +208,7 @@ static long xpram_page_out (unsigned long page_addr, unsigned int xpage_index) | |||
208 | "0: ipm %0\n" | 208 | "0: ipm %0\n" |
209 | " srl %0,28\n" | 209 | " srl %0,28\n" |
210 | "1:\n" | 210 | "1:\n" |
211 | #ifndef CONFIG_ARCH_S390X | 211 | #ifndef CONFIG_64BIT |
212 | ".section __ex_table,\"a\"\n" | 212 | ".section __ex_table,\"a\"\n" |
213 | " .align 4\n" | 213 | " .align 4\n" |
214 | " .long 0b,1b\n" | 214 | " .long 0b,1b\n" |