if (!st) {
/* just look at device... */
lseek(fd, 0, 0);
- } else {
+ } else if (!st->ss->locate_bitmap) {
+ fprintf(stderr, Name ": No bitmap possible with %s metadata\n",
+ st->ss->name);
+ return NULL;
+ } else
st->ss->locate_bitmap(st, fd);
- }
+
ioctl(fd, BLKFLSBUF, 0); /* make sure we read current data */
*stp = st;
} else {
*/
chunksize = DEFAULT_BITMAP_CHUNK;
/* <<20 for 2^20 chunks, >>9 to convert bytes to sectors */
- while (array_size > (chunksize << (20-9)))
+ while (array_size > ((unsigned long long)chunksize << (20-9)))
chunksize <<= 1;
}