[Cluster-devel] cluster/gfs2/mkfs Makefile main_mkfs.c
rpeterso at sourceware.org
rpeterso at sourceware.org
Tue Jun 27 21:04:18 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: rpeterso at sourceware.org 2006-06-27 21:04:15
Modified files:
gfs2/mkfs : Makefile main_mkfs.c
Log message:
Switch to libvolume_id method of determining pre-existing file
systems.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mkfs/Makefile.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mkfs/main_mkfs.c.diff?cvsroot=cluster&r1=1.6&r2=1.7
--- cluster/gfs2/mkfs/Makefile 2006/06/09 22:13:19 1.8
+++ cluster/gfs2/mkfs/Makefile 2006/06/27 21:04:13 1.9
@@ -9,18 +9,14 @@
MKFS=mkfs.gfs2
INSTALLPATH=/sbin
-INCLUDEPATH=-I${KERNEL_SRC}/include/ -I${top_srcdir}/include/ -I${top_srcdir}/libgfs2/ -I${top_srcdir}/config/
-#When udev's libvolume_id gets gfs and gfs2 incorporated:
-#INCLUDEPATH=$INCLUDEPATH -I${top_srcdir}/libvolume_id
+INCLUDEPATH=-I${KERNEL_SRC}/include/ -I${top_srcdir}/include/ -I${top_srcdir}/libgfs2/ -I${top_srcdir}/config/
INSTALL=install
CC=gcc -c
LD=gcc
CFLAGS=-Wall -O2 -ggdb -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE \
-D_GNU_SOURCE -DGFS2_RELEASE_NAME=\"2\" ${INCLUDEPATH}
-LDFLAGS=-L${top_srcdir}/libgfs2
-#When udev's libvolume_id gets gfs and gfs2 incorporated:
-#LDFLAGS=$LDFLAGS -L${top_srcdir}/libvolume_id -static
+LDFLAGS=-L${top_srcdir}/libgfs2 -L${libdir}
H=gfs2_disk_hash.h gfs2_mkfs.h linux_endian.h ondisk.h osi_list.h
C=main.c main_mkfs.c
@@ -29,9 +25,7 @@
all: ${MKFS}
${MKFS}: ${O}
- ${LD} ${LDFLAGS} ${O} -o ${@} -lgfs2
-#When udev's libvolume_id gets gfs and gfs2 incorporated add:
-#-lvolume_id
+ ${LD} ${LDFLAGS} ${O} -o ${@} -lgfs2 -lvolume_id
.c.o: $<
${CC} ${CFLAGS} -o $@ $^
--- cluster/gfs2/mkfs/main_mkfs.c 2006/06/06 14:30:55 1.6
+++ cluster/gfs2/mkfs/main_mkfs.c 2006/06/27 21:04:13 1.7
@@ -27,274 +27,7 @@
#include <linux/types.h>
#include "gfs2_mkfs.h"
#include "libgfs2.h"
-#ifdef VOLUME_ID
#include "libvolume_id.h"
-#else
-/* ========================================================================= */
-/* */
-/* */
-/* */
-/* */
-/* */
-/* */
-/* NOTICE: Rip all this out once udev's libvolume_id is shipped as a */
-/* standard library we can link against. */
-/* */
-/* */
-/* */
-/* */
-/* */
-/* */
-/* ========================================================================= */
-#define VOLUME_ID_LABEL_SIZE 64
-#define VOLUME_ID_UUID_SIZE 36
-#define VOLUME_ID_FORMAT_SIZE 32
-#define VOLUME_ID_PATH_MAX 256
-#define VOLUME_ID_PARTITIONS_MAX 256
-#define SB_BUFFER_SIZE 0x11000
-#define SEEK_BUFFER_SIZE 0x10000
-
-#define GFS_MAGIC 0x01161970
-#define GFS_DEFAULT_BSIZE 4096
-#define GFS_SUPERBLOCK_OFFSET (0x10 * GFS_DEFAULT_BSIZE)
-#define GFS_METATYPE_SB 1
-#define GFS_FORMAT_SB 100
-#define GFS_LOCKNAME_LEN 64
-
-/* gfs1 constants: */
-#define GFS_FORMAT_FS 1309
-#define GFS_FORMAT_MULTI 1401
-
-enum volume_id_usage {
- VOLUME_ID_UNUSED,
- VOLUME_ID_UNPROBED,
- VOLUME_ID_OTHER,
- VOLUME_ID_FILESYSTEM,
- VOLUME_ID_RAID,
- VOLUME_ID_DISKLABEL,
- VOLUME_ID_CRYPTO,
-};
-
-struct volume_id {
- uint8_t label_raw[VOLUME_ID_LABEL_SIZE];
- size_t label_raw_len;
- char label[VOLUME_ID_LABEL_SIZE+1];
- uint8_t uuid_raw[VOLUME_ID_UUID_SIZE];
- size_t uuid_raw_len;
- char uuid[VOLUME_ID_UUID_SIZE+1];
- enum volume_id_usage usage_id;
- char *usage;
- char *type;
- char type_version[VOLUME_ID_FORMAT_SIZE];
-
- int fd;
- uint8_t *sbbuf;
- size_t sbbuf_len;
- uint8_t *seekbuf;
- uint64_t seekbuf_off;
- size_t seekbuf_len;
- int fd_close:1;
-};
-
-uint8_t *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len)
-{
- ssize_t buf_len;
-
- /* check if requested area fits in superblock buffer */
- if (off + len <= SB_BUFFER_SIZE) {
- if (id->sbbuf == NULL) {
- id->sbbuf = malloc(SB_BUFFER_SIZE);
- if (id->sbbuf == NULL) {
- return NULL;
- }
- }
-
- /* check if we need to read */
- if ((off + len) > id->sbbuf_len) {
- if (lseek(id->fd, 0, SEEK_SET) < 0) {
- return NULL;
- }
- buf_len = read(id->fd, id->sbbuf, off + len);
- if (buf_len < 0) {
- return NULL;
- }
- id->sbbuf_len = buf_len;
- if ((size_t)buf_len < off + len) {
- return NULL;
- }
- }
-
- return &(id->sbbuf[off]);
- } else {
- if (len > SEEK_BUFFER_SIZE) {
- return NULL;
- }
- /* get seek buffer */
- if (id->seekbuf == NULL) {
- id->seekbuf = malloc(SEEK_BUFFER_SIZE);
- if (id->seekbuf == NULL) {
- return NULL;
- }
- }
-
- /* check if we need to read */
- if ((off < id->seekbuf_off) || ((off + len) > (id->seekbuf_off + id->seekbuf_len))) {
- if (lseek(id->fd, off, SEEK_SET) < 0) {
- return NULL;
- }
- buf_len = read(id->fd, id->seekbuf, len);
- if (buf_len < 0) {
- return NULL;
- }
- id->seekbuf_off = off;
- id->seekbuf_len = buf_len;
- if ((size_t)buf_len < len) {
- return NULL;
- }
- }
-
- return &(id->seekbuf[off - id->seekbuf_off]);
- }
-}
-
-void volume_id_free_buffer(struct volume_id *id)
-{
- if (id->sbbuf != NULL) {
- free(id->sbbuf);
- id->sbbuf = NULL;
- id->sbbuf_len = 0;
- }
- if (id->seekbuf != NULL) {
- free(id->seekbuf);
- id->seekbuf = NULL;
- id->seekbuf_len = 0;
- }
-}
-
-static char *usage_to_string(enum volume_id_usage usage_id)
-{
- switch (usage_id) {
- case VOLUME_ID_FILESYSTEM:
- return "filesystem";
- case VOLUME_ID_OTHER:
- return "other";
- case VOLUME_ID_RAID:
- return "raid";
- case VOLUME_ID_DISKLABEL:
- return "disklabel";
- case VOLUME_ID_CRYPTO:
- return "crypto";
- case VOLUME_ID_UNPROBED:
- return "unprobed";
- case VOLUME_ID_UNUSED:
- return "unused";
- }
- return NULL;
-}
-
-void volume_id_set_usage(struct volume_id *id, enum volume_id_usage usage_id)
-{
- id->usage_id = usage_id;
- id->usage = usage_to_string(usage_id);
-}
-
-int volume_id_probe_gfs_generic(struct volume_id *id, uint64_t off, int vers)
-{
- struct gfs2_sb *sbd;
-
- sbd = (struct gfs2_sb *) volume_id_get_buffer(id,
- off + GFS_SUPERBLOCK_OFFSET,
- sizeof(struct gfs2_sb));
- if (sbd == NULL)
- return -1;
-
- if (be32_to_cpu(sbd->sb_header.mh_magic) == GFS_MAGIC &&
- be32_to_cpu(sbd->sb_header.mh_type) == GFS_METATYPE_SB &&
- be32_to_cpu(sbd->sb_header.mh_format) == GFS_FORMAT_SB) {
- if (vers == 1) {
- if (be32_to_cpu(sbd->sb_fs_format) != GFS_FORMAT_FS ||
- be32_to_cpu(sbd->sb_multihost_format) != GFS_FORMAT_MULTI)
- return -1; /* not gfs1 */
- id->type = "gfs";
- }
- else if (vers == 2) {
- if (be32_to_cpu(sbd->sb_fs_format) != GFS2_FORMAT_FS ||
- be32_to_cpu(sbd->sb_multihost_format) != GFS2_FORMAT_MULTI)
- return -1; /* not gfs2 */
- id->type = "gfs2";
- }
- else
- return -1;
- strcpy(id->type_version, "1");
- volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
- return 0;
- }
- return -1;
-}
-
-int volume_id_probe_gfs(struct volume_id *id, uint64_t off)
-{
- return (volume_id_probe_gfs_generic(id, off, 1));
-}
-
-int volume_id_probe_gfs2(struct volume_id *id, uint64_t off)
-{
- return (volume_id_probe_gfs_generic(id, off, 2));
-}
-
-/* open volume by already open file descriptor */
-struct volume_id *volume_id_open_fd(int fd)
-{
- struct volume_id *id;
-
- id = malloc(sizeof(struct volume_id));
- if (id == NULL)
- return NULL;
- memset(id, 0x00, sizeof(struct volume_id));
-
- id->fd = fd;
-
- return id;
-}
-
-struct volume_id *volume_id_open_node(const char *path)
-{
- struct volume_id *id;
- int fd;
-
- fd = open(path, O_RDONLY);
- if (fd < 0) {
- return NULL;
- }
- id = volume_id_open_fd(fd);
- if (id == NULL)
- return NULL;
-
- /* close fd on device close */
- id->fd_close = 1;
- return id;
-}
-
-int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size)
-{
- volume_id_get_buffer(id, 0, SB_BUFFER_SIZE);
- if (volume_id_probe_gfs2(id, off) == 0) {
- volume_id_free_buffer(id);
- return 0;
- }
- return -1;
-}
-
-void volume_id_close(struct volume_id *id)
-{
- if (id == NULL)
- return;
- if (id->fd_close != 0)
- close(id->fd);
- volume_id_free_buffer(id);
- free(id);
-}
-#endif
char *prog_name;
More information about the Cluster-devel
mailing list