aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@suse.de>2006-02-21 18:48:28 +0100
committerKay Sievers <kay.sievers@suse.de>2006-02-21 18:48:28 +0100
commitab925d69d5d38e851ae3b71523fb70a75f7b16de (patch)
treee876aaf99da7ec7177ba021b016e75ee16f21c58
parent467546b586e9ae29ac168967f5cdaac696cadcfb (diff)
downloadudev-ab925d69d5d38e851ae3b71523fb70a75f7b16de.tar.gz
volume_id: split raid and filesystem detection
-rw-r--r--extras/volume_id/libvolume_id/volume_id.c31
-rw-r--r--extras/volume_id/libvolume_id/volume_id.h4
2 files changed, 30 insertions, 5 deletions
diff --git a/extras/volume_id/libvolume_id/volume_id.c b/extras/volume_id/libvolume_id/volume_id.c
index 09d1e317..1daf1cbd 100644
--- a/extras/volume_id/libvolume_id/volume_id.c
+++ b/extras/volume_id/libvolume_id/volume_id.c
@@ -31,7 +31,7 @@
#include "util.h"
-int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size)
+int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size)
{
if (id == NULL)
return -EINVAL;
@@ -72,6 +72,17 @@ int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size)
if (volume_id_probe_highpoint_37x_raid(id, off) == 0)
goto exit;
+exit:
+ /* If recognized, we free the allocated buffers */
+ volume_id_free_buffer(id);
+ return 0;
+}
+
+int volume_id_probe_filesystem(struct volume_id *id, uint64_t off, uint64_t size)
+{
+ if (id == NULL)
+ return -EINVAL;
+
if (volume_id_probe_luks(id, off) == 0)
goto exit;
@@ -139,13 +150,25 @@ int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size)
return -1;
exit:
- /* If the filestystem in recognized, we free the allocated buffers,
- otherwise they will stay in place for the possible next probe call */
+ /* If recognized, we free the allocated buffers */
volume_id_free_buffer(id);
-
return 0;
}
+int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size)
+{
+ if (id == NULL)
+ return -EINVAL;
+
+ if (volume_id_probe_raid(id, off, size) == 0)
+ return 0;
+
+ if (volume_id_probe_filesystem(id, off, size) == 0)
+ return 0;
+
+ return -1;
+}
+
/* open volume by already open file descriptor */
struct volume_id *volume_id_open_fd(int fd)
{
diff --git a/extras/volume_id/libvolume_id/volume_id.h b/extras/volume_id/libvolume_id/volume_id.h
index 0f265a58..2caf75f5 100644
--- a/extras/volume_id/libvolume_id/volume_id.h
+++ b/extras/volume_id/libvolume_id/volume_id.h
@@ -14,7 +14,7 @@
#include <stdint.h>
#include <stddef.h>
-#define VOLUME_ID_VERSION 56
+#define VOLUME_ID_VERSION 57
#ifndef PACKED
#define PACKED __attribute__((packed))
@@ -73,6 +73,8 @@ struct volume_id {
extern struct volume_id *volume_id_open_fd(int fd);
extern struct volume_id *volume_id_open_node(const char *path);
extern int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size);
+extern int volume_id_probe_filesystem(struct volume_id *id, uint64_t off, uint64_t size);
+extern int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size);
extern void volume_id_close(struct volume_id *id);
/* filesystems */