From 447927a106846f75d712cf401c59cd053424d605 Mon Sep 17 00:00:00 2001 From: dfr Date: Sat, 6 Apr 2002 12:55:48 +0000 Subject: Merge fixes for dbtob() and btodb() from alpha/include/param.h. This stops ffs_snapshot() from using negative numbers for byte offsets in large file systems. --- sys/ia64/include/param.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'sys/ia64') diff --git a/sys/ia64/include/param.h b/sys/ia64/include/param.h index db87619..a516325 100644 --- a/sys/ia64/include/param.h +++ b/sys/ia64/include/param.h @@ -185,9 +185,16 @@ #define ctob(x) ((x) << PAGE_SHIFT) #define btoc(x) (((x) + PAGE_MASK) >> PAGE_SHIFT) -/* bytes to disk blocks */ -#define btodb(x) ((x) >> DEV_BSHIFT) -#define dbtob(x) ((x) << DEV_BSHIFT) +/* + * btodb() is messy and perhaps slow because `bytes' may be an off_t. We + * want to shift an unsigned type to avoid sign extension and we don't + * want to widen `bytes' unnecessarily. Assume that the result fits in + * a daddr_t. + */ +#define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \ + (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT) +#define dbtob(db) /* calculates (db * DEV_BSIZE) */ \ + ((off_t)(db) << DEV_BSHIFT) /* * Mach derived conversion macros -- cgit v1.1