diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2006-12-04 09:40:20 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-12-04 09:40:20 -0500 |
commit | 6b4044bdd158aa9ad07b3f68d1c7598036d3ee58 (patch) | |
tree | cdc6d8852e2cd34b309ce4ccaf62d0bc74657d4c /arch/s390 | |
parent | 645c98c8b6c09eae58ac2f97e0ade6ced4d6443f (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')
-rw-r--r-- | arch/s390/mm/extmem.c | 5 |
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; |