aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/mm/extmem.c
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2006-12-04 09:40:20 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2006-12-04 09:40:20 -0500
commit6b4044bdd158aa9ad07b3f68d1c7598036d3ee58 (patch)
treecdc6d8852e2cd34b309ce4ccaf62d0bc74657d4c /arch/s390/mm/extmem.c
parent645c98c8b6c09eae58ac2f97e0ade6ced4d6443f (diff)
[S390] extmem unbalanced spin_lock.
segment save will exit with a lock held if the passed segment doesn't exist. Any subsequent call to segment_save will lead to a deadlock. Fix this and give up the lock before returning. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/mm/extmem.c')
-rw-r--r--arch/s390/mm/extmem.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c
index 226275d5c4f6..077af5404948 100644
--- a/arch/s390/mm/extmem.c
+++ b/arch/s390/mm/extmem.c
@@ -563,8 +563,9 @@ segment_save(char *name)
563 seg = segment_by_name (name); 563 seg = segment_by_name (name);
564 564
565 if (seg == NULL) { 565 if (seg == NULL) {
566 PRINT_ERR ("could not find segment %s in segment_save, please report to linux390@de.ibm.com\n",name); 566 PRINT_ERR("could not find segment %s in segment_save, please "
567 return; 567 "report to linux390@de.ibm.com\n", name);
568 goto out;
568 } 569 }
569 570
570 startpfn = seg->start_addr >> PAGE_SHIFT; 571 startpfn = seg->start_addr >> PAGE_SHIFT;