diff --git a/0002-Recover-from-fsync-fail-on-read-only-filesystem-RhBu.patch b/0002-Recover-from-fsync-fail-on-read-only-filesystem-RhBu.patch
new file mode 100644
index 0000000..637f081
--- /dev/null
+++ b/0002-Recover-from-fsync-fail-on-read-only-filesystem-RhBu.patch
@@ -0,0 +1,44 @@
+From 33be80700bc594f34818ce697493c17e70430390 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
+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
+
diff --git a/librepo.spec b/librepo.spec
index e9746f3..5d93714 100644
--- a/librepo.spec
+++ b/librepo.spec
@@ -12,13 +12,14 @@
 
 Name:           librepo
 Version:        1.14.0
-Release:        3%{?dist}
+Release:        4%{?dist}
 Summary:        Repodata downloading library
 
 License:        LGPLv2+
 URL:            https://github.com/rpm-software-management/librepo
 Source0:        %{url}/archive/%{version}/%{name}-%{version}.tar.gz
 Patch1:         0001-Replace-python3-flask-with-httpserver-in-python-tests.patch
+Patch2:         0002-Recover-from-fsync-fail-on-read-only-filesystem-RhBu.patch
 
 BuildRequires:  cmake
 BuildRequires:  gcc
@@ -97,6 +98,9 @@ Python 3 bindings for the librepo library.
 %{python3_sitearch}/%{name}/
 
 %changelog
+* Tue Jul 13 2021 Marek Blaha <mblaha@redhat.com> - 1.14.0-4
+- Recover from fsync fail on read-only filesystem (RhBug:1981194)
+
 * Wed Jun 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.14.0-3
 - Rebuilt for RHEL 9 BETA for openssl 3.0
   Related: rhbz#1971065