mirror_zfs/include/sys
Richard Yao 4f2dcb3eee Add erratum for issue #2094
ZoL commit 1421c89 unintentionally changed the disk format in a forward-
compatible, but not backward compatible way. This was accomplished by
adding an entry to zbookmark_t, which is included in a couple of
on-disk structures. That lead to the creation of pools with incorrect
dsl_scan_phys_t objects that could only be imported by versions of ZoL
containing that commit.  Such pools cannot be imported by other versions
of ZFS or past versions of ZoL.

The additional field has been removed by the previous commit.  However,
affected pools must be imported and scrubbed using a version of ZoL with
this commit applied.  This will return the pools to a state in which they
may be imported by other implementations.

The 'zpool import' or 'zpool status' command can be used to determine if
a pool is impacted.  A message similar to one of the following means your
pool must be scrubbed to restore compatibility.

$ zpool import
   pool: zol-0.6.2-173
     id: 1165955789558693437
  state: ONLINE
 status: Errata #1 detected.
 action: The pool can be imported using its name or numeric identifier,
         however there is a compatibility issue which should be corrected
         by running 'zpool scrub'
    see: http://zfsonlinux.org/msg/ZFS-8000-ER
 config:
 ...

$ zpool status
  pool: zol-0.6.2-173
 state: ONLINE
  scan: pool compatibility issue detected.
   see: https://github.com/zfsonlinux/zfs/issues/2094
action: To correct the issue run 'zpool scrub'.
config:
...

If there was an async destroy in progress 'zpool import' will prevent
the pool from being imported.  Further advice on how to proceed will be
provided by the error message as follows.

$ zpool import
   pool: zol-0.6.2-173
     id: 1165955789558693437
  state: ONLINE
 status: Errata #2 detected.
 action: The pool can not be imported with this version of ZFS due to an
         active asynchronous destroy.  Revert to an earlier version and
         allow the destroy to complete before updating.
         see: http://zfsonlinux.org/msg/ZFS-8000-ER
 config:
 ...

Pools affected by the damaged dsl_scan_phys_t can be detected prior to
an upgrade by running the following command as root:

zdb -dddd poolname 1 | grep -P '^\t\tscan = ' | sed -e 's;scan = ;;' | wc -w

Note that `poolname` must be replaced with the name of the pool you wish
to check. A value of 25 indicates the dsl_scan_phys_t has been damaged.
A value of 24 indicates that the dsl_scan_phys_t is normal. A value of 0
indicates that there has never been a scrub run on the pool.

The regression caused by the change to zbookmark_t never made it into a
tagged release, Gentoo backports, Ubuntu, Debian, Fedora, or EPEL
stable respositorys.  Only those using the HEAD version directly from
Github after the 0.6.2 but before the 0.6.3 tag are affected.

This patch does have one limitation that should be mentioned.  It will not
detect errata #2 on a pool unless errata #1 is also present.  It expected
this will not be a significant problem because pools impacted by errata #2
have a high probably of being impacted by errata #1.

End users can ensure they do no hit this unlikely case by waiting for all
asynchronous destroy operations to complete before updating ZoL.  The
presence of any background destroys on any imported pools can be checked
by running `zpool get freeing` as root.  This will display a non-zero
value for any pool with an active asynchronous destroy.

Lastly, it is expected that no user data has been lost as a result of
this erratum.

Original-patch-by: Tim Chase <tim@chase2k.com>
Reworked-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Richard Yao <ryao@gentoo.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #2094
2014-02-21 12:10:40 -08:00
..
fm cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
fs Add erratum for issue #2094 2014-02-21 12:10:40 -08:00
arc.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
avl_impl.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
avl.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
bplist.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
bpobj.h Illumos #3104: eliminate empty bpobjs 2013-01-08 10:35:43 -08:00
bptree.h Illumos #2619 and #2747 2013-01-08 10:35:35 -08:00
dbuf.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
ddt.h Add ddt, ddt_entry, and l2arc_hdr caches 2014-01-07 10:33:11 -08:00
dmu_impl.h Illumos #3834 2013-11-05 12:15:00 -08:00
dmu_objset.h Illumos #3875 2013-11-04 11:27:41 -08:00
dmu_send.h Illumos #3834 2013-11-05 12:15:00 -08:00
dmu_traverse.h Illumos #3498 panic in arc_read() 2013-07-02 13:34:31 -07:00
dmu_tx.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
dmu_zfetch.h Fix zstream_t incorrect type 2013-12-10 10:09:27 -08:00
dmu.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
dnode.h Illumos #4047 2013-11-05 12:23:35 -08:00
dsl_dataset.h Illumos #3996 2013-11-05 12:23:11 -08:00
dsl_deadlist.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
dsl_deleg.h Illumos #2882, #2883, #2900 2013-09-04 15:49:00 -07:00
dsl_destroy.h Illumos #3888 2013-11-04 11:18:14 -08:00
dsl_dir.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
dsl_pool.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
dsl_prop.h Illumos #3464 2013-09-04 16:01:24 -07:00
dsl_scan.h Add erratum for issue #2094 2014-02-21 12:10:40 -08:00
dsl_synctask.h Illumos #3464 2013-09-04 16:01:24 -07:00
dsl_userhold.h Illumos #3740 2013-11-04 11:17:48 -08:00
efi_partition.h Move partition scanning from userspace to module. 2012-07-17 09:17:31 -07:00
Makefile.am Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
metaslab_impl.h Illumos #3954, #4080, #4081 2013-11-05 12:25:01 -08:00
metaslab.h Illumos #3464 2013-09-04 16:01:24 -07:00
nvpair_impl.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
nvpair.h Illumos #3464 2013-09-04 16:01:24 -07:00
refcount.h Illumos #3464 2013-09-04 16:01:24 -07:00
rrwlock.h Illumos #3464 2013-09-04 16:01:24 -07:00
sa_impl.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
sa.h Add sa_spill_rele() interface 2012-03-07 16:28:00 -08:00
spa_boot.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
spa_impl.h Add generic errata infrastructure 2014-02-21 12:10:40 -08:00
spa.h Call gethrtime() only once per new txg creation 2014-01-23 13:31:51 -08:00
space_map.h Illumos #3742 2013-11-04 10:55:25 -08:00
txg_impl.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
txg.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
u8_textprep_data.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
u8_textprep.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
uberblock_impl.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
uberblock.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
uio_impl.h Add basic uio support 2011-02-10 09:21:43 -08:00
unique.h Illumos #3742 2013-11-04 10:55:25 -08:00
uuid.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
vdev_disk.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
vdev_file.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
vdev_impl.h Illumos #4045 write throttle & i/o scheduler performance work 2013-12-06 09:32:43 -08:00
vdev.h 3246 ZFS I/O deadman thread 2013-05-01 17:05:52 -07:00
xvattr.h Add xvattr support 2011-03-02 11:43:50 -08:00
zap_impl.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zap_leaf.h Illumos #3742 2013-11-04 10:55:25 -08:00
zap.h Illumos #3742 2013-11-04 10:55:25 -08:00
zfeature.h Illumos #3464 2013-09-04 16:01:24 -07:00
zfs_acl.h Illumos #3742 2013-11-04 10:55:25 -08:00
zfs_context.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_ctldir.h Linux 3.7 compat, schedule_delayed_work() 2012-12-12 10:47:05 -08:00
zfs_debug.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_delay.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_dir.h Prototype/structure update for Linux 2011-02-10 09:27:21 -08:00
zfs_fuid.h Prototype/structure update for Linux 2011-02-10 09:27:21 -08:00
zfs_ioctl.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_onexit.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zfs_rlock.h Illumos #3742 2013-11-04 10:55:25 -08:00
zfs_sa.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zfs_stat.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zfs_vfsops.h Implement relatime. 2014-01-29 15:50:44 -08:00
zfs_vnops.h Linux 3.11 compat: fops->iterate() 2013-08-15 16:19:07 -07:00
zfs_znode.h Use local variable to read zp->z_mode 2014-01-09 15:50:11 -08:00
zil_impl.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zil.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zio_checksum.h Constify structures containing function pointers 2013-03-04 08:49:32 -08:00
zio_compress.h Illumos #3742 2013-11-04 10:55:25 -08:00
zio_impl.h Illumos #3836 2013-11-05 12:14:56 -08:00
zio.h Revert changes to zbookmark_t 2014-02-21 12:10:39 -08:00
zpl.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
zrlock.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zvol.h Remove ZFC_IOC_*_MINOR ioctl()s 2013-12-16 09:15:57 -08:00