lkml.org 
[lkml]   [2009]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
Subject[Patch 02/08] Staging: heci - fix wrong order of device_lock and file_lock
From 5c4db44364f204d168d2bbb70310728a54aabcd7 Mon Sep 17 00:00:00 2001
From: Dongxiao Xu <dongxiao.xu@intel.com>
Date: Sun, 31 May 2009 22:44:09 +0800
Subject: [PATCH] heci: fix wrong order of device_lock and file_lock

When the two locks are nested, the code should always first acquire file_lock,
and then acquire device_lock in order not to generate dead-lock race.

Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
---
drivers/staging/heci/io_heci.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/heci/io_heci.c b/drivers/staging/heci/io_heci.c
index ff6d294..26882a2 100644
--- a/drivers/staging/heci/io_heci.c
+++ b/drivers/staging/heci/io_heci.c
@@ -277,14 +277,16 @@ int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num,
}
goto end;
}
+ spin_unlock_bh(&dev->device_lock);
+
spin_lock(&file_ext->file_lock);
+ spin_lock_bh(&dev->device_lock);
if (file_ext->state != HECI_FILE_CONNECTING) {
rets = -ENODEV;
- spin_unlock(&file_ext->file_lock);
spin_unlock_bh(&dev->device_lock);
+ spin_unlock(&file_ext->file_lock);
goto end;
}
- spin_unlock(&file_ext->file_lock);
/* prepare the output buffer */
client = (struct heci_client *) res_msg.data;
client->max_msg_length = dev->me_clients[i].props.max_msg_length;
@@ -312,6 +314,7 @@ int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num,
&dev->ctrl_wr_list.heci_cb.cb_list);
}
spin_unlock_bh(&dev->device_lock);
+ spin_unlock(&file_ext->file_lock);
err = wait_event_timeout(dev->wait_recvd_msg,
(HECI_FILE_CONNECTED == file_ext->state
|| HECI_FILE_DISCONNECTED == file_ext->state),
--
1.6.0.rc1


\
 
 \ /
  Last update: 2009-05-31 08:47    [W:0.033 / U:0.156 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site