[Suspend2][ 09/19] [Suspend2] Write a pageset.

From: Nigel Cunningham
Date: Mon Jun 26 2006 - 19:24:21 EST


Write a set of pages to storage, also recording the time taken.

Signed-off-by: Nigel Cunningham <nigel@xxxxxxxxxxxx>

kernel/power/io.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/kernel/power/io.c b/kernel/power/io.c
index f237231..fd20324 100644
--- a/kernel/power/io.c
+++ b/kernel/power/io.c
@@ -306,3 +306,61 @@ static int do_rw_loop(int write, int fin
return 0;
}

+/* write_pageset()
+ *
+ * Description: Write a pageset to disk.
+ * Arguments: pagedir: Pointer to the pagedir to be saved.
+ * whichtowrite: Controls what debugging output is printed.
+ * Returns: Zero on success or -1 on failure.
+ */
+
+int write_pageset(struct pagedir *pagedir, int whichtowrite)
+{
+ int finish_at, base = 0, start_time, end_time;
+ int barmax = pagedir1.pageset_size + pagedir2.pageset_size;
+ long error = 0;
+ dyn_pageflags_t *pageflags;
+
+ /*
+ * Even if there is nothing to read or write, the writer
+ * may need the init/cleanup for it's housekeeping. (eg:
+ * Pageset1 may start where pageset2 ends when writing).
+ */
+ finish_at = pagedir->pageset_size;
+
+ if (whichtowrite == 1) {
+ suspend_prepare_status(DONT_CLEAR_BAR,
+ "Writing kernel & process data...");
+ base = pagedir2.pageset_size;
+ if (test_action_state(SUSPEND_TEST_FILTER_SPEED) ||
+ test_action_state(SUSPEND_TEST_BIO))
+ pageflags = &pageset1_map;
+ else
+ pageflags = &pageset1_copy_map;
+ } else {
+ suspend_prepare_status(CLEAR_BAR, "Writing caches...");
+ pageflags = &pageset2_map;
+ bytes_in = bytes_out = 0;
+ }
+
+ start_time = jiffies;
+
+ if (!rw_init_modules(1, whichtowrite))
+ error = do_rw_loop(1, finish_at, pageflags, base, barmax);
+
+ if (rw_cleanup_modules(WRITE)) {
+ abort_suspend("Failed to cleanup after writing.");
+ error = 1;
+ }
+
+ /* Statistics */
+ end_time = jiffies;
+
+ if ((end_time - start_time) && (!test_result_state(SUSPEND_ABORTED))) {
+ suspend_io_time[0][0] += finish_at,
+ suspend_io_time[0][1] += (end_time - start_time);
+ }
+
+ return error;
+}
+

--
Nigel Cunningham nigel at suspend2 dot net
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/