mirror of
https://git.proxmox.com/git/mirror_spl-debian
synced 2025-10-04 12:32:56 +00:00
Imported Upstream version 0.6.5.5
This commit is contained in:
parent
879bbbc725
commit
81dab2ed9a
2
META
2
META
@ -1,7 +1,7 @@
|
|||||||
Meta: 1
|
Meta: 1
|
||||||
Name: spl
|
Name: spl
|
||||||
Branch: 1.0
|
Branch: 1.0
|
||||||
Version: 0.6.5.4
|
Version: 0.6.5.5
|
||||||
Release: 1
|
Release: 1
|
||||||
Release-Tags: relext
|
Release-Tags: relext
|
||||||
License: GPL
|
License: GPL
|
||||||
|
20
configure
vendored
20
configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.68 for spl 0.6.5.4.
|
# Generated by GNU Autoconf 2.68 for spl 0.6.5.5.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
||||||
@ -567,8 +567,8 @@ MAKEFLAGS=
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='spl'
|
PACKAGE_NAME='spl'
|
||||||
PACKAGE_TARNAME='spl'
|
PACKAGE_TARNAME='spl'
|
||||||
PACKAGE_VERSION='0.6.5.4'
|
PACKAGE_VERSION='0.6.5.5'
|
||||||
PACKAGE_STRING='spl 0.6.5.4'
|
PACKAGE_STRING='spl 0.6.5.5'
|
||||||
PACKAGE_BUGREPORT=''
|
PACKAGE_BUGREPORT=''
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
@ -1357,7 +1357,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures spl 0.6.5.4 to adapt to many kinds of systems.
|
\`configure' configures spl 0.6.5.5 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -1428,7 +1428,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of spl 0.6.5.4:";;
|
short | recursive ) echo "Configuration of spl 0.6.5.5:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -1545,7 +1545,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
spl configure 0.6.5.4
|
spl configure 0.6.5.5
|
||||||
generated by GNU Autoconf 2.68
|
generated by GNU Autoconf 2.68
|
||||||
|
|
||||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
@ -1823,7 +1823,7 @@ cat >config.log <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by spl $as_me 0.6.5.4, which was
|
It was created by spl $as_me 0.6.5.5, which was
|
||||||
generated by GNU Autoconf 2.68. Invocation command line was
|
generated by GNU Autoconf 2.68. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -2947,7 +2947,7 @@ fi
|
|||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='spl'
|
PACKAGE='spl'
|
||||||
VERSION='0.6.5.4'
|
VERSION='0.6.5.5'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
@ -17462,7 +17462,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by spl $as_me 0.6.5.4, which was
|
This file was extended by spl $as_me 0.6.5.5, which was
|
||||||
generated by GNU Autoconf 2.68. Invocation command line was
|
generated by GNU Autoconf 2.68. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -17528,7 +17528,7 @@ _ACEOF
|
|||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
spl config.status 0.6.5.4
|
spl config.status 0.6.5.5
|
||||||
configured by $0, generated by GNU Autoconf 2.68,
|
configured by $0, generated by GNU Autoconf 2.68,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ add_after()
|
|||||||
add_after "$KERNEL_DIR/Kconfig" 'source "arch/$SRCARCH/Kconfig"' 'source "spl/Kconfig"'
|
add_after "$KERNEL_DIR/Kconfig" 'source "arch/$SRCARCH/Kconfig"' 'source "spl/Kconfig"'
|
||||||
# We must take care to build SPL before ZFS, otherwise the symbols required
|
# We must take care to build SPL before ZFS, otherwise the symbols required
|
||||||
# to link ZFS will not be available.
|
# to link ZFS will not be available.
|
||||||
sed -i 's#+= kernel/#+= kernel/ spl/#' "$KERNEL_DIR/Makefile"
|
sed -i 's~mm/ fs/~mm/ spl/ fs/~' "$KERNEL_DIR/Makefile"
|
||||||
|
|
||||||
echo >&2
|
echo >&2
|
||||||
echo " $0: done." >&2
|
echo " $0: done." >&2
|
||||||
|
@ -78,14 +78,20 @@ typedef struct {
|
|||||||
unsigned int saved_flags;
|
unsigned int saved_flags;
|
||||||
} fstrans_cookie_t;
|
} fstrans_cookie_t;
|
||||||
|
|
||||||
|
#ifdef PF_MEMALLOC_NOIO
|
||||||
|
#define SPL_FSTRANS (PF_FSTRANS|PF_MEMALLOC_NOIO)
|
||||||
|
#else
|
||||||
|
#define SPL_FSTRANS (PF_FSTRANS)
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline fstrans_cookie_t
|
static inline fstrans_cookie_t
|
||||||
spl_fstrans_mark(void)
|
spl_fstrans_mark(void)
|
||||||
{
|
{
|
||||||
fstrans_cookie_t cookie;
|
fstrans_cookie_t cookie;
|
||||||
|
|
||||||
cookie.fstrans_thread = current;
|
cookie.fstrans_thread = current;
|
||||||
cookie.saved_flags = current->flags & PF_FSTRANS;
|
cookie.saved_flags = current->flags & SPL_FSTRANS;
|
||||||
current->flags |= PF_FSTRANS;
|
current->flags |= SPL_FSTRANS;
|
||||||
|
|
||||||
return (cookie);
|
return (cookie);
|
||||||
}
|
}
|
||||||
@ -94,9 +100,9 @@ static inline void
|
|||||||
spl_fstrans_unmark(fstrans_cookie_t cookie)
|
spl_fstrans_unmark(fstrans_cookie_t cookie)
|
||||||
{
|
{
|
||||||
ASSERT3P(cookie.fstrans_thread, ==, current);
|
ASSERT3P(cookie.fstrans_thread, ==, current);
|
||||||
ASSERT(current->flags & PF_FSTRANS);
|
ASSERT((current->flags & SPL_FSTRANS) == SPL_FSTRANS);
|
||||||
|
|
||||||
current->flags &= ~(PF_FSTRANS);
|
current->flags &= ~SPL_FSTRANS;
|
||||||
current->flags |= cookie.saved_flags;
|
current->flags |= cookie.saved_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,6 @@ typedef longlong_t diskaddr_t;
|
|||||||
typedef ushort_t o_mode_t;
|
typedef ushort_t o_mode_t;
|
||||||
typedef uint_t major_t;
|
typedef uint_t major_t;
|
||||||
typedef uint_t minor_t;
|
typedef uint_t minor_t;
|
||||||
typedef ulong_t pfn_t;
|
|
||||||
typedef ulong_t pgcnt_t;
|
typedef ulong_t pgcnt_t;
|
||||||
typedef long spgcnt_t;
|
typedef long spgcnt_t;
|
||||||
typedef short index_t;
|
typedef short index_t;
|
||||||
|
@ -80,6 +80,7 @@ static void
|
|||||||
cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io)
|
cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io)
|
||||||
{
|
{
|
||||||
DEFINE_WAIT(wait);
|
DEFINE_WAIT(wait);
|
||||||
|
kmutex_t *m;
|
||||||
|
|
||||||
ASSERT(cvp);
|
ASSERT(cvp);
|
||||||
ASSERT(mp);
|
ASSERT(mp);
|
||||||
@ -87,11 +88,11 @@ cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io)
|
|||||||
ASSERT(mutex_owned(mp));
|
ASSERT(mutex_owned(mp));
|
||||||
atomic_inc(&cvp->cv_refs);
|
atomic_inc(&cvp->cv_refs);
|
||||||
|
|
||||||
if (cvp->cv_mutex == NULL)
|
m = ACCESS_ONCE(cvp->cv_mutex);
|
||||||
cvp->cv_mutex = mp;
|
if (!m)
|
||||||
|
m = xchg(&cvp->cv_mutex, mp);
|
||||||
/* Ensure the same mutex is used by all callers */
|
/* Ensure the same mutex is used by all callers */
|
||||||
ASSERT(cvp->cv_mutex == mp);
|
ASSERT(m == NULL || m == mp);
|
||||||
|
|
||||||
prepare_to_wait_exclusive(&cvp->cv_event, &wait, state);
|
prepare_to_wait_exclusive(&cvp->cv_event, &wait, state);
|
||||||
atomic_inc(&cvp->cv_waiters);
|
atomic_inc(&cvp->cv_waiters);
|
||||||
@ -106,16 +107,25 @@ cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io)
|
|||||||
io_schedule();
|
io_schedule();
|
||||||
else
|
else
|
||||||
schedule();
|
schedule();
|
||||||
mutex_enter(mp);
|
|
||||||
|
|
||||||
/* No more waiters a different mutex could be used */
|
/* No more waiters a different mutex could be used */
|
||||||
if (atomic_dec_and_test(&cvp->cv_waiters)) {
|
if (atomic_dec_and_test(&cvp->cv_waiters)) {
|
||||||
|
/*
|
||||||
|
* This is set without any lock, so it's racy. But this is
|
||||||
|
* just for debug anyway, so make it best-effort
|
||||||
|
*/
|
||||||
cvp->cv_mutex = NULL;
|
cvp->cv_mutex = NULL;
|
||||||
wake_up(&cvp->cv_destroy);
|
wake_up(&cvp->cv_destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
finish_wait(&cvp->cv_event, &wait);
|
finish_wait(&cvp->cv_event, &wait);
|
||||||
atomic_dec(&cvp->cv_refs);
|
atomic_dec(&cvp->cv_refs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hold mutex after we release the cvp, otherwise we could dead lock
|
||||||
|
* with a thread holding the mutex and call cv_destroy.
|
||||||
|
*/
|
||||||
|
mutex_enter(mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -148,6 +158,7 @@ __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time,
|
|||||||
int state)
|
int state)
|
||||||
{
|
{
|
||||||
DEFINE_WAIT(wait);
|
DEFINE_WAIT(wait);
|
||||||
|
kmutex_t *m;
|
||||||
clock_t time_left;
|
clock_t time_left;
|
||||||
|
|
||||||
ASSERT(cvp);
|
ASSERT(cvp);
|
||||||
@ -156,15 +167,16 @@ __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time,
|
|||||||
ASSERT(mutex_owned(mp));
|
ASSERT(mutex_owned(mp));
|
||||||
atomic_inc(&cvp->cv_refs);
|
atomic_inc(&cvp->cv_refs);
|
||||||
|
|
||||||
if (cvp->cv_mutex == NULL)
|
m = ACCESS_ONCE(cvp->cv_mutex);
|
||||||
cvp->cv_mutex = mp;
|
if (!m)
|
||||||
|
m = xchg(&cvp->cv_mutex, mp);
|
||||||
/* Ensure the same mutex is used by all callers */
|
/* Ensure the same mutex is used by all callers */
|
||||||
ASSERT(cvp->cv_mutex == mp);
|
ASSERT(m == NULL || m == mp);
|
||||||
|
|
||||||
/* XXX - Does not handle jiffie wrap properly */
|
/* XXX - Does not handle jiffie wrap properly */
|
||||||
time_left = expire_time - jiffies;
|
time_left = expire_time - jiffies;
|
||||||
if (time_left <= 0) {
|
if (time_left <= 0) {
|
||||||
|
/* XXX - doesn't reset cv_mutex */
|
||||||
atomic_dec(&cvp->cv_refs);
|
atomic_dec(&cvp->cv_refs);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
@ -179,10 +191,13 @@ __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time,
|
|||||||
*/
|
*/
|
||||||
mutex_exit(mp);
|
mutex_exit(mp);
|
||||||
time_left = schedule_timeout(time_left);
|
time_left = schedule_timeout(time_left);
|
||||||
mutex_enter(mp);
|
|
||||||
|
|
||||||
/* No more waiters a different mutex could be used */
|
/* No more waiters a different mutex could be used */
|
||||||
if (atomic_dec_and_test(&cvp->cv_waiters)) {
|
if (atomic_dec_and_test(&cvp->cv_waiters)) {
|
||||||
|
/*
|
||||||
|
* This is set without any lock, so it's racy. But this is
|
||||||
|
* just for debug anyway, so make it best-effort
|
||||||
|
*/
|
||||||
cvp->cv_mutex = NULL;
|
cvp->cv_mutex = NULL;
|
||||||
wake_up(&cvp->cv_destroy);
|
wake_up(&cvp->cv_destroy);
|
||||||
}
|
}
|
||||||
@ -190,6 +205,11 @@ __cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time,
|
|||||||
finish_wait(&cvp->cv_event, &wait);
|
finish_wait(&cvp->cv_event, &wait);
|
||||||
atomic_dec(&cvp->cv_refs);
|
atomic_dec(&cvp->cv_refs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hold mutex after we release the cvp, otherwise we could dead lock
|
||||||
|
* with a thread holding the mutex and call cv_destroy.
|
||||||
|
*/
|
||||||
|
mutex_enter(mp);
|
||||||
return (time_left > 0 ? time_left : -1);
|
return (time_left > 0 ? time_left : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,6 +236,7 @@ __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time,
|
|||||||
int state)
|
int state)
|
||||||
{
|
{
|
||||||
DEFINE_WAIT(wait);
|
DEFINE_WAIT(wait);
|
||||||
|
kmutex_t *m;
|
||||||
hrtime_t time_left, now;
|
hrtime_t time_left, now;
|
||||||
unsigned long time_left_us;
|
unsigned long time_left_us;
|
||||||
|
|
||||||
@ -225,11 +246,11 @@ __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time,
|
|||||||
ASSERT(mutex_owned(mp));
|
ASSERT(mutex_owned(mp));
|
||||||
atomic_inc(&cvp->cv_refs);
|
atomic_inc(&cvp->cv_refs);
|
||||||
|
|
||||||
if (cvp->cv_mutex == NULL)
|
m = ACCESS_ONCE(cvp->cv_mutex);
|
||||||
cvp->cv_mutex = mp;
|
if (!m)
|
||||||
|
m = xchg(&cvp->cv_mutex, mp);
|
||||||
/* Ensure the same mutex is used by all callers */
|
/* Ensure the same mutex is used by all callers */
|
||||||
ASSERT(cvp->cv_mutex == mp);
|
ASSERT(m == NULL || m == mp);
|
||||||
|
|
||||||
now = gethrtime();
|
now = gethrtime();
|
||||||
time_left = expire_time - now;
|
time_left = expire_time - now;
|
||||||
@ -253,10 +274,13 @@ __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time,
|
|||||||
* interrupts
|
* interrupts
|
||||||
*/
|
*/
|
||||||
usleep_range(time_left_us, time_left_us + 100);
|
usleep_range(time_left_us, time_left_us + 100);
|
||||||
mutex_enter(mp);
|
|
||||||
|
|
||||||
/* No more waiters a different mutex could be used */
|
/* No more waiters a different mutex could be used */
|
||||||
if (atomic_dec_and_test(&cvp->cv_waiters)) {
|
if (atomic_dec_and_test(&cvp->cv_waiters)) {
|
||||||
|
/*
|
||||||
|
* This is set without any lock, so it's racy. But this is
|
||||||
|
* just for debug anyway, so make it best-effort
|
||||||
|
*/
|
||||||
cvp->cv_mutex = NULL;
|
cvp->cv_mutex = NULL;
|
||||||
wake_up(&cvp->cv_destroy);
|
wake_up(&cvp->cv_destroy);
|
||||||
}
|
}
|
||||||
@ -264,6 +288,7 @@ __cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time,
|
|||||||
finish_wait(&cvp->cv_event, &wait);
|
finish_wait(&cvp->cv_event, &wait);
|
||||||
atomic_dec(&cvp->cv_refs);
|
atomic_dec(&cvp->cv_refs);
|
||||||
|
|
||||||
|
mutex_enter(mp);
|
||||||
time_left = expire_time - gethrtime();
|
time_left = expire_time - gethrtime();
|
||||||
return (time_left > 0 ? time_left : -1);
|
return (time_left > 0 ? time_left : -1);
|
||||||
}
|
}
|
||||||
|
@ -1630,16 +1630,11 @@ spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count)
|
|||||||
atomic_inc(&skc->skc_ref);
|
atomic_inc(&skc->skc_ref);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Execute the registered reclaim callback if it exists. The
|
* Execute the registered reclaim callback if it exists.
|
||||||
* per-cpu caches will be drained when is set KMC_EXPIRE_MEM.
|
|
||||||
*/
|
*/
|
||||||
if (skc->skc_flags & KMC_SLAB) {
|
if (skc->skc_flags & KMC_SLAB) {
|
||||||
if (skc->skc_reclaim)
|
if (skc->skc_reclaim)
|
||||||
skc->skc_reclaim(skc->skc_private);
|
skc->skc_reclaim(skc->skc_private);
|
||||||
|
|
||||||
if (spl_kmem_cache_expire & KMC_EXPIRE_MEM)
|
|
||||||
kmem_cache_shrink(skc->skc_linux_cache);
|
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +88,9 @@ splat_condvar_test12_thread(void *arg)
|
|||||||
ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters));
|
ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters));
|
||||||
mutex_exit(&cv->cv_mtx);
|
mutex_exit(&cv->cv_mtx);
|
||||||
|
|
||||||
|
/* wait for main thread reap us */
|
||||||
|
while (!kthread_should_stop())
|
||||||
|
schedule();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,6 +154,12 @@ splat_condvar_test1(struct file *file, void *arg)
|
|||||||
/* Wake everything for the failure case */
|
/* Wake everything for the failure case */
|
||||||
cv_broadcast(&cv.cv_condvar);
|
cv_broadcast(&cv.cv_condvar);
|
||||||
cv_destroy(&cv.cv_condvar);
|
cv_destroy(&cv.cv_condvar);
|
||||||
|
|
||||||
|
/* wait for threads to exit */
|
||||||
|
for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
|
||||||
|
if (!IS_ERR(ct[i].ct_thread))
|
||||||
|
kthread_stop(ct[i].ct_thread);
|
||||||
|
}
|
||||||
mutex_destroy(&cv.cv_mtx);
|
mutex_destroy(&cv.cv_mtx);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -199,6 +208,12 @@ splat_condvar_test2(struct file *file, void *arg)
|
|||||||
|
|
||||||
/* Wake everything for the failure case */
|
/* Wake everything for the failure case */
|
||||||
cv_destroy(&cv.cv_condvar);
|
cv_destroy(&cv.cv_condvar);
|
||||||
|
|
||||||
|
/* wait for threads to exit */
|
||||||
|
for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
|
||||||
|
if (!IS_ERR(ct[i].ct_thread))
|
||||||
|
kthread_stop(ct[i].ct_thread);
|
||||||
|
}
|
||||||
mutex_destroy(&cv.cv_mtx);
|
mutex_destroy(&cv.cv_mtx);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -234,6 +249,9 @@ splat_condvar_test34_thread(void *arg)
|
|||||||
|
|
||||||
mutex_exit(&cv->cv_mtx);
|
mutex_exit(&cv->cv_mtx);
|
||||||
|
|
||||||
|
/* wait for main thread reap us */
|
||||||
|
while (!kthread_should_stop())
|
||||||
|
schedule();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,6 +320,12 @@ splat_condvar_test3(struct file *file, void *arg)
|
|||||||
/* Wake everything for the failure case */
|
/* Wake everything for the failure case */
|
||||||
cv_broadcast(&cv.cv_condvar);
|
cv_broadcast(&cv.cv_condvar);
|
||||||
cv_destroy(&cv.cv_condvar);
|
cv_destroy(&cv.cv_condvar);
|
||||||
|
|
||||||
|
/* wait for threads to exit */
|
||||||
|
for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
|
||||||
|
if (!IS_ERR(ct[i].ct_thread))
|
||||||
|
kthread_stop(ct[i].ct_thread);
|
||||||
|
}
|
||||||
mutex_destroy(&cv.cv_mtx);
|
mutex_destroy(&cv.cv_mtx);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -372,6 +396,12 @@ splat_condvar_test4(struct file *file, void *arg)
|
|||||||
/* Wake everything for the failure case */
|
/* Wake everything for the failure case */
|
||||||
cv_broadcast(&cv.cv_condvar);
|
cv_broadcast(&cv.cv_condvar);
|
||||||
cv_destroy(&cv.cv_condvar);
|
cv_destroy(&cv.cv_condvar);
|
||||||
|
|
||||||
|
/* wait for threads to exit */
|
||||||
|
for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) {
|
||||||
|
if (!IS_ERR(ct[i].ct_thread))
|
||||||
|
kthread_stop(ct[i].ct_thread);
|
||||||
|
}
|
||||||
mutex_destroy(&cv.cv_mtx);
|
mutex_destroy(&cv.cv_mtx);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -152,6 +152,8 @@ for kernel_version in %{?kernel_versions}; do
|
|||||||
INSTALL_MOD_DIR=%{kmodinstdir_postfix}
|
INSTALL_MOD_DIR=%{kmodinstdir_postfix}
|
||||||
cd ..
|
cd ..
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# find-debuginfo.sh only considers executables
|
||||||
chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
|
chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
|
||||||
%{?akmod_install}
|
%{?akmod_install}
|
||||||
|
|
||||||
@ -160,6 +162,13 @@ chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
|
|||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 9 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.5-1
|
||||||
|
- Linux 4.5 compatibility zfsonlinux/spl#524
|
||||||
|
- Create working debuginfo packages on Red Hat zfsonlinux/zfs#4224
|
||||||
|
- Allow copy-builtin to run multiple times zfsonlinux/spl#526
|
||||||
|
- Use safer flags for in-kernel memory allocations zfsonlinux/spl#523
|
||||||
|
- Fix potential deadlock in cv_wait() zfsonlinux/zfs#4106
|
||||||
|
- Fix livelock in shrinker zfsonlinux/zfs#3936
|
||||||
* Fri Jan 8 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.4-1
|
* Fri Jan 8 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.4-1
|
||||||
- Build fixes on SPARC and some kernels
|
- Build fixes on SPARC and some kernels
|
||||||
- Fix taskq dynamic spawning deadlock
|
- Fix taskq dynamic spawning deadlock
|
||||||
|
@ -38,6 +38,13 @@ make install DESTDIR=%{?buildroot}
|
|||||||
%{_mandir}/man5/*
|
%{_mandir}/man5/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 9 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.5-1
|
||||||
|
- Linux 4.5 compatibility zfsonlinux/spl#524
|
||||||
|
- Create working debuginfo packages on Red Hat zfsonlinux/zfs#4224
|
||||||
|
- Allow copy-builtin to run multiple times zfsonlinux/spl#526
|
||||||
|
- Use safer flags for in-kernel memory allocations zfsonlinux/spl#523
|
||||||
|
- Fix potential deadlock in cv_wait() zfsonlinux/zfs#4106
|
||||||
|
- Fix livelock in shrinker zfsonlinux/zfs#3936
|
||||||
* Fri Jan 8 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.4-1
|
* Fri Jan 8 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.4-1
|
||||||
- Build fixes on SPARC and some kernels
|
- Build fixes on SPARC and some kernels
|
||||||
- Fix taskq dynamic spawning deadlock
|
- Fix taskq dynamic spawning deadlock
|
||||||
|
@ -27,7 +27,6 @@ This package contains the kernel modules required to emulate
|
|||||||
several interfaces provided by the Solaris kernel.
|
several interfaces provided by the Solaris kernel.
|
||||||
|
|
||||||
%define kmod_name spl
|
%define kmod_name spl
|
||||||
%define debug_package %{nil}
|
|
||||||
|
|
||||||
%kernel_module_package -n %{kmod_name} -p %{_sourcedir}/kmod-preamble
|
%kernel_module_package -n %{kmod_name} -p %{_sourcedir}/kmod-preamble
|
||||||
|
|
||||||
@ -96,6 +95,8 @@ make install \
|
|||||||
DESTDIR=${RPM_BUILD_ROOT} \
|
DESTDIR=${RPM_BUILD_ROOT} \
|
||||||
INSTALL_MOD_DIR=extra/%{kmod_name}
|
INSTALL_MOD_DIR=extra/%{kmod_name}
|
||||||
%{__rm} -f %{buildroot}/lib/modules/%{kverrel}/modules.*
|
%{__rm} -f %{buildroot}/lib/modules/%{kverrel}/modules.*
|
||||||
|
# find-debuginfo.sh only considers executables
|
||||||
|
%{__chmod} u+x %{buildroot}/lib/modules/%{kverrel}/extra/*/*/*
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
@ -38,6 +38,13 @@ make install DESTDIR=%{?buildroot}
|
|||||||
%{_mandir}/man5/*
|
%{_mandir}/man5/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 9 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.5-1
|
||||||
|
- Linux 4.5 compatibility zfsonlinux/spl#524
|
||||||
|
- Create working debuginfo packages on Red Hat zfsonlinux/zfs#4224
|
||||||
|
- Allow copy-builtin to run multiple times zfsonlinux/spl#526
|
||||||
|
- Use safer flags for in-kernel memory allocations zfsonlinux/spl#523
|
||||||
|
- Fix potential deadlock in cv_wait() zfsonlinux/zfs#4106
|
||||||
|
- Fix livelock in shrinker zfsonlinux/zfs#3936
|
||||||
* Fri Jan 8 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.4-1
|
* Fri Jan 8 2016 Ned Bass <bass6@llnl.gov> - 0.6.5.4-1
|
||||||
- Build fixes on SPARC and some kernels
|
- Build fixes on SPARC and some kernels
|
||||||
- Fix taskq dynamic spawning deadlock
|
- Fix taskq dynamic spawning deadlock
|
||||||
|
Loading…
Reference in New Issue
Block a user