aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2016-10-28 23:53:24 +0000
committerBrian Behlendorf <[email protected]>2016-11-02 12:14:45 -0700
commit82ec9d41d85b1643402493bf72a7e7d2896b7310 (patch)
treeaa63b731974d615674dbea3e269b09aa8f4f4c08
parent4990e576c6aa18048dd2341a736118383a5f063d (diff)
Fix 32-bit maximum volume size
A limit of 1TB exists for zvols on 32-bit systems. Update the code to correctly reflect this limitation in a similar manor as the OpenZFS implementation. Reviewed-by: Tom Caputi <[email protected]> Reviewed-by: Tim Chase <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #5347
-rw-r--r--include/sys/zvol.h3
-rw-r--r--module/zfs/zvol.c2
2 files changed, 4 insertions, 1 deletions
diff --git a/include/sys/zvol.h b/include/sys/zvol.h
index 00ed220d3..2fb20fbf9 100644
--- a/include/sys/zvol.h
+++ b/include/sys/zvol.h
@@ -32,6 +32,9 @@
#define ZVOL_OBJ 1ULL
#define ZVOL_ZAP_OBJ 2ULL
+#define SPEC_MAXOFFSET_T ((1LL << ((NBBY * sizeof (daddr32_t)) + \
+ DEV_BSHIFT - 1)) - 1)
+
extern void *zvol_tag;
extern void zvol_create_minors(spa_t *spa, const char *name, boolean_t async);
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c
index b5169baf4..ea6997b5b 100644
--- a/module/zfs/zvol.c
+++ b/module/zfs/zvol.c
@@ -281,7 +281,7 @@ zvol_check_volsize(uint64_t volsize, uint64_t blocksize)
return (SET_ERROR(EINVAL));
#ifdef _ILP32
- if (volsize - 1 > MAXOFFSET_T)
+ if (volsize - 1 > SPEC_MAXOFFSET_T)
return (SET_ERROR(EOVERFLOW));
#endif
return (0);