[stgt] [PATCH 1/2] ssc: 32bit arch can't handle large image files
FUJITA Tomonori
fujita.tomonori at lab.ntt.co.jp
Sat Dec 10 02:58:20 CET 2011
Signed-off-by: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
---
usr/bs_ssc.c | 12 ++++++------
usr/libssc.c | 8 ++++----
usr/libssc.h | 4 ++--
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/usr/bs_ssc.c b/usr/bs_ssc.c
index b80ece8..469057d 100644
--- a/usr/bs_ssc.c
+++ b/usr/bs_ssc.c
@@ -113,7 +113,7 @@ static int resp_rewind(struct scsi_lu *lu)
return skip_next_header(lu);
}
-static unsigned long current_size(struct scsi_cmd *cmd)
+static uint64_t current_size(struct scsi_cmd *cmd)
{
struct ssc_info *ssc = dtype_priv(cmd->dev);
return ssc->c_blk.curr;
@@ -179,8 +179,8 @@ static int append_blk(struct scsi_cmd *cmd, uint8_t *data,
/* Write any data */
if (size) {
- ret = pwrite(fd, data, size,
- (off_t)curr->curr + SSC_BLK_HDR_SIZE);
+ ret = pwrite64(fd, data, size,
+ curr->curr + SSC_BLK_HDR_SIZE);
if (ret != size) {
eprintf("Write of data failed: %m\n");
sense_data_build(cmd, MEDIUM_ERROR, ASC_WRITE_ERROR);
@@ -345,7 +345,7 @@ static int resp_var_read(struct scsi_cmd *cmd, uint8_t *buf, uint32_t length,
goto out;
}
- ret = pread(cmd->dev->fd, buf, length, h->curr + SSC_BLK_HDR_SIZE);
+ ret = pread64(cmd->dev->fd, buf, length, h->curr + SSC_BLK_HDR_SIZE);
if (ret != length) {
sense_data_build(cmd, MEDIUM_ERROR, ASC_READ_ERROR);
result = SAM_STAT_CHECK_CONDITION;
@@ -399,8 +399,8 @@ static int resp_fixed_read(struct scsi_cmd *cmd, uint8_t *buf, uint32_t length,
goto out;
}
- residue = pread(fd, buf, block_length,
- h->curr + SSC_BLK_HDR_SIZE);
+ residue = pread64(fd, buf, block_length,
+ h->curr + SSC_BLK_HDR_SIZE);
if (block_length != residue) {
eprintf("Could only read %d bytes, not %d\n",
(int)residue, block_length);
diff --git a/usr/libssc.c b/usr/libssc.c
index e13a9f6..a4a0687 100644
--- a/usr/libssc.c
+++ b/usr/libssc.c
@@ -181,13 +181,13 @@ int ssc_write_mam_info(int fd, struct MAM_info *i)
return 0;
}
-int ssc_read_blkhdr(int fd, struct blk_header_info *i, off_t offset)
+int ssc_read_blkhdr(int fd, struct blk_header_info *i, loff_t offset)
{
size_t count;
struct blk_header h, *m = &h;
uint32_t crc = ~0;
- count = pread(fd, m, SSC_BLK_HDR_SIZE, offset);
+ count = pread64(fd, m, SSC_BLK_HDR_SIZE, offset);
if (count != SSC_BLK_HDR_SIZE)
return 1;
@@ -207,7 +207,7 @@ int ssc_read_blkhdr(int fd, struct blk_header_info *i, off_t offset)
return 0;
}
-int ssc_write_blkhdr(int fd, struct blk_header_info *i, off_t offset)
+int ssc_write_blkhdr(int fd, struct blk_header_info *i, loff_t offset)
{
size_t count;
struct blk_header h, *m = &h;
@@ -224,7 +224,7 @@ int ssc_write_blkhdr(int fd, struct blk_header_info *i, off_t offset)
crc = crc32c(crc, &m->ondisk_sz, SSC_BLK_HDR_SIZE - sizeof(m->h_csum));
*(uint32_t *)m->h_csum = ~crc;
- count = pwrite(fd, m, SSC_BLK_HDR_SIZE, offset);
+ count = pwrite64(fd, m, SSC_BLK_HDR_SIZE, offset);
if (count != SSC_BLK_HDR_SIZE)
return 1;
diff --git a/usr/libssc.h b/usr/libssc.h
index ace2037..e844346 100644
--- a/usr/libssc.h
+++ b/usr/libssc.h
@@ -3,7 +3,7 @@
extern int ssc_read_mam_info(int fd, struct MAM_info *i);
extern int ssc_write_mam_info(int fd, struct MAM_info *i);
-extern int ssc_read_blkhdr(int fd, struct blk_header_info *h, off_t offset);
-extern int ssc_write_blkhdr(int fd, struct blk_header_info *h, off_t offset);
+extern int ssc_read_blkhdr(int fd, struct blk_header_info *h, loff_t offset);
+extern int ssc_write_blkhdr(int fd, struct blk_header_info *h, loff_t offset);
#endif
--
1.7.2.5
--
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