diff options
Diffstat (limited to 'util-linux/volume_id/util.c')
-rw-r--r-- | util-linux/volume_id/util.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/util-linux/volume_id/util.c b/util-linux/volume_id/util.c index 1a1b3f9..dd75c7b 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; } |