summaryrefslogtreecommitdiff
path: root/drivers/s390/char
diff options
context:
space:
mode:
authorSven Schnelle <svens@linux.ibm.com>2022-12-05 11:09:33 +0300
committerHeiko Carstens <hca@linux.ibm.com>2023-01-09 16:34:04 +0300
commit7aeeeb926c355a9a5bc7a96bae7d5ada44f1d2e9 (patch)
treeab941cc71c6026e2e34cf32b4d9e8085b955a2c2 /drivers/s390/char
parent82df96d849147c72013639134de21296b4b19d83 (diff)
downloadlinux-7aeeeb926c355a9a5bc7a96bae7d5ada44f1d2e9.tar.xz
s390/raw3270: remove BUG_ON in raw3270_request_reset()
WARN_ON_ONCE if list is not empty, and return an error code instead. Signed-off-by: Sven Schnelle <svens@linux.ibm.com> Acked-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'drivers/s390/char')
-rw-r--r--drivers/s390/char/raw3270.c10
-rw-r--r--drivers/s390/char/raw3270.h2
2 files changed, 8 insertions, 4 deletions
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c
index 130295fd1253..2939034431c0 100644
--- a/drivers/s390/char/raw3270.c
+++ b/drivers/s390/char/raw3270.c
@@ -180,15 +180,17 @@ EXPORT_SYMBOL(raw3270_request_free);
/*
* Reset request to initial state.
*/
-void raw3270_request_reset(struct raw3270_request *rq)
+int raw3270_request_reset(struct raw3270_request *rq)
{
- BUG_ON(!list_empty(&rq->list));
+ if (WARN_ON_ONCE(!list_empty(&rq->list)))
+ return -EBUSY;
rq->ccw.cmd_code = 0;
rq->ccw.count = 0;
rq->ccw.cda = __pa(rq->buffer);
rq->ccw.flags = CCW_FLAG_SLI;
rq->rescnt = 0;
rq->rc = 0;
+ return 0;
}
EXPORT_SYMBOL(raw3270_request_reset);
@@ -289,7 +291,9 @@ int raw3270_start_request(struct raw3270_view *view, struct raw3270_request *rq,
{
int rc;
- raw3270_request_reset(rq);
+ rc = raw3270_request_reset(rq);
+ if (rc)
+ return rc;
raw3270_request_set_cmd(rq, cmd);
rc = raw3270_request_add_data(rq, data, len);
if (rc)
diff --git a/drivers/s390/char/raw3270.h b/drivers/s390/char/raw3270.h
index 47b41778faae..e8c71ef7bfa0 100644
--- a/drivers/s390/char/raw3270.h
+++ b/drivers/s390/char/raw3270.h
@@ -120,7 +120,7 @@ struct raw3270_request {
struct raw3270_request *raw3270_request_alloc(size_t size);
void raw3270_request_free(struct raw3270_request *rq);
-void raw3270_request_reset(struct raw3270_request *rq);
+int raw3270_request_reset(struct raw3270_request *rq);
void raw3270_request_set_cmd(struct raw3270_request *rq, u8 cmd);
int raw3270_request_add_data(struct raw3270_request *rq, void *data, size_t size);
void raw3270_request_set_data(struct raw3270_request *rq, void *data, size_t size);