[stgt] [PATCH 1/5] BS_RDWR: Create local varialbes for offset and transfer length in bs_rdwr_request()
Ronnie Sahlberg
ronniesahlberg at gmail.com
Sun Apr 22 09:24:25 CEST 2012
The bs_rdwr_request() function is asseccing the offset and tl variables from
sev eral arms in the bit switch statement.
Break these out into local variables instead of accessing them via the cmd-> pointer all the time.
Signed-off-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
---
usr/bs_rdwr.c | 35 +++++++++++++++++------------------
1 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/usr/bs_rdwr.c b/usr/bs_rdwr.c
index fbc9a2c..31f4441 100644
--- a/usr/bs_rdwr.c
+++ b/usr/bs_rdwr.c
@@ -65,6 +65,8 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
uint8_t key;
uint16_t asc;
char *tmpbuf;
+ uint64_t offset = cmd->offset;
+ uint32_t tl = cmd->tl;
ret = length = 0;
key = asc = 0;
@@ -89,7 +91,7 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
case WRITE_16:
length = scsi_get_out_length(cmd);
ret = pwrite64(fd, scsi_get_out_buffer(cmd), length,
- cmd->offset);
+ offset);
if (ret == length) {
/*
* it would be better not to access to pg
@@ -105,7 +107,7 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
set_medium_error(&result, &key, &asc);
if ((cmd->scb[0] != WRITE_6) && (cmd->scb[1] & 0x10))
- posix_fadvise(fd, cmd->offset, length,
+ posix_fadvise(fd, offset, length,
POSIX_FADV_NOREUSE);
break;
@@ -115,19 +117,19 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
case READ_16:
length = scsi_get_in_length(cmd);
ret = pread64(fd, scsi_get_in_buffer(cmd), length,
- cmd->offset);
+ offset);
if (ret != length)
set_medium_error(&result, &key, &asc);
if ((cmd->scb[0] != READ_6) && (cmd->scb[1] & 0x10))
- posix_fadvise(fd, cmd->offset, length,
+ posix_fadvise(fd, offset, length,
POSIX_FADV_NOREUSE);
break;
case PRE_FETCH_10:
case PRE_FETCH_16:
- ret = posix_fadvise(fd, cmd->offset, cmd->tl,
+ ret = posix_fadvise(fd, offset, cmd->tl,
POSIX_FADV_WILLNEED);
if (ret != 0)
@@ -146,7 +148,7 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
break;
}
- ret = pread64(fd, tmpbuf, length, cmd->offset);
+ ret = pread64(fd, tmpbuf, length, offset);
if (ret != length)
set_medium_error(&result, &key, &asc);
@@ -157,7 +159,7 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
}
if (cmd->scb[1] & 0x10)
- posix_fadvise(fd, cmd->offset, length,
+ posix_fadvise(fd, offset, length,
POSIX_FADV_NOREUSE);
free(tmpbuf);
@@ -180,16 +182,13 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
tmpbuf += 8;
while (length >= 16) {
- uint64_t offset;
- uint64_t len;
-
offset = get_unaligned_be64(&tmpbuf[0]);
offset = offset << cmd->dev->blk_shift;
- len = get_unaligned_be32(&tmpbuf[8]);
- len = len << cmd->dev->blk_shift;
+ tl = get_unaligned_be32(&tmpbuf[8]);
+ tl = tl << cmd->dev->blk_shift;
- if (offset + len > cmd->dev->size) {
+ if (offset + tl > cmd->dev->size) {
eprintf("UNMAP beyond EOF\n");
result = SAM_STAT_CHECK_CONDITION;
key = ILLEGAL_REQUEST;
@@ -197,12 +196,12 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
break;
}
- if (len > 0) {
- if (unmap_file_region(fd, offset, len) != 0) {
+ if (tl > 0) {
+ if (unmap_file_region(fd, offset, tl) != 0) {
eprintf("Failed to punch hole for"
" UNMAP at offset:%" PRIu64
- " length:%" PRIu64 "\n",
- offset, len);
+ " length:%d\n",
+ offset, tl);
result = SAM_STAT_CHECK_CONDITION;
key = HARDWARE_ERROR;
asc = ASC_INTERNAL_TGT_FAILURE;
@@ -224,7 +223,7 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
if (result != SAM_STAT_GOOD) {
eprintf("io error %p %x %d %d %" PRIu64 ", %m\n",
- cmd, cmd->scb[0], ret, length, cmd->offset);
+ cmd, cmd->scb[0], ret, length, offset);
sense_data_build(cmd, key, asc);
}
}
--
1.7.3.1
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list