From 33be80700bc594f34818ce697493c17e70430390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= Date: Mon, 17 May 2021 08:50:25 +0200 Subject: [PATCH] Recover from fsync fail on read-only filesystem (RhBug:1956361) When `fsync` fails due to the file not supporting synchronization just log the problem instead of failing the whole dnf run. This happens for example with filesystems mounted read-only in which case there is no point to `fsync` anyway. Currently we also ignore return values from `FSETXATTR` which also fails on read-only filesystem (so no checksum cache is set). This is fine however since the checksum is recomputed when needed, dnf is just a bit slower. https://bugzilla.redhat.com/show_bug.cgi?id=1956361 --- librepo/checksum.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/librepo/checksum.c b/librepo/checksum.c index db37040..6bba53c 100644 --- a/librepo/checksum.c +++ b/librepo/checksum.c @@ -266,9 +266,13 @@ lr_checksum_fd_compare(LrChecksumType type, *matches = (strcmp(expected, checksum)) ? FALSE : TRUE; if (fsync(fd) != 0) { - g_set_error(err, LR_CHECKSUM_ERROR, LRE_FILE, - "fsync failed: %s", strerror(errno)); - return FALSE; + if (errno == EROFS || errno == EINVAL) { + g_debug("fsync failed: %s", strerror(errno)); + } else { + g_set_error(err, LR_CHECKSUM_ERROR, LRE_FILE, + "fsync failed: %s", strerror(errno)); + return FALSE; + } } if (caching && *matches && timestamp != -1) { -- 2.31.1