[PATCH 3/3] st.ko: change enlarge_buffer result

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Bodo Stroesser <bstroesser@xxxxxxxxxxxxxx>
Date: Mon, 2 Dec 2013 18:52:10 +0100
Subject: [PATCH 3/3] st.ko: change enlarge_buffer result

enlarge_buffer() just returns 1 or 0 if it could or could
not allocate the requested buffer.

In case of result 0, the callers always set the error to
EOVERFLOW. I think, this is not a good errno for those
cases, where enlarge_buffer() could not allocate the pages
it needed.

So I changed enlarge_buffer() to return a meaningful
result (-ENOMEM or -EOVERFLOW in case of error, 0 in case of
success) and the callers to use this result.

I also removed a check in setup_buffering() that is done
in enlarge_buffer() anyway.

Cc: Kai Makisara <kai.makisara@xxxxxxxxxxx>
Signed-off-by: Bodo Stroesser <bstroesser@xxxxxxxxxxxxxx>

---

--- a/drivers/scsi/st.c	2013-12-02 18:52:10.000000000 +0100
+++ b/drivers/scsi/st.c	2013-12-02 18:52:10.000000000 +0100
@@ -1221,10 +1221,9 @@ static int st_open(struct inode *inode,
 	}
 
 	/* See that we have at least a one page buffer available */
-	if (!enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) {
+	if ((retval = enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) != 0) {
 		printk(KERN_WARNING "%s: Can't allocate one page tape buffer.\n",
 		       name);
-		retval = (-EOVERFLOW);
 		goto err_out;
 	}
 
@@ -1517,11 +1516,9 @@ static int setup_buffering(struct scsi_t
 				clear_buffer(STbp);
 		}
 
-		if (bufsize > STbp->buffer_size &&
-		    !enlarge_buffer(STbp, bufsize, STp->restr_dma)) {
+		if ((retval = enlarge_buffer(STbp, bufsize, STp->restr_dma)) != 0) {
 			printk(KERN_WARNING "%s: Can't allocate %d byte tape buffer.\n",
 			       tape_name(STp), bufsize);
-			retval = (-EOVERFLOW);
 			goto out;
 		}
 		if (STp->block_size)
@@ -3723,7 +3720,7 @@ static int enlarge_buffer(struct st_buff
 	gfp_t priority;
 
 	if (new_size <= STbuffer->buffer_size)
-		return 1;
+		return 0;
 
 	max_segs = STbuffer->use_sg;
 
@@ -3747,7 +3744,7 @@ static int enlarge_buffer(struct st_buff
 	}
 	if (max_segs * (PAGE_SIZE << order) < new_size) {
 		if (order == ST_MAX_ORDER)
-			return 0;
+			return -EOVERFLOW;
 		normalize_buffer(STbuffer);
 		return enlarge_buffer(STbuffer, new_size, need_dma);
 	}
@@ -3760,7 +3757,7 @@ static int enlarge_buffer(struct st_buff
 		if (!page) {
 			DEB(STbuffer->buffer_size = got);
 			normalize_buffer(STbuffer);
-			return 0;
+			return -ENOMEM;
 		}
 
 		STbuffer->frp_segs += 1;
@@ -3771,7 +3768,7 @@ static int enlarge_buffer(struct st_buff
 	}
 	STbuffer->b_data = page_address(STbuffer->reserved_pages[0]);
 
-	return 1;
+	return 0;
 }
 
 
ÿôèº{.nÇ+?·?®?­?+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±þÇ,?ø§¶?¡Ü¨}©?²Æ zÚ&j:+v?¨þø¯ù®w¥þ?à2?Þ?¨è­Ú&¢)ß¡«a¶Úÿÿûàz¿äz¹Þ?ú+?ù???Ý¢jÿ?wèþf





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux