| 990 | } |
| 991 | |
| 992 | static bool |
| 993 | swp_pager_xfer_source(vm_object_t srcobject, vm_object_t dstobject, |
| 994 | vm_pindex_t pindex, daddr_t addr) |
| 995 | { |
| 996 | daddr_t dstaddr; |
| 997 | |
| 998 | KASSERT(srcobject->type == OBJT_SWAP, |
| 999 | ("%s: Srcobject not swappable", __func__)); |
| 1000 | if (dstobject->type == OBJT_SWAP && |
| 1001 | swp_pager_meta_lookup(dstobject, pindex) != SWAPBLK_NONE) { |
| 1002 | /* Caller should destroy the source block. */ |
| 1003 | return (false); |
| 1004 | } |
| 1005 | |
| 1006 | /* |
| 1007 | * Destination has no swapblk and is not resident, transfer source. |
| 1008 | * swp_pager_meta_build() can sleep. |
| 1009 | */ |
| 1010 | VM_OBJECT_WUNLOCK(srcobject); |
| 1011 | dstaddr = swp_pager_meta_build(dstobject, pindex, addr); |
| 1012 | KASSERT(dstaddr == SWAPBLK_NONE, |
| 1013 | ("Unexpected destination swapblk")); |
| 1014 | VM_OBJECT_WLOCK(srcobject); |
| 1015 | |
| 1016 | return (true); |
| 1017 | } |
| 1018 | |
| 1019 | /* |
| 1020 | * SWAP_PAGER_COPY() - copy blocks from source pager to destination pager |
no test coverage detected