drivers/scsi/ipr.c: In function `ipr_worker_thread':
drivers/scsi/ipr.c:1804: too few arguments to function `kref_put'
drivers/scsi/ipr.c: In function `ipr_read_dump':
drivers/scsi/ipr.c:2407: too few arguments to function `kref_put'
drivers/scsi/ipr.c:2457: too few arguments to function `kref_put'
drivers/scsi/ipr.c: In function `ipr_alloc_dump':
drivers/scsi/ipr.c:2509: too many arguments to function `kref_init'
drivers/scsi/ipr.c: In function `ipr_free_dump':
drivers/scsi/ipr.c:2556: too few arguments to function `kref_put'


Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-power4-akpm/drivers/scsi/ipr.c |   74 +++++++++++++++++++-------------------
 1 files changed, 38 insertions(+), 36 deletions(-)

diff -puN drivers/scsi/ipr.c~ipr-build-fix drivers/scsi/ipr.c
--- 25-power4/drivers/scsi/ipr.c~ipr-build-fix	2004-08-24 22:58:55.607888448 -0700
+++ 25-power4-akpm/drivers/scsi/ipr.c	2004-08-24 22:59:22.519797216 -0700
@@ -1770,6 +1770,33 @@ static void ipr_get_ioa_dump(struct ipr_
 #endif
 
 /**
+ * ipr_release_dump - Free adapter dump memory
+ * @kref:	kref struct
+ *
+ * Return value:
+ *	nothing
+ **/
+static void ipr_release_dump(struct kref *kref)
+{
+	struct ipr_dump *dump = container_of(kref,struct ipr_dump,kref);
+	struct ipr_ioa_cfg *ioa_cfg = dump->ioa_cfg;
+	unsigned long lock_flags = 0;
+	int i;
+
+	ENTER;
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	ioa_cfg->dump = NULL;
+	ioa_cfg->sdt_state = INACTIVE;
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	for (i = 0; i < dump->ioa_dump.next_page_index; i++)
+		free_page((unsigned long) dump->ioa_dump.ioa_data[i]);
+
+	kfree(dump);
+	LEAVE;
+}
+
+/**
  * ipr_worker_thread - Worker thread
  * @data:		ioa config struct
  *
@@ -1795,13 +1822,15 @@ static void ipr_worker_thread(void *data
 
 	if (ioa_cfg->sdt_state == GET_DUMP) {
 		dump = ioa_cfg->dump;
-		if (!dump || !kref_get(&dump->kref)) {
-			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		if (!dump) {
+			spin_unlock_irqrestore(ioa_cfg->host->host_lock,
+						lock_flags);
 			return;
 		}
+		kref_get(&dump->kref);
 		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
 		ipr_get_ioa_dump(ioa_cfg, dump);
-		kref_put(&dump->kref);
+		kref_put(&dump->kref, ipr_release_dump);
 
 		spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
 		if (ioa_cfg->sdt_state == DUMP_OBTAINED)
@@ -2396,15 +2425,15 @@ static ssize_t ipr_read_dump(struct kobj
 	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
 	dump = ioa_cfg->dump;
 
-	if (ioa_cfg->sdt_state != DUMP_OBTAINED || !dump || !kref_get(&dump->kref)) {
+	if (ioa_cfg->sdt_state != DUMP_OBTAINED || !dump) {
 		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
 		return 0;
 	}
-
+	kref_get(&dump->kref);
 	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
 
 	if (off > dump->driver_dump.hdr.len) {
-		kref_put(&dump->kref);
+		kref_put(&dump->kref, ipr_release_dump);
 		return 0;
 	}
 
@@ -2454,38 +2483,11 @@ static ssize_t ipr_read_dump(struct kobj
 		count -= len;
 	}
 
-	kref_put(&dump->kref);
+	kref_put(&dump->kref, ipr_release_dump);
 	return rc;
 }
 
 /**
- * ipr_release_dump - Free adapter dump memory
- * @kref:	kref struct
- *
- * Return value:
- *	nothing
- **/
-static void ipr_release_dump(struct kref *kref)
-{
-	struct ipr_dump *dump = container_of(kref,struct ipr_dump,kref);
-	struct ipr_ioa_cfg *ioa_cfg = dump->ioa_cfg;
-	unsigned long lock_flags = 0;
-	int i;
-
-	ENTER;
-	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
-	ioa_cfg->dump = NULL;
-	ioa_cfg->sdt_state = INACTIVE;
-	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
-
-	for (i = 0; i < dump->ioa_dump.next_page_index; i++)
-		free_page((unsigned long) dump->ioa_dump.ioa_data[i]);
-
-	kfree(dump);
-	LEAVE;
-}
-
-/**
  * ipr_alloc_dump - Prepare for adapter dump
  * @ioa_cfg:	ioa config struct
  *
@@ -2506,7 +2508,7 @@ static int ipr_alloc_dump(struct ipr_ioa
 	}
 
 	memset(dump, 0, sizeof(struct ipr_dump));
-	kref_init(&dump->kref, ipr_release_dump);
+	kref_init(&dump->kref);
 	dump->ioa_cfg = ioa_cfg;
 
 	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
@@ -2553,7 +2555,7 @@ static int ipr_free_dump(struct ipr_ioa_
 	ioa_cfg->dump = NULL;
 	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
 
-	kref_put(&dump->kref);
+	kref_put(&dump->kref, ipr_release_dump);
 
 	LEAVE;
 	return 0;
_