diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2007-12-17 15:32:41 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2007-12-17 15:32:41 +0100 |
commit | 73ff769c90307e9ef2947c7ba013626fb65c1478 (patch) | |
tree | 51ec403dfb68f999a86085feef589269d77b7abb /extras/volume_id/lib | |
parent | be580fa5d83ef4b73b71f29ebd76b1f26eb12e9c (diff) |
volume_id: also add readable check to probe_all()
Otherwise probe_all will run two times into a timout, one
for the raid, and one for the filesystem probe. Thanks to
Tore Anderson for the debugging.
Diffstat (limited to 'extras/volume_id/lib')
-rw-r--r-- | extras/volume_id/lib/volume_id.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/extras/volume_id/lib/volume_id.c b/extras/volume_id/lib/volume_id.c index b82de2344d..9edbb69fb9 100644 --- a/extras/volume_id/lib/volume_id.c +++ b/extras/volume_id/lib/volume_id.c @@ -330,6 +330,14 @@ err: return 0; } +/* run only once into a timeout for unreadable devices */ +static int device_is_readable(struct volume_id *id) +{ + if (volume_id_get_buffer(id, 0x00, 0x200) != NULL) + return 1; + return 0; +} + /** * volume_id_probe_raid: * @id: Probing context. @@ -347,8 +355,7 @@ int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size) if (id == NULL) return -EINVAL; - /* run only once into a timeout for unreadable devices */ - if (volume_id_get_buffer(id, 0x00, 0x200) == NULL) + if (!device_is_readable(id)) return -1; info("probing at offset 0x%llx, size 0x%llx", @@ -382,8 +389,7 @@ int volume_id_probe_filesystem(struct volume_id *id, uint64_t off, uint64_t size if (id == NULL) return -EINVAL; - /* run only once into a timeout for unreadable devices */ - if (volume_id_get_buffer(id, 0x00, 0x200) == NULL) + if (!device_is_readable(id)) return -1; info("probing at offset 0x%llx, size 0x%llx", @@ -415,6 +421,9 @@ int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size) if (id == NULL) return -EINVAL; + if (!device_is_readable(id)) + return -1; + /* probe for raid first, because fs probes may be successful on raid members */ if (volume_id_probe_raid(id, off, size) == 0) return 0; |