summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2009-01-22 09:58:48 -0800
committerBrian Behlendorf <[email protected]>2009-01-22 09:58:48 -0800
commit3f4126739dc5c2a0b10ec1f6143ec43028755aa4 (patch)
treebf411d6842678078e570dee99fdf2146c8e62b87
parent511176398c81136786d5f6a955dcc6509f98f573 (diff)
Sleep uninteruptibly, waking up early may result in a crash
-rw-r--r--module/splat/splat-kmem.c23
-rw-r--r--module/splat/splat-rwlock.c4
2 files changed, 14 insertions, 13 deletions
diff --git a/module/splat/splat-kmem.c b/module/splat/splat-kmem.c
index a9792b1a5..31499dde3 100644
--- a/module/splat/splat-kmem.c
+++ b/module/splat/splat-kmem.c
@@ -309,31 +309,32 @@ splat_kmem_cache_size_test(struct file *file, void *arg,
NULL, &kcp, NULL, flags);
if (!cache) {
splat_vprint(file, name,
- "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME);
+ "Unable to create '%s'\n",
+ SPLAT_KMEM_CACHE_NAME);
return -ENOMEM;
}
kcd = kmem_cache_alloc(cache, KM_SLEEP);
if (!kcd) {
splat_vprint(file, name,
- "Unable to allocate from '%s'\n",
- SPLAT_KMEM_CACHE_NAME);
+ "Unable to allocate from '%s'\n",
+ SPLAT_KMEM_CACHE_NAME);
rc = -EINVAL;
goto out_free;
}
if (!kcd->kcd_flag) {
splat_vprint(file, name,
- "Failed to run contructor for '%s'\n",
- SPLAT_KMEM_CACHE_NAME);
+ "Failed to run contructor for '%s'\n",
+ SPLAT_KMEM_CACHE_NAME);
rc = -EINVAL;
goto out_free;
}
if (kcd->kcd_magic != kcp.kcp_magic) {
splat_vprint(file, name,
- "Failed to pass private data to constructor "
- "for '%s'\n", SPLAT_KMEM_CACHE_NAME);
+ "Failed to pass private data to constructor "
+ "for '%s'\n", SPLAT_KMEM_CACHE_NAME);
rc = -EINVAL;
goto out_free;
}
@@ -346,14 +347,14 @@ splat_kmem_cache_size_test(struct file *file, void *arg,
kmem_cache_destroy(cache);
if (kcp.kcp_count) {
splat_vprint(file, name,
- "Failed to run destructor on all slab objects "
- "for '%s'\n", SPLAT_KMEM_CACHE_NAME);
+ "Failed to run destructor on all slab objects "
+ "for '%s'\n", SPLAT_KMEM_CACHE_NAME);
rc = -EINVAL;
}
splat_vprint(file, name,
- "Successfully ran ctors/dtors for %d elements in '%s'\n",
- max, SPLAT_KMEM_CACHE_NAME);
+ "Successfully ran ctors/dtors for %d elements in '%s'\n",
+ max, SPLAT_KMEM_CACHE_NAME);
return rc;
diff --git a/module/splat/splat-rwlock.c b/module/splat/splat-rwlock.c
index b1db12ea8..70c9dc3d0 100644
--- a/module/splat/splat-rwlock.c
+++ b/module/splat/splat-rwlock.c
@@ -84,7 +84,7 @@ typedef struct rw_thr {
static inline void
splat_rwlock_sleep(signed long delay)
{
- set_current_state(TASK_INTERRUPTIBLE);
+ set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(delay);
}
@@ -431,7 +431,7 @@ splat_rwlock_test2(struct file *file, void *arg)
while (splat_rwlock_lock_and_test(&rwv.rw_priv_lock,
atomic_read(&rwv.rw_acquired) != 0 ||
atomic_read(&rwv.rw_waiters) != 0)) {
- splat_rwlock_sleep(1 * HZ);
+ splat_rwlock_sleep(HZ);
}
/* If any of the write threads ever acquired the lock