virtiofsd: Check for EINTR in preadv() and retry
authorVivek Goyal <vgoyal@redhat.com>
Tue, 18 May 2021 21:35:32 +0000 (17:35 -0400)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Wed, 26 May 2021 17:39:32 +0000 (18:39 +0100)
We don't seem to check for EINTR and retry. There are other places
in code where we check for EINTR. So lets add a check.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Connor Kuehl <ckuehl@redhat.com>
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Message-Id: <20210518213538.693422-2-vgoyal@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
tools/virtiofsd/fuse_virtio.c

index 9efdbd8ffd0a05600a451c2b82e0073b7e7406de..755d7fb25c072b514910bc1617c4e8f7174d5357 100644 (file)
@@ -421,6 +421,9 @@ int virtio_send_data_iov(struct fuse_session *se, struct fuse_chan *ch,
 
         if (ret == -1) {
             ret = errno;
+            if (ret == EINTR) {
+                continue;
+            }
             fuse_log(FUSE_LOG_DEBUG, "%s: preadv failed (%m) len=%zd\n",
                      __func__, len);
             goto err;