s390/raw3270: remove BUG_ON in raw3270_request_reset()
authorSven Schnelle <svens@linux.ibm.com>
Mon, 5 Dec 2022 08:09:33 +0000 (09:09 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 9 Jan 2023 13:34:04 +0000 (14:34 +0100)
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>
drivers/s390/char/raw3270.c
drivers/s390/char/raw3270.h

index 130295fd12531f01b32d7afcba8a930a11c1dabc..2939034431c0d65b674cd2ee5cbcadf93c1cde48 100644 (file)
@@ -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)
index 47b41778faaed11cf53f9139c8d6571c06daa8e2..e8c71ef7bfa05e1e9d339e1dd0a40a4cc2515244 100644 (file)
@@ -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);