Commit 5234e25c authored by Salyzyn, Mark's avatar Salyzyn, Mark Committed by James Bottomley

[SCSI] aacraid: fib context lock for management ioctls (take 2)

The first patch (a119ee8e) was a bit
too aggressive and nested the locks (!) unit testing was in
error. This patch was reverted by
203a512f.

This new patch should fix the locks correctly.
Signed-off-by: default avatarMark Salyzyn <aacraid@adaptec.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent df922075
...@@ -243,6 +243,7 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg) ...@@ -243,6 +243,7 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg)
* Search the list of AdapterFibContext addresses on the adapter * Search the list of AdapterFibContext addresses on the adapter
* to be sure this is a valid address * to be sure this is a valid address
*/ */
spin_lock_irqsave(&dev->fib_lock, flags);
entry = dev->fib_list.next; entry = dev->fib_list.next;
fibctx = NULL; fibctx = NULL;
...@@ -258,17 +259,18 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg) ...@@ -258,17 +259,18 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg)
fibctx = NULL; fibctx = NULL;
} }
if (!fibctx) { if (!fibctx) {
spin_unlock_irqrestore(&dev->fib_lock, flags);
dprintk ((KERN_INFO "Fib Context not found\n")); dprintk ((KERN_INFO "Fib Context not found\n"));
return -EINVAL; return -EINVAL;
} }
if((fibctx->type != FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT) || if((fibctx->type != FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT) ||
(fibctx->size != sizeof(struct aac_fib_context))) { (fibctx->size != sizeof(struct aac_fib_context))) {
spin_unlock_irqrestore(&dev->fib_lock, flags);
dprintk ((KERN_INFO "Fib Context corrupt?\n")); dprintk ((KERN_INFO "Fib Context corrupt?\n"));
return -EINVAL; return -EINVAL;
} }
status = 0; status = 0;
spin_lock_irqsave(&dev->fib_lock, flags);
/* /*
* If there are no fibs to send back, then either wait or return * If there are no fibs to send back, then either wait or return
* -EAGAIN * -EAGAIN
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment