diff options
author | Brian Behlendorf <[email protected]> | 2016-10-28 23:53:24 +0000 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-11-02 12:14:45 -0700 |
commit | 82ec9d41d85b1643402493bf72a7e7d2896b7310 (patch) | |
tree | aa63b731974d615674dbea3e269b09aa8f4f4c08 | |
parent | 4990e576c6aa18048dd2341a736118383a5f063d (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.h | 3 | ||||
-rw-r--r-- | module/zfs/zvol.c | 2 |
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); |