76 { byteswap_uint64_array, FALSE, "other uint64[]" }, |
76 { byteswap_uint64_array, FALSE, "other uint64[]" }, |
77 { zap_byteswap, TRUE, "other ZAP" }, |
77 { zap_byteswap, TRUE, "other ZAP" }, |
78 { zap_byteswap, TRUE, "persistent error log" }, |
78 { zap_byteswap, TRUE, "persistent error log" }, |
79 { byteswap_uint8_array, TRUE, "SPA history" }, |
79 { byteswap_uint8_array, TRUE, "SPA history" }, |
80 { byteswap_uint64_array, TRUE, "SPA history offsets" }, |
80 { byteswap_uint64_array, TRUE, "SPA history offsets" }, |
|
81 { zap_byteswap, TRUE, "Pool properties" }, |
81 }; |
82 }; |
82 |
83 |
83 int |
84 int |
84 dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset, |
85 dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset, |
85 void *tag, dmu_buf_t **dbp) |
86 void *tag, dmu_buf_t **dbp) |
177 |
178 |
178 rw_enter(&dn->dn_struct_rwlock, RW_READER); |
179 rw_enter(&dn->dn_struct_rwlock, RW_READER); |
179 if (dn->dn_datablkshift) { |
180 if (dn->dn_datablkshift) { |
180 int blkshift = dn->dn_datablkshift; |
181 int blkshift = dn->dn_datablkshift; |
181 nblks = (P2ROUNDUP(offset+length, 1ULL<<blkshift) - |
182 nblks = (P2ROUNDUP(offset+length, 1ULL<<blkshift) - |
182 P2ALIGN(offset, 1ULL<<blkshift)) >> blkshift; |
183 P2ALIGN(offset, 1ULL<<blkshift)) >> blkshift; |
183 } else { |
184 } else { |
184 if (offset + length > dn->dn_datablksz) { |
185 if (offset + length > dn->dn_datablksz) { |
185 zfs_panic_recover("zfs: accessing past end of object " |
186 zfs_panic_recover("zfs: accessing past end of object " |
186 "%llx/%llx (size=%u access=%llu+%llu)", |
187 "%llx/%llx (size=%u access=%llu+%llu)", |
187 (longlong_t)dn->dn_objset-> |
188 (longlong_t)dn->dn_objset-> |
327 |
328 |
328 rw_enter(&dn->dn_struct_rwlock, RW_READER); |
329 rw_enter(&dn->dn_struct_rwlock, RW_READER); |
329 if (dn->dn_datablkshift) { |
330 if (dn->dn_datablkshift) { |
330 int blkshift = dn->dn_datablkshift; |
331 int blkshift = dn->dn_datablkshift; |
331 nblks = (P2ROUNDUP(offset+len, 1<<blkshift) - |
332 nblks = (P2ROUNDUP(offset+len, 1<<blkshift) - |
332 P2ALIGN(offset, 1<<blkshift)) >> blkshift; |
333 P2ALIGN(offset, 1<<blkshift)) >> blkshift; |
333 } else { |
334 } else { |
334 nblks = (offset < dn->dn_datablksz); |
335 nblks = (offset < dn->dn_datablksz); |
335 } |
336 } |
336 |
337 |
337 if (nblks != 0) { |
338 if (nblks != 0) { |