Jörn
--
With a PC, I always felt limited by the software available. On Unix,
I am limited only by my knowledge.
-- Peter J. Schoenster
Signed-off-by: Jörn Engel <[email protected]>
---
fs/squashfs/inode.c | 16 ++++++++++------
include/linux/squashfs_fs_sb.h | 6 +++---
2 files changed, 13 insertions(+), 9 deletions(-)
--- linux-2.6.12-rc3cow/fs/squashfs/inode.c~squashfs_cu5 2005-04-22 07:00:14.806604672 +0200
+++ linux-2.6.12-rc3cow/fs/squashfs/inode.c 2005-04-22 09:17:47.387021752 +0200
@@ -58,7 +58,7 @@ static struct dentry *squashfs_lookup(st
struct nameidata *);
static struct inode *squashfs_iget(struct super_block *s, squashfs_inode inode);
static unsigned int read_blocklist(struct inode *inode, int index,
- int readahead_blks, char *block_list,
+ int readahead_blks, void *block_list,
unsigned short **block_p, unsigned int *bsize);
static struct super_block *squashfs_get_sb(struct file_system_type *, int,
const char *, void *);
@@ -1116,7 +1116,7 @@ skip_read:
#define SIZE 256
static unsigned int read_blocklist(struct inode *inode, int index,
- int readahead_blks, char *block_list,
+ int readahead_blks, void *_block_list,
unsigned short **block_p, unsigned int *bsize)
{
squashfs_sb_info *msBlk = inode->i_sb->s_fs_info;
@@ -1125,6 +1125,7 @@ static unsigned int read_blocklist(struc
int block_ptr = SQUASHFS_I(inode)->block_list_start;
int offset = SQUASHFS_I(inode)->offset;
unsigned int block = SQUASHFS_I(inode)->start_block;
+ unsigned int *block_list = _block_list;
for (;;) {
int blocks = (index + readahead_blks - i);
@@ -1136,7 +1137,9 @@ static unsigned int read_blocklist(struc
}
if (msBlk->swap) {
- unsigned char sblock_list[SIZE];
+ unsigned int *sblock_list = kmalloc(SIZE, GFP_KERNEL);
+ if (!sblock_list)
+ return 0;
if (!squashfs_get_cached_block(inode->i_sb,
sblock_list, block_ptr,
@@ -1144,10 +1147,11 @@ static unsigned int read_blocklist(struc
&offset)) {
ERROR("Unable to read block list [%d:%x]\n",
block_ptr, offset);
+ kfree(sblock_list);
return 0;
}
- SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
- ((unsigned int *)sblock_list), blocks);
+ SQUASHFS_SWAP_INTS(block_list, sblock_list, blocks);
+ kfree(sblock_list);
} else
if (!squashfs_get_cached_block(inode->i_sb,
block_list, block_ptr, offset,
@@ -1158,7 +1162,7 @@ static unsigned int read_blocklist(struc
return 0;
}
- for (block_listp = (unsigned int *) block_list; i < index &&
+ for (block_listp = block_list; i < index &&
blocks; i ++, block_listp ++, blocks --)
block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
--- linux-2.6.12-rc3cow/include/linux/squashfs_fs_sb.h~squashfs_cu5 2005-04-22 07:00:14.693621848 +0200
+++ linux-2.6.12-rc3cow/include/linux/squashfs_fs_sb.h 2005-04-22 09:17:43.833561960 +0200
@@ -59,10 +59,10 @@ typedef struct squashfs_sb_info {
struct semaphore fragment_mutex;
wait_queue_head_t waitq;
wait_queue_head_t fragment_wait_queue;
- struct inode *(*iget)(struct super_block *s, squashfs_inode \
+ struct inode *(*iget)(struct super_block *s, squashfs_inode
inode);
- unsigned int (*read_blocklist)(struct inode *inode, int \
- index, int readahead_blks, char *block_list, \
+ unsigned int (*read_blocklist)(struct inode *inode, int
+ index, int readahead_blks, void *block_list,
unsigned short **block_p, unsigned int *bsize);
} squashfs_sb_info;
#endif
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]