]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
um: chan_user: catch EINTR when reading and writing
authorBenjamin Berg <benjamin.berg@intel.com>
Wed, 18 Oct 2023 12:36:41 +0000 (14:36 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 3 Jul 2024 10:18:01 +0000 (12:18 +0200)
If the read/write function returns an error then we expect to see an
event/IRQ later on. However, this will only happen after an EAGAIN as we
are using edge based event triggering.

As such, EINTR needs to be caught should it happen.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Link: https://patch.msgid.link/20231018123643.1255813-2-benjamin@sipsolutions.net
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
arch/um/drivers/chan_user.c

index ec04e47b9d799d0939a531b59e55c8e58b2ee135..60fcb181835dd2bc81b9cb36c52c89ec974c083e 100644 (file)
@@ -23,7 +23,7 @@ int generic_read(int fd, __u8 *c_out, void *unused)
 {
        int n;
 
-       n = read(fd, c_out, sizeof(*c_out));
+       CATCH_EINTR(n = read(fd, c_out, sizeof(*c_out)));
        if (n > 0)
                return n;
        else if (n == 0)
@@ -39,7 +39,7 @@ int generic_write(int fd, const __u8 *buf, size_t n, void *unused)
 {
        int err;
 
-       err = write(fd, buf, n);
+       CATCH_EINTR(err = write(fd, buf, n));
        if (err > 0)
                return err;
        else if (errno == EAGAIN)