diff options
author | Borislav Petkov <petkovbb@googlemail.com> | 2008-04-27 09:38:34 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-27 09:38:34 -0400 |
commit | 01a63aebe4dcfcbe983c40a475e4650a4ae614de (patch) | |
tree | 3526df2545f33a26f26efbe2bf8433af52ffd001 /drivers/ide | |
parent | d9df937af4f980883d94276000e5af399438e1a9 (diff) |
ide-tape: mv tape->merge_stage_size tape->merge_bh_size
This is the size of the merge buffer.
Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/ide-tape.c | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 00b7e0cb8b1a..0b8765c22d7a 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
@@ -310,7 +310,8 @@ typedef struct ide_tape_obj { | |||
310 | /* Data buffer size chosen based on the tape's recommendation */ | 310 | /* Data buffer size chosen based on the tape's recommendation */ |
311 | int buffer_size; | 311 | int buffer_size; |
312 | idetape_stage_t *merge_stage; | 312 | idetape_stage_t *merge_stage; |
313 | int merge_stage_size; | 313 | /* size of the merge buffer */ |
314 | int merge_bh_size; | ||
314 | struct idetape_bh *bh; | 315 | struct idetape_bh *bh; |
315 | char *b_data; | 316 | char *b_data; |
316 | int b_count; | 317 | int b_count; |
@@ -1649,7 +1650,7 @@ static void __ide_tape_discard_merge_buffer(ide_drive_t *drive) | |||
1649 | return; | 1650 | return; |
1650 | 1651 | ||
1651 | clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags); | 1652 | clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags); |
1652 | tape->merge_stage_size = 0; | 1653 | tape->merge_bh_size = 0; |
1653 | if (tape->merge_stage != NULL) { | 1654 | if (tape->merge_stage != NULL) { |
1654 | ide_tape_kfree_buffer(tape->merge_stage); | 1655 | ide_tape_kfree_buffer(tape->merge_stage); |
1655 | tape->merge_stage = NULL; | 1656 | tape->merge_stage = NULL; |
@@ -1790,17 +1791,17 @@ static void ide_tape_flush_merge_buffer(ide_drive_t *drive) | |||
1790 | " but we are not writing.\n"); | 1791 | " but we are not writing.\n"); |
1791 | return; | 1792 | return; |
1792 | } | 1793 | } |
1793 | if (tape->merge_stage_size > tape->buffer_size) { | 1794 | if (tape->merge_bh_size > tape->buffer_size) { |
1794 | printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n"); | 1795 | printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n"); |
1795 | tape->merge_stage_size = tape->buffer_size; | 1796 | tape->merge_bh_size = tape->buffer_size; |
1796 | } | 1797 | } |
1797 | if (tape->merge_stage_size) { | 1798 | if (tape->merge_bh_size) { |
1798 | blocks = tape->merge_stage_size / tape->blk_size; | 1799 | blocks = tape->merge_bh_size / tape->blk_size; |
1799 | if (tape->merge_stage_size % tape->blk_size) { | 1800 | if (tape->merge_bh_size % tape->blk_size) { |
1800 | unsigned int i; | 1801 | unsigned int i; |
1801 | 1802 | ||
1802 | blocks++; | 1803 | blocks++; |
1803 | i = tape->blk_size - tape->merge_stage_size % | 1804 | i = tape->blk_size - tape->merge_bh_size % |
1804 | tape->blk_size; | 1805 | tape->blk_size; |
1805 | bh = tape->bh->b_reqnext; | 1806 | bh = tape->bh->b_reqnext; |
1806 | while (bh) { | 1807 | while (bh) { |
@@ -1824,7 +1825,7 @@ static void ide_tape_flush_merge_buffer(ide_drive_t *drive) | |||
1824 | } | 1825 | } |
1825 | } | 1826 | } |
1826 | (void) idetape_add_chrdev_write_request(drive, blocks); | 1827 | (void) idetape_add_chrdev_write_request(drive, blocks); |
1827 | tape->merge_stage_size = 0; | 1828 | tape->merge_bh_size = 0; |
1828 | } | 1829 | } |
1829 | if (tape->merge_stage != NULL) { | 1830 | if (tape->merge_stage != NULL) { |
1830 | ide_tape_kfree_buffer(tape->merge_stage); | 1831 | ide_tape_kfree_buffer(tape->merge_stage); |
@@ -1844,10 +1845,10 @@ static int idetape_init_read(ide_drive_t *drive) | |||
1844 | ide_tape_flush_merge_buffer(drive); | 1845 | ide_tape_flush_merge_buffer(drive); |
1845 | idetape_flush_tape_buffers(drive); | 1846 | idetape_flush_tape_buffers(drive); |
1846 | } | 1847 | } |
1847 | if (tape->merge_stage || tape->merge_stage_size) { | 1848 | if (tape->merge_stage || tape->merge_bh_size) { |
1848 | printk(KERN_ERR "ide-tape: merge_stage_size should be" | 1849 | printk(KERN_ERR "ide-tape: merge_bh_size should be" |
1849 | " 0 now\n"); | 1850 | " 0 now\n"); |
1850 | tape->merge_stage_size = 0; | 1851 | tape->merge_bh_size = 0; |
1851 | } | 1852 | } |
1852 | tape->merge_stage = ide_tape_kmalloc_buffer(tape, 0, 0); | 1853 | tape->merge_stage = ide_tape_kmalloc_buffer(tape, 0, 0); |
1853 | if (!tape->merge_stage) | 1854 | if (!tape->merge_stage) |
@@ -1993,7 +1994,7 @@ static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op, | |||
1993 | } | 1994 | } |
1994 | 1995 | ||
1995 | if (tape->chrdev_dir == IDETAPE_DIR_READ) { | 1996 | if (tape->chrdev_dir == IDETAPE_DIR_READ) { |
1996 | tape->merge_stage_size = 0; | 1997 | tape->merge_bh_size = 0; |
1997 | if (test_and_clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags)) | 1998 | if (test_and_clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags)) |
1998 | ++count; | 1999 | ++count; |
1999 | ide_tape_discard_merge_buffer(drive, 0); | 2000 | ide_tape_discard_merge_buffer(drive, 0); |
@@ -2063,13 +2064,13 @@ static ssize_t idetape_chrdev_read(struct file *file, char __user *buf, | |||
2063 | return rc; | 2064 | return rc; |
2064 | if (count == 0) | 2065 | if (count == 0) |
2065 | return (0); | 2066 | return (0); |
2066 | if (tape->merge_stage_size) { | 2067 | if (tape->merge_bh_size) { |
2067 | actually_read = min((unsigned int)(tape->merge_stage_size), | 2068 | actually_read = min((unsigned int)(tape->merge_bh_size), |
2068 | (unsigned int)count); | 2069 | (unsigned int)count); |
2069 | if (idetape_copy_stage_to_user(tape, buf, actually_read)) | 2070 | if (idetape_copy_stage_to_user(tape, buf, actually_read)) |
2070 | ret = -EFAULT; | 2071 | ret = -EFAULT; |
2071 | buf += actually_read; | 2072 | buf += actually_read; |
2072 | tape->merge_stage_size -= actually_read; | 2073 | tape->merge_bh_size -= actually_read; |
2073 | count -= actually_read; | 2074 | count -= actually_read; |
2074 | } | 2075 | } |
2075 | while (count >= tape->buffer_size) { | 2076 | while (count >= tape->buffer_size) { |
@@ -2090,7 +2091,7 @@ static ssize_t idetape_chrdev_read(struct file *file, char __user *buf, | |||
2090 | if (idetape_copy_stage_to_user(tape, buf, temp)) | 2091 | if (idetape_copy_stage_to_user(tape, buf, temp)) |
2091 | ret = -EFAULT; | 2092 | ret = -EFAULT; |
2092 | actually_read += temp; | 2093 | actually_read += temp; |
2093 | tape->merge_stage_size = bytes_read-temp; | 2094 | tape->merge_bh_size = bytes_read-temp; |
2094 | } | 2095 | } |
2095 | finish: | 2096 | finish: |
2096 | if (!actually_read && test_bit(IDETAPE_FLAG_FILEMARK, &tape->flags)) { | 2097 | if (!actually_read && test_bit(IDETAPE_FLAG_FILEMARK, &tape->flags)) { |
@@ -2122,10 +2123,10 @@ static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, | |||
2122 | if (tape->chrdev_dir != IDETAPE_DIR_WRITE) { | 2123 | if (tape->chrdev_dir != IDETAPE_DIR_WRITE) { |
2123 | if (tape->chrdev_dir == IDETAPE_DIR_READ) | 2124 | if (tape->chrdev_dir == IDETAPE_DIR_READ) |
2124 | ide_tape_discard_merge_buffer(drive, 1); | 2125 | ide_tape_discard_merge_buffer(drive, 1); |
2125 | if (tape->merge_stage || tape->merge_stage_size) { | 2126 | if (tape->merge_stage || tape->merge_bh_size) { |
2126 | printk(KERN_ERR "ide-tape: merge_stage_size " | 2127 | printk(KERN_ERR "ide-tape: merge_bh_size " |
2127 | "should be 0 now\n"); | 2128 | "should be 0 now\n"); |
2128 | tape->merge_stage_size = 0; | 2129 | tape->merge_bh_size = 0; |
2129 | } | 2130 | } |
2130 | tape->merge_stage = ide_tape_kmalloc_buffer(tape, 0, 0); | 2131 | tape->merge_stage = ide_tape_kmalloc_buffer(tape, 0, 0); |
2131 | if (!tape->merge_stage) | 2132 | if (!tape->merge_stage) |
@@ -2153,23 +2154,23 @@ static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, | |||
2153 | } | 2154 | } |
2154 | if (count == 0) | 2155 | if (count == 0) |
2155 | return (0); | 2156 | return (0); |
2156 | if (tape->merge_stage_size) { | 2157 | if (tape->merge_bh_size) { |
2157 | if (tape->merge_stage_size >= tape->buffer_size) { | 2158 | if (tape->merge_bh_size >= tape->buffer_size) { |
2158 | printk(KERN_ERR "ide-tape: bug: merge buf too big\n"); | 2159 | printk(KERN_ERR "ide-tape: bug: merge buf too big\n"); |
2159 | tape->merge_stage_size = 0; | 2160 | tape->merge_bh_size = 0; |
2160 | } | 2161 | } |
2161 | actually_written = min((unsigned int) | 2162 | actually_written = min((unsigned int) |
2162 | (tape->buffer_size - tape->merge_stage_size), | 2163 | (tape->buffer_size - tape->merge_bh_size), |
2163 | (unsigned int)count); | 2164 | (unsigned int)count); |
2164 | if (idetape_copy_stage_from_user(tape, buf, actually_written)) | 2165 | if (idetape_copy_stage_from_user(tape, buf, actually_written)) |
2165 | ret = -EFAULT; | 2166 | ret = -EFAULT; |
2166 | buf += actually_written; | 2167 | buf += actually_written; |
2167 | tape->merge_stage_size += actually_written; | 2168 | tape->merge_bh_size += actually_written; |
2168 | count -= actually_written; | 2169 | count -= actually_written; |
2169 | 2170 | ||
2170 | if (tape->merge_stage_size == tape->buffer_size) { | 2171 | if (tape->merge_bh_size == tape->buffer_size) { |
2171 | ssize_t retval; | 2172 | ssize_t retval; |
2172 | tape->merge_stage_size = 0; | 2173 | tape->merge_bh_size = 0; |
2173 | retval = idetape_add_chrdev_write_request(drive, ctl); | 2174 | retval = idetape_add_chrdev_write_request(drive, ctl); |
2174 | if (retval <= 0) | 2175 | if (retval <= 0) |
2175 | return (retval); | 2176 | return (retval); |
@@ -2190,7 +2191,7 @@ static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, | |||
2190 | actually_written += count; | 2191 | actually_written += count; |
2191 | if (idetape_copy_stage_from_user(tape, buf, count)) | 2192 | if (idetape_copy_stage_from_user(tape, buf, count)) |
2192 | ret = -EFAULT; | 2193 | ret = -EFAULT; |
2193 | tape->merge_stage_size += count; | 2194 | tape->merge_bh_size += count; |
2194 | } | 2195 | } |
2195 | return ret ? ret : actually_written; | 2196 | return ret ? ret : actually_written; |
2196 | } | 2197 | } |
@@ -2361,7 +2362,7 @@ static int idetape_chrdev_ioctl(struct inode *inode, struct file *file, | |||
2361 | idetape_flush_tape_buffers(drive); | 2362 | idetape_flush_tape_buffers(drive); |
2362 | } | 2363 | } |
2363 | if (cmd == MTIOCGET || cmd == MTIOCPOS) { | 2364 | if (cmd == MTIOCGET || cmd == MTIOCPOS) { |
2364 | block_offset = tape->merge_stage_size / | 2365 | block_offset = tape->merge_bh_size / |
2365 | (tape->blk_size * tape->user_bs_factor); | 2366 | (tape->blk_size * tape->user_bs_factor); |
2366 | position = idetape_read_position(drive); | 2367 | position = idetape_read_position(drive); |
2367 | if (position < 0) | 2368 | if (position < 0) |
@@ -2790,7 +2791,7 @@ static void ide_tape_release(struct kref *kref) | |||
2790 | ide_drive_t *drive = tape->drive; | 2791 | ide_drive_t *drive = tape->drive; |
2791 | struct gendisk *g = tape->disk; | 2792 | struct gendisk *g = tape->disk; |
2792 | 2793 | ||
2793 | BUG_ON(tape->merge_stage_size); | 2794 | BUG_ON(tape->merge_bh_size); |
2794 | 2795 | ||
2795 | drive->dsc_overlap = 0; | 2796 | drive->dsc_overlap = 0; |
2796 | drive->driver_data = NULL; | 2797 | drive->driver_data = NULL; |