diff options
Diffstat (limited to 'lib/klist.c')
| -rw-r--r-- | lib/klist.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/lib/klist.c b/lib/klist.c index 0507fa5d84c5..f6b547812fe3 100644 --- a/lib/klist.c +++ b/lib/klist.c @@ -336,8 +336,9 @@ struct klist_node *klist_prev(struct klist_iter *i)  	void (*put)(struct klist_node *) = i->i_klist->put;  	struct klist_node *last = i->i_cur;  	struct klist_node *prev; +	unsigned long flags; -	spin_lock(&i->i_klist->k_lock); +	spin_lock_irqsave(&i->i_klist->k_lock, flags);  	if (last) {  		prev = to_klist_node(last->n_node.prev); @@ -356,7 +357,7 @@ struct klist_node *klist_prev(struct klist_iter *i)  		prev = to_klist_node(prev->n_node.prev);  	} -	spin_unlock(&i->i_klist->k_lock); +	spin_unlock_irqrestore(&i->i_klist->k_lock, flags);  	if (put && last)  		put(last); @@ -377,8 +378,9 @@ struct klist_node *klist_next(struct klist_iter *i)  	void (*put)(struct klist_node *) = i->i_klist->put;  	struct klist_node *last = i->i_cur;  	struct klist_node *next; +	unsigned long flags; -	spin_lock(&i->i_klist->k_lock); +	spin_lock_irqsave(&i->i_klist->k_lock, flags);  	if (last) {  		next = to_klist_node(last->n_node.next); @@ -397,7 +399,7 @@ struct klist_node *klist_next(struct klist_iter *i)  		next = to_klist_node(next->n_node.next);  	} -	spin_unlock(&i->i_klist->k_lock); +	spin_unlock_irqrestore(&i->i_klist->k_lock, flags);  	if (put && last)  		put(last); |