Add routines for storing extent chains in an image header.
Signed-off-by: Nigel Cunningham <[email protected]>
kernel/power/extent.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/kernel/power/extent.c b/kernel/power/extent.c
index 31fcb65..f7db014 100644
--- a/kernel/power/extent.c
+++ b/kernel/power/extent.c
@@ -141,3 +141,68 @@ int suspend_add_to_extent_chain(struct e
return 0;
}
+/* suspend_serialise_extent_chain
+ *
+ * Write a chain in the image.
+ */
+int suspend_serialise_extent_chain(struct suspend_module_ops *owner,
+ struct extent_chain *chain)
+{
+ struct extent *this;
+ int ret, i = 0;
+
+ if ((ret = suspend_active_writer->rw_header_chunk(WRITE, owner,
+ (char *) chain,
+ 3 * sizeof(int))))
+ return ret;
+
+ this = chain->first;
+ while (this) {
+ if ((ret = suspend_active_writer->rw_header_chunk(WRITE, owner,
+ (char *) this,
+ 2 * sizeof(unsigned long))))
+ return ret;
+ this = this->next;
+ i++;
+ }
+
+ if (i != (chain->allocs - chain->frees)) {
+ printk(KERN_EMERG "Saved %d extents but chain metadata says there should be %d-%d.\n",
+ i, chain->allocs, chain->frees);
+ BUG();
+ }
+
+ return ret;
+}
+
+/* suspend_load_extent_chain
+ *
+ * Read back a chain saved in the image.
+ */
+int suspend_load_extent_chain(struct extent_chain *chain)
+{
+ struct extent *this, *last = NULL;
+ int i, ret;
+
+ if (!(ret = suspend_active_writer->rw_header_chunk(READ, NULL,
+ (char *) chain,
+ 3 * sizeof(int))))
+ return ret;
+
+ for (i = 0; i < (chain->allocs - chain->frees); i++) {
+ this = kmalloc(sizeof(struct extent), GFP_ATOMIC);
+ BUG_ON(!this); /* Shouldn't run out of memory trying this! */
+ this->next = NULL;
+ if (!(ret = suspend_active_writer->rw_header_chunk(READ, NULL,
+ (char *) this, 2 * sizeof(unsigned long))))
+ return ret;
+ if (last)
+ last->next = this;
+ else
+ chain->first = this;
+ last = this;
+ }
+ chain->last = last;
+ return ret;
+}
+
--
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]