Page MenuHomeFreeBSD

D47064.id144659.diff
No OneTemporary

D47064.id144659.diff

Index: sys/vm/swap_pager.c
===================================================================
--- sys/vm/swap_pager.c
+++ sys/vm/swap_pager.c
@@ -1917,15 +1917,6 @@
swp_pager_init_freerange(&range);
sb = swblk_iter_init(&blks, object, 0);
while (sb != NULL) {
- if ((object->flags & OBJ_DEAD) != 0) {
- /*
- * Make sure that pending writes finish before
- * returning.
- */
- vm_object_pip_wait(object, "swpoff");
- swp_pager_meta_free_all(object);
- break;
- }
sb_empty = true;
for (i = 0; i < SWAP_META_PAGES; i++) {
/* Skip an invalid block. */
@@ -1983,8 +1974,21 @@
}
if (i < SWAP_META_PAGES) {
/*
- * With the object lock released and regained, the
- * swapblk could have been freed, so reset the pages
+ * The object lock has been released and regained.
+ * Perhaps the object is now dead.
+ */
+ if ((object->flags & OBJ_DEAD) != 0) {
+ /*
+ * Make sure that pending writes finish before
+ * returning.
+ */
+ vm_object_pip_wait(object, "swpoff");
+ swp_pager_meta_free_all(object);
+ break;
+ }
+
+ /*
+ * The swapblk could have been freed, so reset the pages
* iterator and search again for the first swblk at or
* after blks.index.
*/

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 19, 7:38 AM (13 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35226370
Default Alt Text
D47064.id144659.diff (1 KB)

Event Timeline