git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Linux 3.8 compat: Support CONFIG_UIDGID_STRICT_TYPE_CHECKS
[zfs.git]
/
module
/
zfs
/
dnode_sync.c
diff --git
a/module/zfs/dnode_sync.c
b/module/zfs/dnode_sync.c
index
7d304b2
..
76e6037
100644
(file)
--- a/
module/zfs/dnode_sync.c
+++ b/
module/zfs/dnode_sync.c
@@
-18,8
+18,10
@@
*
* CDDL HEADER END
*/
*
* CDDL HEADER END
*/
+
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/zfs_context.h>
*/
#include <sys/zfs_context.h>
@@
-272,7
+274,7
@@
free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, int trunc,
continue;
rw_enter(&dn->dn_struct_rwlock, RW_READER);
err = dbuf_hold_impl(dn, db->db_level-1, i, TRUE, FTAG, &subdb);
continue;
rw_enter(&dn->dn_struct_rwlock, RW_READER);
err = dbuf_hold_impl(dn, db->db_level-1, i, TRUE, FTAG, &subdb);
- ASSERT
3U(err, ==, 0
);
+ ASSERT
0(err
);
rw_exit(&dn->dn_struct_rwlock);
if (free_children(subdb, blkid, nblks, trunc, tx) == ALL) {
rw_exit(&dn->dn_struct_rwlock);
if (free_children(subdb, blkid, nblks, trunc, tx) == ALL) {
@@
-292,7
+294,7
@@
free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, int trunc,
continue;
else if (i == end && !trunc)
continue;
continue;
else if (i == end && !trunc)
continue;
- ASSERT
3U(bp->blk_birth, ==, 0
);
+ ASSERT
0(bp->blk_birth
);
}
#endif
ASSERT(all || blocks_freed == 0 || db->db_last_dirty);
}
#endif
ASSERT(all || blocks_freed == 0 || db->db_last_dirty);
@@
-348,7
+350,7
@@
dnode_sync_free_range(dnode_t *dn, uint64_t blkid, uint64_t nblks, dmu_tx_t *tx)
continue;
rw_enter(&dn->dn_struct_rwlock, RW_READER);
err = dbuf_hold_impl(dn, dnlevel-1, i, TRUE, FTAG, &db);
continue;
rw_enter(&dn->dn_struct_rwlock, RW_READER);
err = dbuf_hold_impl(dn, dnlevel-1, i, TRUE, FTAG, &db);
- ASSERT
3U(err, ==, 0
);
+ ASSERT
0(err
);
rw_exit(&dn->dn_struct_rwlock);
if (free_children(db, blkid, nblks, trunc, tx) == ALL) {
rw_exit(&dn->dn_struct_rwlock);
if (free_children(db, blkid, nblks, trunc, tx) == ALL) {
@@
-418,9
+420,13
@@
dnode_evict_dbufs(dnode_t *dn)
if (evicting)
delay(1);
pass++;
if (evicting)
delay(1);
pass++;
- ASSERT(pass < 100); /* sanity check */
+ if ((pass % 100) == 0)
+ dprintf("Exceeded %d passes evicting dbufs\n", pass);
} while (progress);
} while (progress);
+ if (pass >= 100)
+ dprintf("Required %d passes to evict dbufs\n", pass);
+
rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
if (dn->dn_bonus && refcount_is_zero(&dn->dn_bonus->db_holds)) {
mutex_enter(&dn->dn_bonus->db_mtx);
rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
if (dn->dn_bonus && refcount_is_zero(&dn->dn_bonus->db_holds)) {
mutex_enter(&dn->dn_bonus->db_mtx);
@@
-469,7
+475,7
@@
dnode_sync_free(dnode_t *dn, dmu_tx_t *tx)
* Our contents should have been freed in dnode_sync() by the
* free range record inserted by the caller of dnode_free().
*/
* Our contents should have been freed in dnode_sync() by the
* free range record inserted by the caller of dnode_free().
*/
- ASSERT
3U(DN_USED_BYTES(dn->dn_phys), ==, 0
);
+ ASSERT
0(DN_USED_BYTES(dn->dn_phys)
);
ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr));
dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]);
ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr));
dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]);
@@
-594,7
+600,7
@@
dnode_sync(dnode_t *dn, dmu_tx_t *tx)
}
if (dn->dn_next_bonustype[txgoff]) {
}
if (dn->dn_next_bonustype[txgoff]) {
- ASSERT(
dn->dn_next_bonustype[txgoff] < DMU_OT_NUMTYPES
);
+ ASSERT(
DMU_OT_IS_VALID(dn->dn_next_bonustype[txgoff])
);
dnp->dn_bonustype = dn->dn_next_bonustype[txgoff];
dn->dn_next_bonustype[txgoff] = 0;
}
dnp->dn_bonustype = dn->dn_next_bonustype[txgoff];
dn->dn_next_bonustype[txgoff] = 0;
}
@@
-662,9
+668,10
@@
dnode_sync(dnode_t *dn, dmu_tx_t *tx)
int i;
ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
/* the blkptrs we are losing better be unallocated */
int i;
ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
/* the blkptrs we are losing better be unallocated */
- for (i = dn->dn_next_nblkptr[txgoff];
- i < dnp->dn_nblkptr; i++)
- ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
+ for (i = 0; i < dnp->dn_nblkptr; i++) {
+ if (i >= dn->dn_next_nblkptr[txgoff])
+ ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
+ }
#endif
}
mutex_enter(&dn->dn_mtx);
#endif
}
mutex_enter(&dn->dn_mtx);