From: Andrew Morton We don't know what type sector_t has. Sometimes it's unsigned long, sometimes it's unsigned long long. For example on ppc64 it's unsigned long with CONFIG_LBD=n and on x86_64 it's unsigned long long with CONFIG_LBD=n. The way to handle all of this is to always use unsigned long long and to always typecast the sector_t when printing it. Acked-by: Alasdair G Kergon Signed-off-by: Andrew Morton [included in -mm] Index: linux-2.6.16-rc5/drivers/md/dm-crypt.c =================================================================== --- linux-2.6.16-rc5.orig/drivers/md/dm-crypt.c 2006-03-12 21:57:03.000000000 +0000 +++ linux-2.6.16-rc5/drivers/md/dm-crypt.c 2006-03-12 21:58:38.000000000 +0000 @@ -532,6 +532,7 @@ static int crypt_ctr(struct dm_target *t char *ivopts; unsigned int crypto_flags; unsigned int key_size; + unsigned long long tmpll; if (argc != 5) { ti->error = PFX "Not enough arguments"; @@ -649,15 +650,17 @@ static int crypt_ctr(struct dm_target *t goto bad5; } - if (sscanf(argv[2], SECTOR_FORMAT, &cc->iv_offset) != 1) { + if (sscanf(argv[2], "%llu", &tmpll) != 1) { ti->error = PFX "Invalid iv_offset sector"; goto bad5; } + cc->iv_offset = tmpll; - if (sscanf(argv[4], SECTOR_FORMAT, &cc->start) != 1) { + if (sscanf(argv[4], "%llu", &tmpll) != 1) { ti->error = PFX "Invalid device sector"; goto bad5; } + cc->start = tmpll; if (dm_get_device(ti, argv[3], cc->start, ti->len, dm_table_get_mode(ti->table), &cc->dev)) { @@ -901,8 +904,8 @@ static int crypt_status(struct dm_target result[sz++] = '-'; } - DMEMIT(" " SECTOR_FORMAT " %s " SECTOR_FORMAT, - cc->iv_offset, cc->dev->name, cc->start); + DMEMIT(" %llu %s %llu", (unsigned long long)cc->iv_offset, + cc->dev->name, (unsigned long long)cc->start); break; } return 0; Index: linux-2.6.16-rc5/drivers/md/dm.h =================================================================== --- linux-2.6.16-rc5.orig/drivers/md/dm.h 2006-03-12 21:57:03.000000000 +0000 +++ linux-2.6.16-rc5/drivers/md/dm.h 2006-03-12 21:58:38.000000000 +0000 @@ -23,16 +23,6 @@ #define DMEMIT(x...) sz += ((sz >= maxlen) ? \ 0 : scnprintf(result + sz, maxlen - sz, x)) -/* - * FIXME: I think this should be with the definition of sector_t - * in types.h. - */ -#ifdef CONFIG_LBD -#define SECTOR_FORMAT "%llu" -#else -#define SECTOR_FORMAT "%lu" -#endif - #define SECTOR_SHIFT 9 /* Index: linux-2.6.16-rc5/drivers/md/dm-linear.c =================================================================== --- linux-2.6.16-rc5.orig/drivers/md/dm-linear.c 2006-03-12 21:57:03.000000000 +0000 +++ linux-2.6.16-rc5/drivers/md/dm-linear.c 2006-03-12 21:58:38.000000000 +0000 @@ -26,6 +26,7 @@ struct linear_c { static int linear_ctr(struct dm_target *ti, unsigned int argc, char **argv) { struct linear_c *lc; + unsigned long long tmp; if (argc != 2) { ti->error = "dm-linear: Invalid argument count"; @@ -38,10 +39,11 @@ static int linear_ctr(struct dm_target * return -ENOMEM; } - if (sscanf(argv[1], SECTOR_FORMAT, &lc->start) != 1) { + if (sscanf(argv[1], "%llu", &tmp) != 1) { ti->error = "dm-linear: Invalid device sector"; goto bad; } + lc->start = tmp; if (dm_get_device(ti, argv[0], lc->start, ti->len, dm_table_get_mode(ti->table), &lc->dev)) { @@ -87,8 +89,8 @@ static int linear_status(struct dm_targe break; case STATUSTYPE_TABLE: - snprintf(result, maxlen, "%s " SECTOR_FORMAT, lc->dev->name, - lc->start); + snprintf(result, maxlen, "%s %llu", lc->dev->name, + (unsigned long long)lc->start); break; } return 0; Index: linux-2.6.16-rc5/drivers/md/dm-raid1.c =================================================================== --- linux-2.6.16-rc5.orig/drivers/md/dm-raid1.c 2006-03-12 21:58:32.000000000 +0000 +++ linux-2.6.16-rc5/drivers/md/dm-raid1.c 2006-03-12 21:58:38.000000000 +0000 @@ -944,9 +944,9 @@ static inline int _check_region_size(str static int get_mirror(struct mirror_set *ms, struct dm_target *ti, unsigned int mirror, char **argv) { - sector_t offset; + unsigned long long offset; - if (sscanf(argv[1], SECTOR_FORMAT, &offset) != 1) { + if (sscanf(argv[1], "%llu", &offset) != 1) { ti->error = "dm-mirror: Invalid offset"; return -EINVAL; } @@ -1213,16 +1213,17 @@ static int mirror_status(struct dm_targe for (m = 0; m < ms->nr_mirrors; m++) DMEMIT("%s ", ms->mirror[m].dev->name); - DMEMIT(SECTOR_FORMAT "/" SECTOR_FORMAT, - ms->rh.log->type->get_sync_count(ms->rh.log), - ms->nr_regions); + DMEMIT("%llu/%llu", + (unsigned long long)ms->rh.log->type-> + get_sync_count(ms->rh.log), + (unsigned long long)ms->nr_regions); break; case STATUSTYPE_TABLE: DMEMIT("%d ", ms->nr_mirrors); for (m = 0; m < ms->nr_mirrors; m++) - DMEMIT("%s " SECTOR_FORMAT " ", - ms->mirror[m].dev->name, ms->mirror[m].offset); + DMEMIT("%s %llu ", ms->mirror[m].dev->name, + (unsigned long long)ms->mirror[m].offset); } return 0; Index: linux-2.6.16-rc5/drivers/md/dm-snap.c =================================================================== --- linux-2.6.16-rc5.orig/drivers/md/dm-snap.c 2006-03-12 21:58:28.000000000 +0000 +++ linux-2.6.16-rc5/drivers/md/dm-snap.c 2006-03-12 21:58:38.000000000 +0000 @@ -959,9 +959,9 @@ static int snapshot_status(struct dm_tar snap->store.fraction_full(&snap->store, &numerator, &denominator); - snprintf(result, maxlen, - SECTOR_FORMAT "/" SECTOR_FORMAT, - numerator, denominator); + snprintf(result, maxlen, "%llu/%llu", + (unsigned long long)numerator, + (unsigned long long)denominator); } else snprintf(result, maxlen, "Unknown"); @@ -974,9 +974,10 @@ static int snapshot_status(struct dm_tar * to make private copies if the output is to * make sense. */ - snprintf(result, maxlen, "%s %s %c " SECTOR_FORMAT, + snprintf(result, maxlen, "%s %s %c %llu", snap->origin->name, snap->cow->name, - snap->type, snap->chunk_size); + snap->type, + (unsigned long long)snap->chunk_size); break; } Index: linux-2.6.16-rc5/drivers/md/dm-stripe.c =================================================================== --- linux-2.6.16-rc5.orig/drivers/md/dm-stripe.c 2006-03-12 21:57:03.000000000 +0000 +++ linux-2.6.16-rc5/drivers/md/dm-stripe.c 2006-03-12 21:58:38.000000000 +0000 @@ -49,9 +49,9 @@ static inline struct stripe_c *alloc_con static int get_stripe(struct dm_target *ti, struct stripe_c *sc, unsigned int stripe, char **argv) { - sector_t start; + unsigned long long start; - if (sscanf(argv[1], SECTOR_FORMAT, &start) != 1) + if (sscanf(argv[1], "%llu", &start) != 1) return -EINVAL; if (dm_get_device(ti, argv[0], start, sc->stripe_width, @@ -195,10 +195,11 @@ static int stripe_status(struct dm_targe break; case STATUSTYPE_TABLE: - DMEMIT("%d " SECTOR_FORMAT, sc->stripes, sc->chunk_mask + 1); + DMEMIT("%d %llu", sc->stripes, + (unsigned long long)sc->chunk_mask + 1); for (i = 0; i < sc->stripes; i++) - DMEMIT(" %s " SECTOR_FORMAT, sc->stripe[i].dev->name, - sc->stripe[i].physical_start); + DMEMIT(" %s %llu", sc->stripe[i].dev->name, + (unsigned long long)sc->stripe[i].physical_start); break; } return 0;