FAILED: patch "[PATCH] xen/gntdev: Ignore failure to unmap INVALID_GRANT_HANDLE" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 166d3863231667c4f64dee72b77d1102cdfad11f Mon Sep 17 00:00:00 2001
From: Demi Marie Obenour <[email protected]>
Date: Sun, 10 Jul 2022 19:05:22 -0400
Subject: [PATCH] xen/gntdev: Ignore failure to unmap INVALID_GRANT_HANDLE
The error paths of gntdev_mmap() can call unmap_grant_pages() even though not all of the pages have been successfully mapped. This will trigger the WARN_ON()s in __unmap_grant_pages_done(). The number of warnings can be very large; I have observed thousands of lines of warnings in the systemd journal.
Avoid this problem by only warning on unmapping failure if the handle being unmapped is not INVALID_GRANT_HANDLE. The handle field of any page that was not successfully mapped will be INVALID_GRANT_HANDLE, so this catches all cases where unmapping can legitimately fail.
drivers/xen/gntdev.c +4 -2
@@ -396,13 +396,15 @@ static void __unmap_grant_pages_done(int result,unsigned int offset = data->unmap_ops - map->unmap_ops;for (i =0 ; i < data->count; i++) { -WARN_ON (map->unmap_ops[offset+i].status); +WARN_ON (map->unmap_ops[offset + i].status != GNTST_okay && + map->unmap_ops[offset + i].handle !=INVALID_GRANT_HANDLE );pr_debug ("unmap handle=%d st=%d\n" , map->unmap_ops[offset+i].handle, map->unmap_ops[offset+i].status); map->unmap_ops[offset+i].handle =INVALID_GRANT_HANDLE ;if (use_ptemod) { -WARN_ON (map->kunmap_ops[offset+i].status); +WARN_ON (map->kunmap_ops[offset + i].status != GNTST_okay && + map->kunmap_ops[offset + i].handle !=INVALID_GRANT_HANDLE );pr_debug ("kunmap handle=%u st=%d\n" , map->kunmap_ops[offset+i].handle, map->kunmap_ops[offset+i].status);