diff --git a/0003-tests-make-filemonitor-test-more-robust-to-event-ord.patch b/0003-tests-make-filemonitor-test-more-robust-to-event-ord.patch
new file mode 100644
index 0000000..bce580d
--- /dev/null
+++ b/0003-tests-make-filemonitor-test-more-robust-to-event-ord.patch
@@ -0,0 +1,134 @@
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Wed, 21 Aug 2019 16:14:27 +0100
+Subject: [PATCH] tests: make filemonitor test more robust to event ordering
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The ordering of events that are emitted during the rmdir
+test have changed with kernel >= 5.3. Semantically both
+new & old orderings are correct, so we must be able to
+cope with either.
+
+To cope with this, when we see an unexpected event, we
+push it back onto the queue and look and the subsequent
+event to see if that matches instead.
+
+Tested-by: Peter Xu <peterx@redhat.com>
+Tested-by: Wei Yang <richardw.yang@linux.intel.com>
+Tested-by: Cornelia Huck <cohuck@redhat.com>
+Reviewed-by: Thomas Huth <thuth@redhat.com>
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
+(cherry picked from commit bf9e0313c27d8e6ecd7f7de3d63e1cb25d8f6311)
+---
+ tests/test-util-filemonitor.c | 43 +++++++++++++++++++++++++++--------
+ 1 file changed, 34 insertions(+), 9 deletions(-)
+
+diff --git a/tests/test-util-filemonitor.c b/tests/test-util-filemonitor.c
+index 46e781c022..301cd2db61 100644
+--- a/tests/test-util-filemonitor.c
++++ b/tests/test-util-filemonitor.c
+@@ -45,6 +45,11 @@ typedef struct {
+     const char *filedst;
+     int64_t *watchid;
+     int eventid;
++    /*
++     * Only valid with OP_EVENT - this event might be
++     * swapped with the next OP_EVENT
++     */
++    bool swapnext;
+ } QFileMonitorTestOp;
+ 
+ typedef struct {
+@@ -98,6 +103,10 @@ qemu_file_monitor_test_handler(int64_t id,
+     QFileMonitorTestData *data = opaque;
+     QFileMonitorTestRecord *rec = g_new0(QFileMonitorTestRecord, 1);
+ 
++    if (debug) {
++        g_printerr("Queue event id %" PRIx64 " event %d file %s\n",
++                   id, event, filename);
++    }
+     rec->id = id;
+     rec->event = event;
+     rec->filename = g_strdup(filename);
+@@ -125,7 +134,8 @@ qemu_file_monitor_test_record_free(QFileMonitorTestRecord *rec)
+  * to wait for the event to be queued for us.
+  */
+ static QFileMonitorTestRecord *
+-qemu_file_monitor_test_next_record(QFileMonitorTestData *data)
++qemu_file_monitor_test_next_record(QFileMonitorTestData *data,
++                                   QFileMonitorTestRecord *pushback)
+ {
+     GTimer *timer = g_timer_new();
+     QFileMonitorTestRecord *record = NULL;
+@@ -139,9 +149,15 @@ qemu_file_monitor_test_next_record(QFileMonitorTestData *data)
+     }
+     if (data->records) {
+         record = data->records->data;
+-        tmp = data->records;
+-        data->records = g_list_remove_link(data->records, tmp);
+-        g_list_free(tmp);
++        if (pushback) {
++            data->records->data = pushback;
++        } else {
++            tmp = data->records;
++            data->records = g_list_remove_link(data->records, tmp);
++            g_list_free(tmp);
++        }
++    } else if (pushback) {
++        qemu_file_monitor_test_record_free(pushback);
+     }
+     qemu_mutex_unlock(&data->lock);
+ 
+@@ -158,13 +174,15 @@ static bool
+ qemu_file_monitor_test_expect(QFileMonitorTestData *data,
+                               int64_t id,
+                               QFileMonitorEvent event,
+-                              const char *filename)
++                              const char *filename,
++                              bool swapnext)
+ {
+     QFileMonitorTestRecord *rec;
+     bool ret = false;
+ 
+-    rec = qemu_file_monitor_test_next_record(data);
++    rec = qemu_file_monitor_test_next_record(data, NULL);
+ 
++ retry:
+     if (!rec) {
+         g_printerr("Missing event watch id %" PRIx64 " event %d file %s\n",
+                    id, event, filename);
+@@ -172,6 +190,11 @@ qemu_file_monitor_test_expect(QFileMonitorTestData *data,
+     }
+ 
+     if (id != rec->id) {
++        if (swapnext) {
++            rec = qemu_file_monitor_test_next_record(data, rec);
++            swapnext = false;
++            goto retry;
++        }
+         g_printerr("Expected watch id %" PRIx64 " but got %" PRIx64 "\n",
+                    id, rec->id);
+         goto cleanup;
+@@ -347,7 +370,8 @@ test_file_monitor_events(void)
+           .filesrc = "fish", },
+         { .type = QFILE_MONITOR_TEST_OP_EVENT,
+           .filesrc = "", .watchid = &watch4,
+-          .eventid = QFILE_MONITOR_EVENT_IGNORED },
++          .eventid = QFILE_MONITOR_EVENT_IGNORED,
++          .swapnext = true },
+         { .type = QFILE_MONITOR_TEST_OP_EVENT,
+           .filesrc = "fish", .watchid = &watch0,
+           .eventid = QFILE_MONITOR_EVENT_DELETED },
+@@ -493,8 +517,9 @@ test_file_monitor_events(void)
+                 g_printerr("Event id=%" PRIx64 " event=%d file=%s\n",
+                            *op->watchid, op->eventid, op->filesrc);
+             }
+-            if (!qemu_file_monitor_test_expect(
+-                    &data, *op->watchid, op->eventid, op->filesrc))
++            if (!qemu_file_monitor_test_expect(&data, *op->watchid,
++                                               op->eventid, op->filesrc,
++                                               op->swapnext))
+                 goto cleanup;
+             break;
+         case QFILE_MONITOR_TEST_OP_CREATE:
diff --git a/qemu.spec b/qemu.spec
index ea32d01..e7eae22 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -175,6 +175,8 @@ Source21: 95-kvm-ppc64-memlock.conf
 # gluster 4K block size fixes (bz #1737256)
 Patch0001: 0001-file-posix-Handle-undetectable-alignment.patch
 Patch0002: 0002-block-posix-Always-allocate-the-first-block.patch
+# Fix tests on kernel 5.3+
+Patch0003: 0003-tests-make-filemonitor-test-more-robust-to-event-ord.patch
 
 
 # documentation deps