diff --git a/sdcard/sdcard.c b/sdcard/sdcard.c
index 21986fccf6f30227403d15423044c69480f0d072..4b8e0c05e7afc3c1473dae66bdfced8792405cf5 100644
--- a/sdcard/sdcard.c
+++ b/sdcard/sdcard.c
@@ -1513,16 +1513,14 @@ static void handle_fuse_requests(struct fuse_handler* handler)
 {
     struct fuse* fuse = handler->fuse;
     for (;;) {
-        ssize_t len = read(fuse->fd,
-                handler->request_buffer, sizeof(handler->request_buffer));
+        ssize_t len = TEMP_FAILURE_RETRY(read(fuse->fd,
+                handler->request_buffer, sizeof(handler->request_buffer)));
         if (len < 0) {
-            if (errno != EINTR) {
-                ERROR("[%d] handle_fuse_requests: errno=%d\n", handler->token, errno);
-            }
             if (errno == ENODEV) {
                 ERROR("[%d] someone stole our marbles!\n", handler->token);
                 exit(2);
             }
+            ERROR("[%d] handle_fuse_requests: errno=%d\n", handler->token, errno);
             continue;
         }