[dm-devel] [PATCH] dm-block-manager: use spinlocks that don't disable interrupts
Mikulas Patocka
mpatocka at redhat.com
Mon Sep 12 11:24:48 UTC 2011
dm-block-manager: use spinlocks that don't disable interrupts
This will never be called in an interrupt context, so we don't have to use
spinlocks that disable interrupts.
Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
---
drivers/md/persistent-data/dm-block-manager.c | 35 ++++++++++----------------
1 file changed, 14 insertions(+), 21 deletions(-)
Index: linux-3.1-rc3-fast/drivers/md/persistent-data/dm-block-manager.c
===================================================================
--- linux-3.1-rc3-fast.orig/drivers/md/persistent-data/dm-block-manager.c 2011-09-12 13:17:44.000000000 +0200
+++ linux-3.1-rc3-fast/drivers/md/persistent-data/dm-block-manager.c 2011-09-12 13:20:01.000000000 +0200
@@ -200,19 +200,18 @@ static int bl_down_read(struct block_loc
{
int r;
struct waiter w;
- unsigned long flags;
- spin_lock_irqsave(&lock->lock, flags);
+ spin_lock(&lock->lock);
r = __check_holder(lock);
if (r) {
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
return r;
}
if (__available_for_read(lock)) {
lock->count++;
__add_holder(lock, current);
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
return 0;
}
@@ -221,7 +220,7 @@ static int bl_down_read(struct block_loc
w.task = current;
w.wants_write = 0;
list_add_tail(&w.list, &lock->waiters);
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
__wait(&w);
put_task_struct(current);
@@ -231,9 +230,8 @@ static int bl_down_read(struct block_loc
static int bl_down_read_nonblock(struct block_lock *lock)
{
int r;
- unsigned long flags;
- spin_lock_irqsave(&lock->lock, flags);
+ spin_lock(&lock->lock);
r = __check_holder(lock);
if (r)
goto out;
@@ -246,40 +244,37 @@ static int bl_down_read_nonblock(struct
r = -EWOULDBLOCK;
out:
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
return r;
}
static void bl_up_read(struct block_lock *lock)
{
- unsigned long flags;
-
- spin_lock_irqsave(&lock->lock, flags);
+ spin_lock(&lock->lock);
BUG_ON(lock->count <= 0);
__del_holder(lock, current);
--lock->count;
if (!list_empty(&lock->waiters))
__wake_many(lock);
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
}
static int bl_down_write(struct block_lock *lock)
{
int r;
struct waiter w;
- unsigned long flags;
- spin_lock_irqsave(&lock->lock, flags);
+ spin_lock(&lock->lock);
r = __check_holder(lock);
if (r) {
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
return r;
}
if (lock->count == 0 && list_empty(&lock->waiters)) {
lock->count = -1;
__add_holder(lock, current);
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
return 0;
}
@@ -289,7 +284,7 @@ static int bl_down_write(struct block_lo
/* writers given priority, we know there's only one mutator in the system, so ignoring the ordering reversal */
list_add(&w.list, &lock->waiters);
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
__wait(&w);
put_task_struct(current);
@@ -299,14 +294,12 @@ static int bl_down_write(struct block_lo
static void bl_up_write(struct block_lock *lock)
{
- unsigned long flags;
-
- spin_lock_irqsave(&lock->lock, flags);
+ spin_lock(&lock->lock);
__del_holder(lock, current);
lock->count = 0;
if (!list_empty(&lock->waiters))
__wake_many(lock);
- spin_unlock_irqrestore(&lock->lock, flags);
+ spin_unlock(&lock->lock);
}
static void report_recursive_bug(dm_block_t b, int r)
More information about the dm-devel
mailing list