busybox/util-linux/volume_id/unused_lvm.c
<<
>>
Prefs
   1/*
   2 * volume_id - reads filesystem label and uuid
   3 *
   4 * Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org>
   5 *
   6 *      This library is free software; you can redistribute it and/or
   7 *      modify it under the terms of the GNU Lesser General Public
   8 *      License as published by the Free Software Foundation; either
   9 *      version 2.1 of the License, or (at your option) any later version.
  10 *
  11 *      This library is distributed in the hope that it will be useful,
  12 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14 *      Lesser General Public License for more details.
  15 *
  16 *      You should have received a copy of the GNU Lesser General Public
  17 *      License along with this library; if not, write to the Free Software
  18 *      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19 */
  20//config:### config FEATURE_VOLUMEID_LVM
  21//config:###    bool "lvm"
  22//config:###    default y
  23//config:###    depends on VOLUMEID
  24
  25//kbuild:### lib-$(CONFIG_FEATURE_VOLUMEID_LVM) += lvm.o
  26
  27#include "volume_id_internal.h"
  28
  29struct lvm1_super_block {
  30        uint8_t id[2];
  31} PACKED;
  32
  33struct lvm2_super_block {
  34        uint8_t         id[8];
  35        uint64_t        sector_xl;
  36        uint32_t        crc_xl;
  37        uint32_t        offset_xl;
  38        uint8_t         type[8];
  39} PACKED;
  40
  41#define LVM1_SB_OFF                     0x400
  42
  43int FAST_FUNC volume_id_probe_lvm1(struct volume_id *id, uint64_t off)
  44{
  45        struct lvm1_super_block *lvm;
  46
  47        dbg("probing at offset 0x%llx", (unsigned long long) off);
  48
  49        lvm = volume_id_get_buffer(id, off + LVM1_SB_OFF, 0x800);
  50        if (lvm == NULL)
  51                return -1;
  52
  53        if (lvm->id[0] != 'H' || lvm->id[1] != 'M')
  54                return -1;
  55
  56//      volume_id_set_usage(id, VOLUME_ID_RAID);
  57//      id->type = "LVM1_member";
  58
  59        return 0;
  60}
  61
  62#define LVM2_LABEL_ID                   "LABELONE"
  63#define LVM2LABEL_SCAN_SECTORS          4
  64
  65int FAST_FUNC volume_id_probe_lvm2(struct volume_id *id, uint64_t off)
  66{
  67        const uint8_t *buf;
  68        unsigned soff;
  69        struct lvm2_super_block *lvm;
  70
  71        dbg("probing at offset 0x%llx", (unsigned long long) off);
  72
  73        buf = volume_id_get_buffer(id, off, LVM2LABEL_SCAN_SECTORS * 0x200);
  74        if (buf == NULL)
  75                return -1;
  76
  77
  78        for (soff = 0; soff < LVM2LABEL_SCAN_SECTORS * 0x200; soff += 0x200) {
  79                lvm = (struct lvm2_super_block *) &buf[soff];
  80
  81                if (memcmp(lvm->id, LVM2_LABEL_ID, 8) == 0)
  82                        goto found;
  83        }
  84
  85        return -1;
  86
  87 found:
  88//      memcpy(id->type_version, lvm->type, 8);
  89//      volume_id_set_usage(id, VOLUME_ID_RAID);
  90//      id->type = "LVM2_member";
  91
  92        return 0;
  93}
  94