usr/src/uts/common/fs/zfs/dmu.c
changeset 3912 f6891a60bd72
parent 3835 063f0749804a
child 4543 12bb2876a62e
equal deleted inserted replaced
3911:94df594513c7 3912:f6891a60bd72
    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) {