aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/default_pager.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm/default_pager.c')
-rw-r--r--sys/vm/default_pager.c80
1 files changed, 30 insertions, 50 deletions
diff --git a/sys/vm/default_pager.c b/sys/vm/default_pager.c
index f334cd72d808..7fc4f6c49e00 100644
--- a/sys/vm/default_pager.c
+++ b/sys/vm/default_pager.c
@@ -27,14 +27,6 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
- * The default pager is responsible for supplying backing store to unbacked
- * storage. The backing store is usually swap so we just fall through to
- * the swap routines. However, since swap metadata has not been assigned,
- * the swap routines assign and manage the swap backing store through the
- * vm_page->swapblk field. The object is only converted when the page is
- * physically freed after having been cleaned and even then vm_page->swapblk
- * is maintained whenever a resident page also has swap backing store.
*/
#include <sys/cdefs.h>
@@ -53,14 +45,16 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_pager.h>
#include <vm/swap_pager.h>
-static vm_object_t default_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
- vm_ooffset_t, struct ucred *);
-static void default_pager_dealloc(vm_object_t);
-static int default_pager_getpages(vm_object_t, vm_page_t *, int, int *, int *);
-static void default_pager_putpages(vm_object_t, vm_page_t *, int,
- boolean_t, int *);
-static boolean_t default_pager_haspage(vm_object_t, vm_pindex_t, int *,
- int *);
+static vm_object_t default_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
+ vm_ooffset_t, struct ucred *);
+static void default_pager_dealloc(vm_object_t);
+static int default_pager_getpages(vm_object_t, vm_page_t *, int,
+ int *, int *);
+static void default_pager_putpages(vm_object_t, vm_page_t *, int,
+ boolean_t, int *);
+static boolean_t default_pager_haspage(vm_object_t, vm_pindex_t, int *,
+ int *);
+
/*
* pagerops for OBJT_DEFAULT - "default pager".
*/
@@ -73,7 +67,7 @@ struct pagerops defaultpagerops = {
};
/*
- * no_pager_alloc just returns an initialized object.
+ * Return an initialized object.
*/
static vm_object_t
default_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
@@ -100,68 +94,54 @@ default_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
}
/*
- * deallocate resources associated with default objects. The default objects
- * have no special resources allocated to them, but the vm_page's being used
- * in this object might. Still, we do not have to do anything - we will free
- * the swapblk in the underlying vm_page's when we free the vm_page or
- * garbage collect the vm_page cache list.
+ * Deallocate resources associated with the object.
*/
static void
-default_pager_dealloc(object)
- vm_object_t object;
+default_pager_dealloc(vm_object_t object)
{
- /*
- * OBJT_DEFAULT objects have no special resources allocated to them.
- */
+
+ /* Reserved swap is released by vm_object_destroy(). */
object->type = OBJT_DEAD;
}
/*
- * Load pages from backing store. Since OBJT_DEFAULT is converted to
- * OBJT_SWAP at the time a swap-backed vm_page_t is freed, we will never
- * see a vm_page with assigned swap here.
+ * Load pages from backing store.
*/
static int
default_pager_getpages(vm_object_t object, vm_page_t *m, int count,
int *rbehind, int *rahead)
{
+ /*
+ * Since an OBJT_DEFAULT object is converted to OBJT_SWAP by the first
+ * call to the putpages method, this function will never be called on
+ * a vm_page with assigned swap.
+ */
return (VM_PAGER_FAIL);
}
/*
- * Store pages to backing store. We should assign swap and initiate
- * I/O. We do not actually convert the object to OBJT_SWAP here. The
- * object will be converted when the written-out vm_page_t is moved from the
- * cache to the free list.
+ * Store pages to backing store.
*/
static void
default_pager_putpages(vm_object_t object, vm_page_t *m, int count,
int flags, int *rtvals)
{
+ /* The swap pager will convert the object to OBJT_SWAP. */
swappagerops.pgo_putpages(object, m, count, flags, rtvals);
}
/*
- * Tell us whether the backing store for the requested (object,index) is
- * synchronized. i.e. tell us whether we can throw the page away and
- * reload it later. So, for example, if we are in the process of writing
- * the page to its backing store, or if no backing store has been assigned,
- * it is not yet synchronized.
- *
- * It is possible to have fully-synchronized swap assigned without the
- * object having been converted. We just call swap_pager_haspage() to
- * deal with it since it must already deal with it plus deal with swap
- * meta-data structures.
+ * Tell us whether the requested (object,index) is available from the object's
+ * backing store.
*/
static boolean_t
-default_pager_haspage(object, pindex, before, after)
- vm_object_t object;
- vm_pindex_t pindex;
- int *before;
- int *after;
+default_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before,
+ int *after)
{
- return FALSE;
+
+ /* An OBJT_DEFAULT object has no backing store. */
+ return (FALSE);
}