* [patch 0/4] Latest patches for s390
@ 2007-11-27 16:22 Martin Schwidefsky
2007-11-27 16:22 ` [patch 1/4] cio: Issue SenseID per path Martin Schwidefsky
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Martin Schwidefsky @ 2007-11-27 16:22 UTC (permalink / raw
To: linux-kernel, linux-s390
The following patches have been added to the 2.6.24 queue:
Christian Borntraeger (2):
[S390] dcssblk: prevent early access without own make_request function
[S390] Fix compile error on 31bit without preemption
Cornelia Huck (1):
[S390] cio: Issue SenseID per path.
Peter Oberparleiter (1):
[S390] cio: add missing reprobe loop end statement
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 1/4] cio: Issue SenseID per path.
2007-11-27 16:22 [patch 0/4] Latest patches for s390 Martin Schwidefsky
@ 2007-11-27 16:22 ` Martin Schwidefsky
2007-11-27 16:22 ` [patch 2/4] cio: add missing reprobe loop end statement Martin Schwidefsky
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Martin Schwidefsky @ 2007-11-27 16:22 UTC (permalink / raw
To: linux-kernel, linux-s390; +Cc: Cornelia Huck, Martin Schwidefsky
[-- Attachment #1: 001-cio-senseid.diff --]
[-- Type: text/plain, Size: 2905 bytes --]
From: Cornelia Huck <cornelia.huck@de.ibm.com>
We may receive a unit check for every path when we issue a SenseID.
Unfortunately, the channel subsystem will try on a different path
every time if we use a lpm of 0xff, which will exhaust our retry
counter.
Therefore, revert SenseID to its previous per-path behaviour and
just leave out the suspend multipath reconnect.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---
drivers/s390/cio/device_id.c | 37 ++++++++++++++++++++++++++++---------
1 file changed, 28 insertions(+), 9 deletions(-)
Index: quilt-2.6/drivers/s390/cio/device_id.c
===================================================================
--- quilt-2.6.orig/drivers/s390/cio/device_id.c
+++ quilt-2.6/drivers/s390/cio/device_id.c
@@ -113,6 +113,7 @@ __ccw_device_sense_id_start(struct ccw_d
{
struct subchannel *sch;
struct ccw1 *ccw;
+ int ret;
sch = to_subchannel(cdev->dev.parent);
/* Setup sense channel program. */
@@ -124,9 +125,25 @@ __ccw_device_sense_id_start(struct ccw_d
/* Reset device status. */
memset(&cdev->private->irb, 0, sizeof(struct irb));
- cdev->private->flags.intretry = 0;
- return cio_start(sch, ccw, LPM_ANYPATH);
+ /* Try on every path. */
+ ret = -ENODEV;
+ while (cdev->private->imask != 0) {
+ if ((sch->opm & cdev->private->imask) != 0 &&
+ cdev->private->iretry > 0) {
+ cdev->private->iretry--;
+ /* Reset internal retry indication. */
+ cdev->private->flags.intretry = 0;
+ ret = cio_start (sch, cdev->private->iccws,
+ cdev->private->imask);
+ /* ret is 0, -EBUSY, -EACCES or -ENODEV */
+ if (ret != -EACCES)
+ return ret;
+ }
+ cdev->private->imask >>= 1;
+ cdev->private->iretry = 5;
+ }
+ return ret;
}
void
@@ -136,7 +153,8 @@ ccw_device_sense_id_start(struct ccw_dev
memset (&cdev->private->senseid, 0, sizeof (struct senseid));
cdev->private->senseid.cu_type = 0xFFFF;
- cdev->private->iretry = 3;
+ cdev->private->imask = 0x80;
+ cdev->private->iretry = 5;
ret = __ccw_device_sense_id_start(cdev);
if (ret && ret != -EBUSY)
ccw_device_sense_id_done(cdev, ret);
@@ -252,13 +270,14 @@ ccw_device_sense_id_irq(struct ccw_devic
ccw_device_sense_id_done(cdev, ret);
break;
case -EACCES: /* channel is not operational. */
+ sch->lpm &= ~cdev->private->imask;
+ cdev->private->imask >>= 1;
+ cdev->private->iretry = 5;
+ /* fall through. */
case -EAGAIN: /* try again. */
- cdev->private->iretry--;
- if (cdev->private->iretry > 0) {
- ret = __ccw_device_sense_id_start(cdev);
- if (ret == 0 || ret == -EBUSY)
- break;
- }
+ ret = __ccw_device_sense_id_start(cdev);
+ if (ret == 0 || ret == -EBUSY)
+ break;
/* fall through. */
default: /* Sense ID failed. Try asking VM. */
if (MACHINE_IS_VM) {
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 2/4] cio: add missing reprobe loop end statement
2007-11-27 16:22 [patch 0/4] Latest patches for s390 Martin Schwidefsky
2007-11-27 16:22 ` [patch 1/4] cio: Issue SenseID per path Martin Schwidefsky
@ 2007-11-27 16:22 ` Martin Schwidefsky
2007-11-27 16:22 ` [patch 3/4] dcssblk: prevent early access without own make_request function Martin Schwidefsky
2007-11-27 16:22 ` [patch 4/4] Fix compile error on 31bit without preemption Martin Schwidefsky
3 siblings, 0 replies; 5+ messages in thread
From: Martin Schwidefsky @ 2007-11-27 16:22 UTC (permalink / raw
To: linux-kernel, linux-s390; +Cc: Peter Oberparleiter, Martin Schwidefsky
[-- Attachment #1: 002-cio-reprobe.diff --]
[-- Type: text/plain, Size: 765 bytes --]
From: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Add loop end statement to prevent looping over empty subchannel sets.
Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---
drivers/s390/cio/css.c | 1 +
1 file changed, 1 insertion(+)
Index: quilt-2.6/drivers/s390/cio/css.c
===================================================================
--- quilt-2.6.orig/drivers/s390/cio/css.c
+++ quilt-2.6/drivers/s390/cio/css.c
@@ -451,6 +451,7 @@ static int reprobe_subchannel(struct sub
break;
case -ENXIO:
case -ENOMEM:
+ case -EIO:
/* These should abort looping */
break;
default:
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 3/4] dcssblk: prevent early access without own make_request function
2007-11-27 16:22 [patch 0/4] Latest patches for s390 Martin Schwidefsky
2007-11-27 16:22 ` [patch 1/4] cio: Issue SenseID per path Martin Schwidefsky
2007-11-27 16:22 ` [patch 2/4] cio: add missing reprobe loop end statement Martin Schwidefsky
@ 2007-11-27 16:22 ` Martin Schwidefsky
2007-11-27 16:22 ` [patch 4/4] Fix compile error on 31bit without preemption Martin Schwidefsky
3 siblings, 0 replies; 5+ messages in thread
From: Martin Schwidefsky @ 2007-11-27 16:22 UTC (permalink / raw
To: linux-kernel, linux-s390
Cc: Gerald Schaefer, Christian Borntraeger, Martin Schwidefsky
[-- Attachment #1: 003-dcss-ioerror.diff --]
[-- Type: text/plain, Size: 1366 bytes --]
From: Christian Borntraeger <borntraeger@de.ibm.com>
When loading a dcss segment with the dcssblk driver, sometimes the
following kind of message appears:
bio too big device dcssblk0 (8 > 0)
Buffer I/O error on device dcssblk0, logical block 172016
..
The fix is to move the disk registration after setting the
make_request function, to avoid calls into generic_make_request
for dcssblock without having the make_request function set up
properly.
Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---
drivers/s390/block/dcssblk.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: quilt-2.6/drivers/s390/block/dcssblk.c
===================================================================
--- quilt-2.6.orig/drivers/s390/block/dcssblk.c
+++ quilt-2.6/drivers/s390/block/dcssblk.c
@@ -472,11 +472,11 @@ dcssblk_add_store(struct device *dev, st
if (rc)
goto unregister_dev;
- add_disk(dev_info->gd);
-
blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
blk_queue_hardsect_size(dev_info->dcssblk_queue, 4096);
+ add_disk(dev_info->gd);
+
switch (dev_info->segment_type) {
case SEG_TYPE_SR:
case SEG_TYPE_ER:
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 4/4] Fix compile error on 31bit without preemption
2007-11-27 16:22 [patch 0/4] Latest patches for s390 Martin Schwidefsky
` (2 preceding siblings ...)
2007-11-27 16:22 ` [patch 3/4] dcssblk: prevent early access without own make_request function Martin Schwidefsky
@ 2007-11-27 16:22 ` Martin Schwidefsky
3 siblings, 0 replies; 5+ messages in thread
From: Martin Schwidefsky @ 2007-11-27 16:22 UTC (permalink / raw
To: linux-kernel, linux-s390; +Cc: Christian Borntraeger, Martin Schwidefsky
[-- Attachment #1: 004-non-preempt.diff --]
[-- Type: text/plain, Size: 1191 bytes --]
From: Christian Borntraeger <borntraeger@de.ibm.com>
Commit b8e7a54cd06b0b0174029ef3a7f5a1415a2c28f2 introduced a compile
error if CONFIG_PREEMPT is not set:
arch/s390/kernel/built-in.o: In function `cleanup_io_leave_insn':
/space/kvm/arch/s390/kernel/entry.S:(.text+0xbfce): undefined reference to `preempt_schedule_irq'
This patch hides preempt_schedule_irq if CONFIG_PREEMPT is not set.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---
arch/s390/kernel/entry.S | 2 ++
1 file changed, 2 insertions(+)
Index: quilt-2.6/arch/s390/kernel/entry.S
===================================================================
--- quilt-2.6.orig/arch/s390/kernel/entry.S
+++ quilt-2.6/arch/s390/kernel/entry.S
@@ -1079,8 +1079,10 @@ cleanup_io_leave_insn:
.Lexecve_tail: .long execve_tail
.Ljump_table: .long pgm_check_table
.Lschedule: .long schedule
+#ifdef CONFIG_PREEMPT
.Lpreempt_schedule_irq:
.long preempt_schedule_irq
+#endif
.Ltrace: .long syscall_trace
.Lschedtail: .long schedule_tail
.Lsysc_table: .long sys_call_table
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-11-27 16:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-27 16:22 [patch 0/4] Latest patches for s390 Martin Schwidefsky
2007-11-27 16:22 ` [patch 1/4] cio: Issue SenseID per path Martin Schwidefsky
2007-11-27 16:22 ` [patch 2/4] cio: add missing reprobe loop end statement Martin Schwidefsky
2007-11-27 16:22 ` [patch 3/4] dcssblk: prevent early access without own make_request function Martin Schwidefsky
2007-11-27 16:22 ` [patch 4/4] Fix compile error on 31bit without preemption Martin Schwidefsky
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).