diff options
author | Matthew Ahrens <[email protected]> | 2013-07-05 15:37:16 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-10-31 14:57:51 -0700 |
commit | d1fada1e6d953e32de4080bd366df17c640de191 (patch) | |
tree | 4a2746fe6781552a756c06d03f0ba54d9f586ca0 /module/zfs | |
parent | 24a64651b4163d47b1187821152d762e9a263d5a (diff) |
Illumos #3603, #3604: bobj improvements
3603 panic from bpobj_enqueue_subobj()
3604 zdb should print bpobjs more verbosely
3871 GCC 4.5.3 does not like issue 3604 patch
Reviewed by: Henrik Mattson <[email protected]>
Reviewed by: Adam Leventhal <[email protected]>
Reviewed by: Christopher Siden <[email protected]>
Reviewed by: George Wilson <[email protected]>
Reviewed by: Garrett D'Amore <[email protected]>
Approved by: Dan McDonald <[email protected]>
References:
https://www.illumos.org/issues/3603
https://www.illumos.org/issues/3604
https://www.illumos.org/issues/3871
illumos/illumos-gate@d04756377ddd1cf28ebcf652541094e17b03c889
Ported-by: Richard Yao <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Issue #1775
Note that the patch from Illumos issue 3871 is not accepted into Illumos
at the time of this writing. It is something that I wrote when porting
this. Documentation is in the Illumos issue.
Diffstat (limited to 'module/zfs')
-rw-r--r-- | module/zfs/bpobj.c | 8 | ||||
-rw-r--r-- | module/zfs/dmu.c | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/module/zfs/bpobj.c b/module/zfs/bpobj.c index 4ba9f8002..5787a6fb4 100644 --- a/module/zfs/bpobj.c +++ b/module/zfs/bpobj.c @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. */ #include <sys/bpobj.h> @@ -418,6 +418,12 @@ bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx) VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, subsubobjs, 0, FTAG, &subdb, 0)); + /* + * Make sure that we are not asking dmu_write() + * to write more data than we have in our buffer. + */ + VERIFY3U(subdb->db_size, >=, + numsubsub * sizeof (subobj)); dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), numsubsub * sizeof (subobj), subdb->db_data, tx); diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c index 8ef74514a..afa8719b1 100644 --- a/module/zfs/dmu.c +++ b/module/zfs/dmu.c @@ -1829,7 +1829,7 @@ __dmu_object_info_from_dnode(dnode_t *dn, dmu_object_info_t *doi) doi->doi_checksum = dn->dn_checksum; doi->doi_compress = dn->dn_compress; doi->doi_physical_blocks_512 = (DN_USED_BYTES(dnp) + 256) >> 9; - doi->doi_max_offset = (dnp->dn_maxblkid + 1) * dn->dn_datablksz; + doi->doi_max_offset = (dn->dn_maxblkid + 1) * dn->dn_datablksz; doi->doi_fill_count = 0; for (i = 0; i < dnp->dn_nblkptr; i++) doi->doi_fill_count += dnp->dn_blkptr[i].blk_fill; |