aboutsummaryrefslogtreecommitdiff
path: root/util-linux/volume_id/util.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2009-02-15 05:51:19 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2009-02-15 05:51:19 +0000
commit28ea4298e380d73203890c0f42de68e9798396d8 (patch)
tree55c832fd42d8838f9d5f40d2b97bae93263e19e1 /util-linux/volume_id/util.c
parent93b38208d1e7d759b3c8ed8e7eb91c10442033ff (diff)
downloadbusybox-28ea4298e380d73203890c0f42de68e9798396d8.tar.gz
volume_id: abort early on read failures.
should help with probing missing fdd's
Diffstat (limited to 'util-linux/volume_id/util.c')
-rw-r--r--util-linux/volume_id/util.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/util-linux/volume_id/util.c b/util-linux/volume_id/util.c
index 1a1b3f92e..dd75c7ba1 100644
--- a/util-linux/volume_id/util.c
+++ b/util-linux/volume_id/util.c
@@ -254,9 +254,15 @@ void *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len)
dbg("requested 0x%x bytes, got 0x%x bytes",
(unsigned) len, (unsigned) read_len);
err:
- /* id->seekbuf_len or id->sbbuf_len is wrong now! Fixing.
- * Most likely user will not do any additional
- * calls anyway, it's a corrupted fs or something. */
+ /* No filesystem can be this tiny. It's most likely
+ * non-associated loop device, empty drive and so on.
+ * Flag it, making it possible to short circuit future
+ * accesses. Rationale:
+ * users complained of slow blkid due to empty floppy drives.
+ */
+ if (off < 64*1024)
+ id->error = 1;
+ /* id->seekbuf_len or id->sbbuf_len is wrong now! Fixing. */
volume_id_free_buffer(id);
return NULL;
}