public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: mornfall@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2/lib/device dev-swap.c Date: Tue, 17 Mar 2009 14:40:00 -0000 [thread overview] Message-ID: <20090317144000.18125.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-03-17 14:40:00 Added files: lib/device : dev-swap.c Log message: Missed file from previous checkin. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/device/dev-swap.c.diff?cvsroot=lvm2&r1=NONE&r2=1.1 /cvs/lvm2/LVM2/lib/device/dev-swap.c,v --> standard output revision 1.1 --- LVM2/lib/device/dev-swap.c +++ - 2009-03-17 14:40:00.925930000 +0000 @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2009 Red Hat, Inc. All rights reserved. + * + * This file is part of LVM2. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License v.2.1. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "lib.h" +#include "metadata.h" +#include "xlate.h" +#include "filter.h" + +#ifdef linux + +#define MAX_PAGESIZE (64 * 1024) +#define SIGNATURE_SIZE 10 + +static int +_swap_detect_signature(const char *buf) +{ + if (memcmp(buf, "SWAP-SPACE", 10) == 0 || + memcmp(buf, "SWAPSPACE2", 10) == 0) + return 1; + + if (memcmp(buf, "S1SUSPEND", 9) == 0 || + memcmp(buf, "S2SUSPEND", 9) == 0 || + memcmp(buf, "ULSUSPEND", 9) == 0 || + memcmp(buf, "\xed\xc3\x02\xe9\x98\x56\xe5\x0c", 8) == 0) + return 1; + + return 0; +} + +int dev_is_swap(struct device *dev, uint64_t *signature) +{ + char buf[10]; + uint64_t size; + int page; + + if (!dev_get_size(dev, &size)) { + stack; + return -1; + } + + if (!dev_open(dev)) { + stack; + return -1; + } + + *signature = 0; + + for (page = 0x1000; page <= MAX_PAGESIZE; page <<= 1) { + /* + * skip 32k pagesize since this does not seem to be supported + */ + if (page == 0x8000) + continue; + if (size < page) + break; + if (!dev_read(dev, page - SIGNATURE_SIZE, + SIGNATURE_SIZE, buf)) { + stack; + return -1; + } + if (_swap_detect_signature(buf)) { + *signature = page - SIGNATURE_SIZE; + break; + } + } + + if (!dev_close(dev)) + stack; + + if (*signature) + return 1; + + return 0; +} + +#endif
reply other threads:[~2009-03-17 14:40 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20090317144000.18125.qmail@sourceware.org \ --to=mornfall@sourceware.org \ --cc=lvm-devel@redhat.com \ --cc=lvm2-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).