]> granicus.if.org Git - zfs/commitdiff
Illumos 4504 traverse_visitbp: visit group before user
authorMatthew Ahrens <mahrens@delphix.com>
Fri, 24 Jan 2014 15:54:37 +0000 (09:54 -0600)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 29 Jan 2014 23:50:49 +0000 (15:50 -0800)
4504 traverse_visitbp: visit DMU_GROUPUSED_OBJECT before DMU_USERUSED_OBJECT

Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>

References:
  https://illumos.org/issues/4504
  http://code.delphix.com/illumos-4504
  http://svnweb.freebsd.org/base?view=revision&revision=260812

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Closes #2079

module/zfs/dmu_traverse.c

index e6d18df519cdc04311571bd96cb2404054003fd1..bd291c6a89638aad0b38b6a0ceeda5b65201ed48 100644 (file)
@@ -335,9 +335,9 @@ traverse_visitbp(traverse_data_t *td, const dnode_phys_t *dnp,
                prefetch_dnode_metadata(td, dnp, zb->zb_objset,
                    DMU_META_DNODE_OBJECT);
                if (arc_buf_size(buf) >= sizeof (objset_phys_t)) {
-                       prefetch_dnode_metadata(td, &osp->os_userused_dnode,
-                           zb->zb_objset, DMU_USERUSED_OBJECT);
                        prefetch_dnode_metadata(td, &osp->os_groupused_dnode,
+                           zb->zb_objset, DMU_GROUPUSED_OBJECT);
+                       prefetch_dnode_metadata(td, &osp->os_userused_dnode,
                            zb->zb_objset, DMU_USERUSED_OBJECT);
                }
 
@@ -348,18 +348,18 @@ traverse_visitbp(traverse_data_t *td, const dnode_phys_t *dnp,
                        err = 0;
                }
                if (err == 0 && arc_buf_size(buf) >= sizeof (objset_phys_t)) {
-                       dnp = &osp->os_userused_dnode;
+                       dnp = &osp->os_groupused_dnode;
                        err = traverse_dnode(td, dnp, zb->zb_objset,
-                           DMU_USERUSED_OBJECT);
+                           DMU_GROUPUSED_OBJECT);
                }
                if (err && TD_HARD(td)) {
                        lasterr = err;
                        err = 0;
                }
                if (err == 0 && arc_buf_size(buf) >= sizeof (objset_phys_t)) {
-                       dnp = &osp->os_groupused_dnode;
+                       dnp = &osp->os_userused_dnode;
                        err = traverse_dnode(td, dnp, zb->zb_objset,
-                           DMU_GROUPUSED_OBJECT);
+                           DMU_USERUSED_OBJECT);
                }
        }