]> git.hungrycats.org Git - linux/commitdiff
tty: tty_buffer: invert conditions in __tty_buffer_request_room()
authorJiri Slaby (SUSE) <jirislaby@kernel.org>
Wed, 16 Aug 2023 10:55:30 +0000 (12:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Aug 2023 12:58:16 +0000 (14:58 +0200)
We are used to handle "bad" states in the 'if's in the kernel. Refactor
(invert the two conditions in) __tty_buffer_request_room(), so that the
code returns from the fast paths immediately instead of postponing to
the heavy end of the function.

Signed-off-by: "Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Link: https://lore.kernel.org/r/20230816105530.3335-11-jirislaby@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/tty_buffer.c

index 44c0adaec8505decf134d7081f9ff06da97b6b41..5f6d0cf67571b37b4d583df8239dd9712730c98b 100644 (file)
@@ -266,28 +266,28 @@ static int __tty_buffer_request_room(struct tty_port *port, size_t size,
        size_t left = (b->flags ? 1 : 2) * b->size - b->used;
        bool change = !b->flags && flags;
 
-       if (change || left < size) {
-               /* This is the slow path - looking for new buffers to use */
-               n = tty_buffer_alloc(port, size);
-               if (n != NULL) {
-                       n->flags = flags;
-                       buf->tail = n;
-                       /*
-                        * Paired w/ acquire in flush_to_ldisc() and lookahead_bufs()
-                        * ensures they see all buffer data.
-                        */
-                       smp_store_release(&b->commit, b->used);
-                       /*
-                        * Paired w/ acquire in flush_to_ldisc() and lookahead_bufs()
-                        * ensures the latest commit value can be read before the head
-                        * is advanced to the next buffer.
-                        */
-                       smp_store_release(&b->next, n);
-               } else if (change)
-                       size = 0;
-               else
-                       size = left;
-       }
+       if (!change && left >= size)
+               return size;
+
+       /* This is the slow path - looking for new buffers to use */
+       n = tty_buffer_alloc(port, size);
+       if (n == NULL)
+               return change ? 0 : left;
+
+       n->flags = flags;
+       buf->tail = n;
+       /*
+        * Paired w/ acquire in flush_to_ldisc() and lookahead_bufs()
+        * ensures they see all buffer data.
+        */
+       smp_store_release(&b->commit, b->used);
+       /*
+        * Paired w/ acquire in flush_to_ldisc() and lookahead_bufs()
+        * ensures the latest commit value can be read before the head
+        * is advanced to the next buffer.
+        */
+       smp_store_release(&b->next, n);
+
        return size;
 }