patch-2.4.22 linux-2.4.22/drivers/scsi/aacraid/commctrl.c
Next file: linux-2.4.22/drivers/scsi/aacraid/comminit.c
Previous file: linux-2.4.22/drivers/scsi/aacraid/aacraid.h
Back to the patch index
Back to the overall index
- Lines: 115
- Date:
2003-08-25 04:44:42.000000000 -0700
- Orig file:
linux-2.4.21/drivers/scsi/aacraid/commctrl.c
- Orig date:
2002-11-28 15:53:14.000000000 -0800
diff -urN linux-2.4.21/drivers/scsi/aacraid/commctrl.c linux-2.4.22/drivers/scsi/aacraid/commctrl.c
@@ -63,7 +63,7 @@
if(fibptr == NULL)
return -ENOMEM;
- kfib = fibptr->fib;
+ kfib = fibptr->hw_fib;
/*
* First copy in the header so that we can check the size field.
*/
@@ -150,7 +150,7 @@
* the list to 0.
*/
fibctx->count = 0;
- INIT_LIST_HEAD(&fibctx->fibs);
+ INIT_LIST_HEAD(&fibctx->fib_list);
fibctx->jiffies = jiffies/HZ;
/*
* Now add this context onto the adapter's
@@ -181,7 +181,7 @@
{
struct fib_ioctl f;
struct aac_fib_context *fibctx, *aifcp;
- struct hw_fib * fib;
+ struct fib * fib;
int status;
struct list_head * entry;
int found;
@@ -211,12 +211,16 @@
}
entry = entry->next;
}
- if (found == 0)
+ if (found == 0) {
+ dprintk ((KERN_INFO "Fib not found\n"));
return -EINVAL;
+ }
if((fibctx->type != FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT) ||
- (fibctx->size != sizeof(struct aac_fib_context)))
+ (fibctx->size != sizeof(struct aac_fib_context))) {
+ dprintk ((KERN_INFO "Fib Context corrupt?\n"));
return -EINVAL;
+ }
status = 0;
spin_lock_irqsave(&dev->fib_lock, flags);
/*
@@ -224,27 +228,28 @@
* -EAGAIN
*/
return_fib:
- if (!list_empty(&fibctx->fibs)) {
+ if (!list_empty(&fibctx->fib_list)) {
struct list_head * entry;
/*
* Pull the next fib from the fibs
*/
- entry = fibctx->fibs.next;
+ entry = fibctx->fib_list.next;
list_del(entry);
- fib = list_entry(entry, struct hw_fib, header.FibLinks);
+ fib = list_entry(entry, struct fib, fiblink);
fibctx->count--;
spin_unlock_irqrestore(&dev->fib_lock, flags);
- if (copy_to_user(f.fib, fib, sizeof(struct hw_fib))) {
+ if (copy_to_user(f.fib, fib->hw_fib, sizeof(struct hw_fib))) {
+ kfree(fib->hw_fib);
kfree(fib);
return -EFAULT;
}
/*
* Free the space occupied by this copy of the fib.
*/
+ kfree(fib->hw_fib);
kfree(fib);
status = 0;
- fibctx->jiffies = jiffies/HZ;
} else {
spin_unlock_irqrestore(&dev->fib_lock, flags);
if (f.wait) {
@@ -259,28 +264,30 @@
status = -EAGAIN;
}
}
+ fibctx->jiffies = jiffies/HZ;
return status;
}
int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context * fibctx)
{
- struct hw_fib *fib;
+ struct fib *fib;
/*
* First free any FIBs that have not been consumed.
*/
- while (!list_empty(&fibctx->fibs)) {
+ while (!list_empty(&fibctx->fib_list)) {
struct list_head * entry;
/*
* Pull the next fib from the fibs
*/
- entry = fibctx->fibs.next;
+ entry = fibctx->fib_list.next;
list_del(entry);
- fib = list_entry(entry, struct hw_fib, header.FibLinks);
+ fib = list_entry(entry, struct fib, fiblink);
fibctx->count--;
/*
* Free the space occupied by this copy of the fib.
*/
+ kfree(fib->hw_fib);
kfree(fib);
}
/*
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)