[SG] Update drivers to use sg helpers
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
@@ -542,7 +542,7 @@ static int osst_verify_frame(struct osst_tape * STp, int frame_seq_number, int q
|
||||
if (STp->raw) {
|
||||
if (STp->buffer->syscall_result) {
|
||||
for (i=0; i < STp->buffer->sg_segs; i++)
|
||||
memset(page_address(STp->buffer->sg[i].page),
|
||||
memset(page_address(sg_page(&STp->buffer->sg[i])),
|
||||
0, STp->buffer->sg[i].length);
|
||||
strcpy(STp->buffer->b_data, "READ ERROR ON FRAME");
|
||||
} else
|
||||
@@ -4437,7 +4437,7 @@ static int os_scsi_tape_open(struct inode * inode, struct file * filp)
|
||||
for (i = 0, b_size = 0;
|
||||
(i < STp->buffer->sg_segs) && ((b_size + STp->buffer->sg[i].length) <= OS_DATA_SIZE);
|
||||
b_size += STp->buffer->sg[i++].length);
|
||||
STp->buffer->aux = (os_aux_t *) (page_address(STp->buffer->sg[i].page) + OS_DATA_SIZE - b_size);
|
||||
STp->buffer->aux = (os_aux_t *) (page_address(sg_page(&STp->buffer->sg[i])) + OS_DATA_SIZE - b_size);
|
||||
#if DEBUG
|
||||
printk(OSST_DEB_MSG "%s:D: b_data points to %p in segment 0 at %p\n", name,
|
||||
STp->buffer->b_data, page_address(STp->buffer->sg[0].page));
|
||||
@@ -5252,25 +5252,26 @@ static int enlarge_buffer(struct osst_buffer *STbuffer, int need_dma)
|
||||
/* Try to allocate the first segment up to OS_DATA_SIZE and the others
|
||||
big enough to reach the goal (code assumes no segments in place) */
|
||||
for (b_size = OS_DATA_SIZE, order = OSST_FIRST_ORDER; b_size >= PAGE_SIZE; order--, b_size /= 2) {
|
||||
STbuffer->sg[0].page = alloc_pages(priority, order);
|
||||
struct page *page = alloc_pages(priority, order);
|
||||
|
||||
STbuffer->sg[0].offset = 0;
|
||||
if (STbuffer->sg[0].page != NULL) {
|
||||
if (page != NULL) {
|
||||
sg_set_page(&STbuffer->sg[0], page);
|
||||
STbuffer->sg[0].length = b_size;
|
||||
STbuffer->b_data = page_address(STbuffer->sg[0].page);
|
||||
STbuffer->b_data = page_address(page);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (STbuffer->sg[0].page == NULL) {
|
||||
if (sg_page(&STbuffer->sg[0]) == NULL) {
|
||||
printk(KERN_NOTICE "osst :I: Can't allocate tape buffer main segment.\n");
|
||||
return 0;
|
||||
}
|
||||
/* Got initial segment of 'bsize,order', continue with same size if possible, except for AUX */
|
||||
for (segs=STbuffer->sg_segs=1, got=b_size;
|
||||
segs < max_segs && got < OS_FRAME_SIZE; ) {
|
||||
STbuffer->sg[segs].page =
|
||||
alloc_pages(priority, (OS_FRAME_SIZE - got <= PAGE_SIZE) ? 0 : order);
|
||||
struct page *page = alloc_pages(priority, (OS_FRAME_SIZE - got <= PAGE_SIZE) ? 0 : order);
|
||||
STbuffer->sg[segs].offset = 0;
|
||||
if (STbuffer->sg[segs].page == NULL) {
|
||||
if (page == NULL) {
|
||||
if (OS_FRAME_SIZE - got <= (max_segs - segs) * b_size / 2 && order) {
|
||||
b_size /= 2; /* Large enough for the rest of the buffers */
|
||||
order--;
|
||||
@@ -5284,6 +5285,7 @@ static int enlarge_buffer(struct osst_buffer *STbuffer, int need_dma)
|
||||
normalize_buffer(STbuffer);
|
||||
return 0;
|
||||
}
|
||||
sg_set_page(&STbuffer->sg[segs], page);
|
||||
STbuffer->sg[segs].length = (OS_FRAME_SIZE - got <= PAGE_SIZE / 2) ? (OS_FRAME_SIZE - got) : b_size;
|
||||
got += STbuffer->sg[segs].length;
|
||||
STbuffer->buffer_size = got;
|
||||
@@ -5316,7 +5318,7 @@ static void normalize_buffer(struct osst_buffer *STbuffer)
|
||||
b_size < STbuffer->sg[i].length;
|
||||
b_size *= 2, order++);
|
||||
|
||||
__free_pages(STbuffer->sg[i].page, order);
|
||||
__free_pages(sg_page(&STbuffer->sg[i]), order);
|
||||
STbuffer->buffer_size -= STbuffer->sg[i].length;
|
||||
}
|
||||
#if DEBUG
|
||||
@@ -5344,7 +5346,7 @@ static int append_to_buffer(const char __user *ubp, struct osst_buffer *st_bp, i
|
||||
for ( ; i < st_bp->sg_segs && do_count > 0; i++) {
|
||||
cnt = st_bp->sg[i].length - offset < do_count ?
|
||||
st_bp->sg[i].length - offset : do_count;
|
||||
res = copy_from_user(page_address(st_bp->sg[i].page) + offset, ubp, cnt);
|
||||
res = copy_from_user(page_address(sg_page(&st_bp->sg[i])) + offset, ubp, cnt);
|
||||
if (res)
|
||||
return (-EFAULT);
|
||||
do_count -= cnt;
|
||||
@@ -5377,7 +5379,7 @@ static int from_buffer(struct osst_buffer *st_bp, char __user *ubp, int do_count
|
||||
for ( ; i < st_bp->sg_segs && do_count > 0; i++) {
|
||||
cnt = st_bp->sg[i].length - offset < do_count ?
|
||||
st_bp->sg[i].length - offset : do_count;
|
||||
res = copy_to_user(ubp, page_address(st_bp->sg[i].page) + offset, cnt);
|
||||
res = copy_to_user(ubp, page_address(sg_page(&st_bp->sg[i])) + offset, cnt);
|
||||
if (res)
|
||||
return (-EFAULT);
|
||||
do_count -= cnt;
|
||||
@@ -5410,7 +5412,7 @@ static int osst_zero_buffer_tail(struct osst_buffer *st_bp)
|
||||
i < st_bp->sg_segs && do_count > 0; i++) {
|
||||
cnt = st_bp->sg[i].length - offset < do_count ?
|
||||
st_bp->sg[i].length - offset : do_count ;
|
||||
memset(page_address(st_bp->sg[i].page) + offset, 0, cnt);
|
||||
memset(page_address(sg_page(&st_bp->sg[i])) + offset, 0, cnt);
|
||||
do_count -= cnt;
|
||||
offset = 0;
|
||||
}
|
||||
@@ -5430,7 +5432,7 @@ static int osst_copy_to_buffer(struct osst_buffer *st_bp, unsigned char *ptr)
|
||||
for (i = 0; i < st_bp->sg_segs && do_count > 0; i++) {
|
||||
cnt = st_bp->sg[i].length < do_count ?
|
||||
st_bp->sg[i].length : do_count ;
|
||||
memcpy(page_address(st_bp->sg[i].page), ptr, cnt);
|
||||
memcpy(page_address(sg_page(&st_bp->sg[i])), ptr, cnt);
|
||||
do_count -= cnt;
|
||||
ptr += cnt;
|
||||
}
|
||||
@@ -5451,7 +5453,7 @@ static int osst_copy_from_buffer(struct osst_buffer *st_bp, unsigned char *ptr)
|
||||
for (i = 0; i < st_bp->sg_segs && do_count > 0; i++) {
|
||||
cnt = st_bp->sg[i].length < do_count ?
|
||||
st_bp->sg[i].length : do_count ;
|
||||
memcpy(ptr, page_address(st_bp->sg[i].page), cnt);
|
||||
memcpy(ptr, page_address(sg_page(&st_bp->sg[i])), cnt);
|
||||
do_count -= cnt;
|
||||
ptr += cnt;
|
||||
}
|
||||
|
Reference in New Issue
Block a user