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/

Reply via email to