Add zio_ddt_free()+ddt_phys_decref() error handling
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 19 Mar 2013 19:05:08 +0000 (12:05 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 19 Mar 2013 20:01:01 +0000 (13:01 -0700)
commit5dc6af0eec29b119b731c793037fd77214fc9438
treef5a0b9d94d2593a037d92e603d6264b42df03adb
parent30b92c1de68ced4bee235f879791ee316314a197
Add zio_ddt_free()+ddt_phys_decref() error handling

The assumption in zio_ddt_free() is that ddt_phys_select() must
always find a match.  However, if that fails due to a damaged
DDT or some other reason the code will NULL dereference in
ddt_phys_decref().

While this should never happen it has been observed on various
platforms.  The result is that unless your willing to patch the
ZFS code the pool is inaccessible.  Therefore, we're choosing
to more gracefully handle this case rather than leave it fatal.

http://mail.opensolaris.org/pipermail/zfs-discuss/2012-February/050972.html

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1308
module/zfs/ddt.c
module/zfs/zio.c