svn commit: r196668 -
user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Kip Macy
kmacy at FreeBSD.org
Sun Aug 30 22:30:08 UTC 2009
Author: kmacy
Date: Sun Aug 30 22:30:07 2009
New Revision: 196668
URL: http://svn.freebsd.org/changeset/base/196668
Log:
integrate 192698
- align the arc state lock and reduce the length of time that it is held
Modified:
user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
Modified: user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
==============================================================================
--- user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Sun Aug 30 22:17:59 2009 (r196667)
+++ user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Sun Aug 30 22:30:07 2009 (r196668)
@@ -227,7 +227,7 @@ typedef struct arc_state {
list_t arcs_list[ARC_BUFC_NUMTYPES]; /* list of evictable buffers */
uint64_t arcs_lsize[ARC_BUFC_NUMTYPES]; /* amount of evictable data */
uint64_t arcs_size; /* total amount of data in this state */
- kmutex_t arcs_mtx;
+ kmutex_t arcs_mtx __aligned(128);
} arc_state_t;
/* The 6 states: */
@@ -972,6 +972,8 @@ add_reference(arc_buf_hdr_t *ab, kmutex_
mutex_enter(&ab->b_state->arcs_mtx);
ASSERT(list_link_active(&ab->b_arc_node));
list_remove(list, ab);
+ mutex_exit(&ab->b_state->arcs_mtx);
+
if (GHOST_STATE(ab->b_state)) {
ASSERT3U(ab->b_datacnt, ==, 0);
ASSERT3P(ab->b_buf, ==, NULL);
@@ -980,7 +982,6 @@ add_reference(arc_buf_hdr_t *ab, kmutex_
ASSERT(delta > 0);
ASSERT3U(*size, >=, delta);
atomic_add_64(size, -delta);
- mutex_exit(&ab->b_state->arcs_mtx);
/* remove the prefetch flag if we get a reference */
if (ab->b_flags & ARC_PREFETCH)
ab->b_flags &= ~ARC_PREFETCH;
@@ -1004,9 +1005,10 @@ remove_reference(arc_buf_hdr_t *ab, kmut
mutex_enter(&state->arcs_mtx);
ASSERT(!list_link_active(&ab->b_arc_node));
list_insert_head(&state->arcs_list[ab->b_type], ab);
+ mutex_exit(&state->arcs_mtx);
+
ASSERT(ab->b_datacnt > 0);
atomic_add_64(size, ab->b_size * ab->b_datacnt);
- mutex_exit(&state->arcs_mtx);
}
return (cnt);
}
More information about the svn-src-user
mailing list