* [PATCH] remove some usesless casts
@ 2005-04-20 6:55 Jörn Engel
2005-04-20 15:20 ` Phillip Lougher
2005-04-21 1:08 ` [PATCH 2/4] squashfs: kmalloc (less stack, less casts) Jörn Engel
0 siblings, 2 replies; 18+ messages in thread
From: Jörn Engel @ 2005-04-20 6:55 UTC (permalink / raw)
To: Phillip Lougher; +Cc: linux-kernel
Squashfs is extremely cast-happy. This patch makes it less so.
Jörn
--
If you're willing to restrict the flexibility of your approach,
you can almost always do something better.
-- John Carmack
Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de>
---
fs/squashfs/inode.c | 63 ++++++++++++++++++++++------------------------------
1 files changed, 27 insertions(+), 36 deletions(-)
--- linux-2.6.12-rc2cow/fs/squashfs/inode.c~squashfs_cu1 2005-04-20 07:52:46.000000000 +0200
+++ linux-2.6.12-rc2cow/fs/squashfs/inode.c 2005-04-20 08:11:10.254367656 +0200
@@ -111,7 +111,7 @@ struct inode_operations squashfs_dir_ino
static struct buffer_head *get_block_length(struct super_block *s,
int *cur_index, int *offset, int *c_byte)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
unsigned short temp;
struct buffer_head *bh;
@@ -176,7 +176,7 @@ unsigned int squashfs_read_data(struct s
unsigned int index, unsigned int length,
unsigned int *next_index)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
msBlk->devblksize_log2) + 2];
unsigned int offset = index & ((1 << msBlk->devblksize_log2) - 1);
@@ -285,7 +285,7 @@ int squashfs_get_cached_block(struct sup
int length, unsigned int *next_block,
unsigned int *next_offset)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
int n, i, bytes, return_length = length;
unsigned int next_index;
@@ -390,7 +390,7 @@ static int get_fragment_location(struct
unsigned int *fragment_start_block,
unsigned int *fragment_size)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
unsigned int start_block =
msBlk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
@@ -434,7 +434,7 @@ static struct squashfs_fragment_cache *g
int length)
{
int i, n;
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
for (;;) {
down(&msBlk->fragment_mutex);
@@ -466,8 +466,7 @@ static struct squashfs_fragment_cache *g
SQUASHFS_CACHED_FRAGMENTS;
if (msBlk->fragment[i].data == NULL)
- if (!(msBlk->fragment[i].data =
- (unsigned char *) kmalloc
+ if (!(msBlk->fragment[i].data = kmalloc
(SQUASHFS_FILE_MAX_SIZE,
GFP_KERNEL))) {
ERROR("Failed to allocate fragment "
@@ -509,7 +508,7 @@ static struct squashfs_fragment_cache *g
static struct inode *squashfs_new_inode(struct super_block *s,
squashfs_base_inode_header *inodeb, unsigned int ino)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
struct inode *i = new_inode(s);
@@ -535,7 +534,7 @@ static struct inode *squashfs_new_inode(
static struct inode *squashfs_iget(struct super_block *s, squashfs_inode inode)
{
struct inode *i;
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
unsigned int block = SQUASHFS_INODE_BLK(inode) +
sBlk->inode_table_start;
@@ -837,13 +836,12 @@ static int squashfs_fill_super(struct su
TRACE("Entered squashfs_read_superblock\n");
- if (!(s->s_fs_info = (void *) kmalloc(sizeof(squashfs_sb_info),
- GFP_KERNEL))) {
+ if (!(s->s_fs_info = kmalloc(sizeof(squashfs_sb_info), GFP_KERNEL))) {
ERROR("Failed to allocate superblock\n");
return -ENOMEM;
}
memset(s->s_fs_info, 0, sizeof(squashfs_sb_info));
- msBlk = (squashfs_sb_info *) s->s_fs_info;
+ msBlk = s->s_fs_info;
sBlk = &msBlk->sBlk;
msBlk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
@@ -914,8 +912,7 @@ static int squashfs_fill_super(struct su
s->s_op = &squashfs_ops;
/* Init inode_table block pointer array */
- if (!(msBlk->block_cache = (squashfs_cache *)
- kmalloc(sizeof(squashfs_cache) *
+ if (!(msBlk->block_cache = kmalloc(sizeof(squashfs_cache) *
SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
ERROR("Failed to allocate block cache\n");
goto failed_mount;
@@ -931,15 +928,14 @@ static int squashfs_fill_super(struct su
SQUASHFS_METADATA_SIZE :
sBlk->block_size;
- if (!(msBlk->read_data = (char *) kmalloc(msBlk->read_size,
- GFP_KERNEL))) {
+ if (!(msBlk->read_data = kmalloc(msBlk->read_size, GFP_KERNEL))) {
ERROR("Failed to allocate read_data block\n");
goto failed_mount;
}
/* Allocate read_page block */
if (sBlk->block_size > PAGE_CACHE_SIZE) {
- if (!(msBlk->read_page = (char *) kmalloc(sBlk->block_size,
+ if (!(msBlk->read_page = kmalloc(sBlk->block_size,
GFP_KERNEL))) {
ERROR("Failed to allocate read_page block\n");
goto failed_mount;
@@ -948,7 +944,7 @@ static int squashfs_fill_super(struct su
msBlk->read_page = NULL;
/* Allocate uid and gid tables */
- if (!(msBlk->uid = (squashfs_uid *) kmalloc((sBlk->no_uids +
+ if (!(msBlk->uid = kmalloc((sBlk->no_uids +
sBlk->no_guids) * sizeof(squashfs_uid),
GFP_KERNEL))) {
ERROR("Failed to allocate uid/gid table\n");
@@ -982,9 +978,7 @@ static int squashfs_fill_super(struct su
if (sBlk->s_major == 1 && squashfs_1_0_supported(msBlk))
goto allocate_root;
- if (!(msBlk->fragment = (struct squashfs_fragment_cache *)
- kmalloc(sizeof(struct
- squashfs_fragment_cache) *
+ if (!(msBlk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
SQUASHFS_CACHED_FRAGMENTS,
GFP_KERNEL))) {
ERROR("Failed to allocate fragment block cache\n");
@@ -1000,8 +994,7 @@ static int squashfs_fill_super(struct su
msBlk->next_fragment = 0;
/* Allocate fragment index table */
- if (!(msBlk->fragment_index = (squashfs_fragment_index *)
- kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
+ if (!(msBlk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
(sBlk->fragments), GFP_KERNEL))) {
ERROR("Failed to allocate uid/gid table\n");
goto failed_mount;
@@ -1127,7 +1120,7 @@ static unsigned int read_blocklist(struc
int readahead_blks, char *block_list,
unsigned short **block_p, unsigned int *bsize)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)inode->i_sb->s_fs_info;
+ squashfs_sb_info *msBlk = inode->i_sb->s_fs_info;
unsigned int *block_listp;
int i = 0;
int block_ptr = SQUASHFS_I(inode)->block_list_start;
@@ -1182,7 +1175,7 @@ static unsigned int read_blocklist(struc
static int squashfs_readpage(struct file *file, struct page *page)
{
struct inode *inode = page->mapping->host;
- squashfs_sb_info *msBlk = (squashfs_sb_info *)inode->i_sb->s_fs_info;
+ squashfs_sb_info *msBlk = inode->i_sb->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
unsigned char block_list[SIZE];
unsigned int bsize, block, i = 0, bytes = 0, byte_offset = 0;
@@ -1297,7 +1290,7 @@ skip_read:
static int squashfs_readpage4K(struct file *file, struct page *page)
{
struct inode *inode = page->mapping->host;
- squashfs_sb_info *msBlk = (squashfs_sb_info *)inode->i_sb->s_fs_info;
+ squashfs_sb_info *msBlk = inode->i_sb->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
unsigned char block_list[SIZE];
unsigned int bsize, block, bytes = 0;
@@ -1359,7 +1352,7 @@ static int get_dir_index_using_offset(st
unsigned int index_offset, int i_count,
long long f_pos)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
int i, length = 0;
squashfs_dir_index index;
@@ -1406,7 +1399,7 @@ static int get_dir_index_using_name(stru
unsigned int index_offset, int i_count,
const char *name, int size)
{
- squashfs_sb_info *msBlk = (squashfs_sb_info *)s->s_fs_info;
+ squashfs_sb_info *msBlk = s->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
int i, length = 0;
char buffer[sizeof(squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
@@ -1453,7 +1446,7 @@ static int get_dir_index_using_name(stru
static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
{
struct inode *i = file->f_dentry->d_inode;
- squashfs_sb_info *msBlk = (squashfs_sb_info *)i->i_sb->s_fs_info;
+ squashfs_sb_info *msBlk = i->i_sb->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
int next_block = SQUASHFS_I(i)->start_block +
sBlk->directory_table_start,
@@ -1562,7 +1555,7 @@ static struct dentry *squashfs_lookup(st
const unsigned char *name = dentry->d_name.name;
int len = dentry->d_name.len;
struct inode *inode = NULL;
- squashfs_sb_info *msBlk = (squashfs_sb_info *)i->i_sb->s_fs_info;
+ squashfs_sb_info *msBlk = i->i_sb->s_fs_info;
squashfs_super_block *sBlk = &msBlk->sBlk;
int next_block = SQUASHFS_I(i)->start_block +
sBlk->directory_table_start,
@@ -1666,7 +1659,7 @@ static void squashfs_put_super(struct su
int i;
if (s->s_fs_info) {
- squashfs_sb_info *sbi = (squashfs_sb_info *) s->s_fs_info;
+ squashfs_sb_info *sbi = s->s_fs_info;
if (sbi->block_cache)
for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
if (sbi->block_cache[i].block !=
@@ -1703,8 +1696,7 @@ static int __init init_squashfs_fs(void)
printk(KERN_INFO "squashfs: version 2.1 (2005/03/14) "
"Phillip Lougher\n");
- if (!(stream.workspace = (char *)
- vmalloc(zlib_inflate_workspacesize()))) {
+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
ERROR("Failed to allocate zlib workspace\n");
destroy_inodecache();
return -ENOMEM;
@@ -1733,8 +1725,7 @@ static kmem_cache_t * squashfs_inode_cac
static struct inode *squashfs_alloc_inode(struct super_block *sb)
{
struct squashfs_inode_info *ei;
- ei = (struct squashfs_inode_info *)
- kmem_cache_alloc(squashfs_inode_cachep, SLAB_KERNEL);
+ ei = kmem_cache_alloc(squashfs_inode_cachep, SLAB_KERNEL);
if (!ei)
return NULL;
return &ei->vfs_inode;
@@ -1749,7 +1740,7 @@ static void squashfs_destroy_inode(struc
static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
{
- struct squashfs_inode_info *ei = (struct squashfs_inode_info *) foo;
+ struct squashfs_inode_info *ei = foo;
if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
SLAB_CTOR_CONSTRUCTOR)
^ permalink raw reply [flat|nested] 18+ messages in thread* Re: [PATCH] remove some usesless casts 2005-04-20 6:55 [PATCH] remove some usesless casts Jörn Engel @ 2005-04-20 15:20 ` Phillip Lougher 2005-04-20 21:33 ` Jörn Engel 2005-04-21 1:08 ` [PATCH 2/4] squashfs: kmalloc (less stack, less casts) Jörn Engel 1 sibling, 1 reply; 18+ messages in thread From: Phillip Lougher @ 2005-04-20 15:20 UTC (permalink / raw) To: Jörn Engel; +Cc: linux-kernel Jörn Engel wrote: > Squashfs is extremely cast-happy. This patch makes it less so. > > Jörn > Hi, Thanks for the patch. Unnecessary casts were one of the things mentioned when I submitted the patches to the LKML, and therefore I suspect most of them have been already fixed (but I will apply your patch to check). I will send revised patches to the LKML soon, most of the issues raised by the comments have been fixed, the current delay is being caused by the 4GB limit re-work. Regards Phillip ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] remove some usesless casts 2005-04-20 15:20 ` Phillip Lougher @ 2005-04-20 21:33 ` Jörn Engel 2005-04-20 20:51 ` Phillip Lougher 0 siblings, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-20 21:33 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel On Wed, 20 April 2005 16:20:10 +0100, Phillip Lougher wrote: > Jörn Engel wrote: > >Squashfs is extremely cast-happy. This patch makes it less so. > > Thanks for the patch. Unnecessary casts were one of the things > mentioned when I submitted the patches to the LKML, and therefore I > suspect most of them have been already fixed (but I will apply your > patch to check). Your definition of _unnecessary_ casts may differ from mine. Basically, every cast is unnecessary, except for maybe one or two - if that many. > I will send revised patches to the LKML soon, most of the issues raised > by the comments have been fixed, the current delay is being caused by > the 4GB limit re-work. There are three more patches in my queue, which I'll send after first coffee or so. After those I'll ignore squashfs for a while (until you send current code or so). Jörn -- The story so far: In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move. -- Douglas Adams ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] remove some usesless casts 2005-04-20 21:33 ` Jörn Engel @ 2005-04-20 20:51 ` Phillip Lougher 2005-04-21 1:06 ` Jörn Engel 2005-04-21 6:36 ` Pekka Enberg 0 siblings, 2 replies; 18+ messages in thread From: Phillip Lougher @ 2005-04-20 20:51 UTC (permalink / raw) To: Jörn Engel; +Cc: linux-kernel Jörn Engel wrote: > Your definition of _unnecessary_ casts may differ from mine. > Basically, every cast is unnecessary, except for maybe one or two - if > that many. > Well we agree to differ then. In my experience casts are sometimes necessary, and are often less clumsy than the alternatives (such as unions). This is probably a generational thing, the fashion today is to make languages much more strongly typechecked than before. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] remove some usesless casts 2005-04-20 20:51 ` Phillip Lougher @ 2005-04-21 1:06 ` Jörn Engel 2005-04-21 6:36 ` Pekka Enberg 1 sibling, 0 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-21 1:06 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel On Wed, 20 April 2005 21:51:15 +0100, Phillip Lougher wrote: > Jörn Engel wrote: > > >Your definition of _unnecessary_ casts may differ from mine. > >Basically, every cast is unnecessary, except for maybe one or two - if > >that many. > > Well we agree to differ then. In my experience casts are sometimes > necessary, and are often less clumsy than the alternatives (such as > unions). This is probably a generational thing, the fashion today is to > make languages much more strongly typechecked than before. I never claimed to replace the casts with unions. ;) Jörn -- Homo Sapiens is a goal, not a description. -- unknown ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] remove some usesless casts 2005-04-20 20:51 ` Phillip Lougher 2005-04-21 1:06 ` Jörn Engel @ 2005-04-21 6:36 ` Pekka Enberg 2005-04-21 6:48 ` Jörn Engel 1 sibling, 1 reply; 18+ messages in thread From: Pekka Enberg @ 2005-04-21 6:36 UTC (permalink / raw) To: Phillip Lougher; +Cc: Jörn Engel, linux-kernel, penberg Phillip, Jörn Engel wrote: > > Your definition of _unnecessary_ casts may differ from mine. > > Basically, every cast is unnecessary, except for maybe one or two - if > > that many. On 4/20/05, Phillip Lougher <phillip@lougher.demon.co.uk> wrote: > Well we agree to differ then. In my experience casts are sometimes > necessary, and are often less clumsy than the alternatives (such as > unions). This is probably a generational thing, the fashion today is to > make languages much more strongly typechecked than before. I think Jörn means that if you need an opaque data type, use void pointers (which are automatically cast to the proper type) and that all other casts are a design smell (except for the one or two special cases where you actually need them). Pekka ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] remove some usesless casts 2005-04-21 6:36 ` Pekka Enberg @ 2005-04-21 6:48 ` Jörn Engel 0 siblings, 0 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-21 6:48 UTC (permalink / raw) To: Pekka Enberg; +Cc: Phillip Lougher, linux-kernel, penberg On Thu, 21 April 2005 09:36:18 +0300, Pekka Enberg wrote: > > I think Jörn means that if you need an opaque data type, use void > pointers (which are automatically cast to the proper type) and that > all other casts are a design smell (except for the one or two special > cases where you actually need them). Two of my patches agree with you, two don't. Really, in almost all cases, casts are a Bad Idea(tm). Almost always, there is _something_ better. In some cases, this comes down to void pointers, yes. Jörn -- I can say that I spend most of my time fixing bugs even if I have lots of new features to implement in mind, but I give bugs more priority. -- Andrea Arcangeli, 2000 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 2/4] squashfs: kmalloc (less stack, less casts) 2005-04-20 6:55 [PATCH] remove some usesless casts Jörn Engel 2005-04-20 15:20 ` Phillip Lougher @ 2005-04-21 1:08 ` Jörn Engel 2005-04-21 1:10 ` [PATCH 3/4] squashfs: (void*)ify squashfs_get_cached_block Jörn Engel 1 sibling, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-21 1:08 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet. -- M.A. Jackson Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 20 +++++++++++++++----- 1 files changed, 15 insertions(+), 5 deletions(-) --- linux-2.6.12-rc2cow/fs/squashfs/inode.c~squashfs_cu2 2005-04-20 08:11:10.000000000 +0200 +++ linux-2.6.12-rc2cow/fs/squashfs/inode.c 2005-04-20 16:34:43.619956672 +0200 @@ -1453,11 +1453,14 @@ static int squashfs_readdir(struct file next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0, dir_count; squashfs_dir_header dirh; - char buffer[sizeof(squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1]; - squashfs_dir_entry *dire = (squashfs_dir_entry *) buffer; + squashfs_dir_entry *dire; TRACE("Entered squashfs_readdir [%x:%x]\n", next_block, next_offset); + dire = kmalloc(sizeof(*dire) + SQUASHFS_NAME_LEN + 1, GFP_KERNEL); + if (!dire) + return -ENOMEM; + length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, SQUASHFS_I(i)->u.s2.directory_index_start, SQUASHFS_I(i)->u.s2.directory_index_offset, @@ -1533,6 +1536,7 @@ static int squashfs_readdir(struct file squashfs_filetype_table[dire->type]) < 0) { TRACE("Filldir returned less than 0\n"); + kfree(dire); return dirs_read; } file->f_pos = length; @@ -1540,11 +1544,13 @@ static int squashfs_readdir(struct file } } + kfree(dire); return dirs_read; failed_read: ERROR("Unable to read directory block [%x:%x]\n", next_block, next_offset); + kfree(dire); return 0; } @@ -1562,12 +1568,15 @@ static struct dentry *squashfs_lookup(st next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count; squashfs_dir_header dirh; - char buffer[sizeof(squashfs_dir_entry) + SQUASHFS_NAME_LEN]; - squashfs_dir_entry *dire = (squashfs_dir_entry *) buffer; + squashfs_dir_entry *dire; int sorted = sBlk->s_major == 2 && sBlk->s_minor >= 1; TRACE("Entered squashfs_lookup [%x:%x]\n", next_block, next_offset); + dire = kmalloc(sizeof(*dire) + SQUASHFS_NAME_LEN + 1, GFP_KERNEL); + if (!dire) + return ERR_PTR(-ENOMEM); + length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, SQUASHFS_I(i)->u.s2.directory_index_start, SQUASHFS_I(i)->u.s2.directory_index_offset, @@ -1645,7 +1654,8 @@ static struct dentry *squashfs_lookup(st exit_loop: d_add(dentry, inode); - return ERR_PTR(0); + kfree(dire); + return NULL; failed_read: ERROR("Unable to read directory block [%x:%x]\n", next_block, ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 3/4] squashfs: (void*)ify squashfs_get_cached_block 2005-04-21 1:08 ` [PATCH 2/4] squashfs: kmalloc (less stack, less casts) Jörn Engel @ 2005-04-21 1:10 ` Jörn Engel 2005-04-21 1:11 ` [PATCH 4/4] squashfs: (void*)ify squashfs_read_data Jörn Engel 0 siblings, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-21 1:10 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- It's just what we asked for, but not what we want! -- anonymous Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 58 ++++++++++++++++++++++++------------------------- fs/squashfs/squashfs.h | 2 - 2 files changed, 30 insertions(+), 30 deletions(-) --- linux-2.6.12-rc2cow/fs/squashfs/inode.c~squashfs_cu3 2005-04-20 16:34:43.619956672 +0200 +++ linux-2.6.12-rc2cow/fs/squashfs/inode.c 2005-04-20 16:40:47.498638704 +0200 @@ -280,7 +280,7 @@ read_failure: } -int squashfs_get_cached_block(struct super_block *s, char *buffer, +int squashfs_get_cached_block(struct super_block *s, void *buffer, unsigned int block, unsigned int offset, int length, unsigned int *next_block, unsigned int *next_offset) @@ -399,14 +399,14 @@ static int get_fragment_location(struct if (msBlk->swap) { squashfs_fragment_entry sfragment_entry; - if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, + if (!squashfs_get_cached_block(s, &sfragment_entry, start_block, offset, sizeof(sfragment_entry), &start_block, &offset)) return 0; SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); } else - if (!squashfs_get_cached_block(s, (char *) &fragment_entry, + if (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset, sizeof(fragment_entry), &start_block, &offset)) @@ -549,14 +549,14 @@ static struct inode *squashfs_iget(struc if (msBlk->swap) { squashfs_base_inode_header sinodeb; - if (!squashfs_get_cached_block(s, (char *) &sinodeb, block, + if (!squashfs_get_cached_block(s, &sinodeb, block, offset, sizeof(sinodeb), &next_block, &next_offset)) goto failed_read; SQUASHFS_SWAP_BASE_INODE_HEADER(&inodeb, &sinodeb, sizeof(sinodeb)); } else - if (!squashfs_get_cached_block(s, (char *) &inodeb, block, + if (!squashfs_get_cached_block(s, &inodeb, block, offset, sizeof(inodeb), &next_block, &next_offset)) goto failed_read; @@ -569,7 +569,7 @@ static struct inode *squashfs_iget(struc if (msBlk->swap) { squashfs_reg_inode_header sinodep; - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &sinodep, block, offset, sizeof(sinodep), &next_block, &next_offset)) @@ -577,7 +577,7 @@ static struct inode *squashfs_iget(struc SQUASHFS_SWAP_REG_INODE_HEADER(&inodep, &sinodep); } else - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &inodep, block, offset, sizeof(inodep), &next_block, &next_offset)) @@ -624,7 +624,7 @@ static struct inode *squashfs_iget(struc if (msBlk->swap) { squashfs_dir_inode_header sinodep; - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &sinodep, block, offset, sizeof(sinodep), &next_block, &next_offset)) @@ -632,7 +632,7 @@ static struct inode *squashfs_iget(struc SQUASHFS_SWAP_DIR_INODE_HEADER(&inodep, &sinodep); } else - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &inodep, block, offset, sizeof(inodep), &next_block, &next_offset)) @@ -664,7 +664,7 @@ static struct inode *squashfs_iget(struc if (msBlk->swap) { squashfs_ldir_inode_header sinodep; - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &sinodep, block, offset, sizeof(sinodep), &next_block, &next_offset)) @@ -672,7 +672,7 @@ static struct inode *squashfs_iget(struc SQUASHFS_SWAP_LDIR_INODE_HEADER(&inodep, &sinodep); } else - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &inodep, block, offset, sizeof(inodep), &next_block, &next_offset)) @@ -708,7 +708,7 @@ static struct inode *squashfs_iget(struc if (msBlk->swap) { squashfs_symlink_inode_header sinodep; - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &sinodep, block, offset, sizeof(sinodep), &next_block, &next_offset)) @@ -716,7 +716,7 @@ static struct inode *squashfs_iget(struc SQUASHFS_SWAP_SYMLINK_INODE_HEADER(&inodep, &sinodep); } else - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &inodep, block, offset, sizeof(inodep), &next_block, &next_offset)) @@ -745,7 +745,7 @@ static struct inode *squashfs_iget(struc if (msBlk->swap) { squashfs_dev_inode_header sinodep; - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &sinodep, block, offset, sizeof(sinodep), &next_block, &next_offset)) @@ -753,7 +753,7 @@ static struct inode *squashfs_iget(struc SQUASHFS_SWAP_DEV_INODE_HEADER(&inodep, &sinodep); } else - if (!squashfs_get_cached_block(s, (char *) + if (!squashfs_get_cached_block(s, &inodep, block, offset, sizeof(inodep), &next_block, &next_offset)) @@ -1139,7 +1139,7 @@ static unsigned int read_blocklist(struc if (msBlk->swap) { unsigned char sblock_list[SIZE]; - if (!squashfs_get_cached_block(inode->i_sb, (char *) + if (!squashfs_get_cached_block(inode->i_sb, sblock_list, block_ptr, offset, blocks << 2, &block_ptr, &offset)) { @@ -1150,7 +1150,7 @@ static unsigned int read_blocklist(struc SQUASHFS_SWAP_INTS(((unsigned int *)block_list), ((unsigned int *)sblock_list), blocks); } else - if (!squashfs_get_cached_block(inode->i_sb, (char *) + if (!squashfs_get_cached_block(inode->i_sb, block_list, block_ptr, offset, blocks << 2, &block_ptr, &offset)) { @@ -1366,13 +1366,13 @@ static int get_dir_index_using_offset(st for (i = 0; i < i_count; i++) { if (msBlk->swap) { squashfs_dir_index sindex; - squashfs_get_cached_block(s, (char *) &sindex, + squashfs_get_cached_block(s, &sindex, index_start, index_offset, sizeof(sindex), &index_start, &index_offset); SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); } else - squashfs_get_cached_block(s, (char *) &index, + squashfs_get_cached_block(s, &index, index_start, index_offset, sizeof(index), &index_start, &index_offset); @@ -1414,13 +1414,13 @@ static int get_dir_index_using_name(stru for (i = 0; i < i_count; i++) { if (msBlk->swap) { squashfs_dir_index sindex; - squashfs_get_cached_block(s, (char *) &sindex, + squashfs_get_cached_block(s, &sindex, index_start, index_offset, sizeof(sindex), &index_start, &index_offset); SQUASHFS_SWAP_DIR_INDEX(index, &sindex); } else - squashfs_get_cached_block(s, (char *) index, + squashfs_get_cached_block(s, index, index_start, index_offset, sizeof(squashfs_dir_index), &index_start, &index_offset); @@ -1472,7 +1472,7 @@ static int squashfs_readdir(struct file if (msBlk->swap) { squashfs_dir_header sdirh; - if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, + if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block, next_offset, sizeof(sdirh), &next_block, &next_offset)) goto failed_read; @@ -1480,7 +1480,7 @@ static int squashfs_readdir(struct file length += sizeof(sdirh); SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); } else { - if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, + if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block, next_offset, sizeof(dirh), &next_block, &next_offset)) goto failed_read; @@ -1492,7 +1492,7 @@ static int squashfs_readdir(struct file while (dir_count--) { if (msBlk->swap) { squashfs_dir_entry sdire; - if (!squashfs_get_cached_block(i->i_sb, (char *) + if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block, next_offset, sizeof(sdire), &next_block, &next_offset)) @@ -1501,7 +1501,7 @@ static int squashfs_readdir(struct file length += sizeof(sdire); SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); } else { - if (!squashfs_get_cached_block(i->i_sb, (char *) + if (!squashfs_get_cached_block(i->i_sb, dire, next_block, next_offset, sizeof(*dire), &next_block, &next_offset)) @@ -1587,7 +1587,7 @@ static struct dentry *squashfs_lookup(st /* read directory header */ if (msBlk->swap) { squashfs_dir_header sdirh; - if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, + if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block, next_offset, sizeof(sdirh), &next_block, &next_offset)) goto failed_read; @@ -1595,7 +1595,7 @@ static struct dentry *squashfs_lookup(st length += sizeof(sdirh); SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); } else { - if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, + if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block, next_offset, sizeof(dirh), &next_block, &next_offset)) goto failed_read; @@ -1607,7 +1607,7 @@ static struct dentry *squashfs_lookup(st while (dir_count--) { if (msBlk->swap) { squashfs_dir_entry sdire; - if (!squashfs_get_cached_block(i->i_sb, (char *) + if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block,next_offset, sizeof(sdire), &next_block, &next_offset)) @@ -1616,7 +1616,7 @@ static struct dentry *squashfs_lookup(st length += sizeof(sdire); SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); } else { - if (!squashfs_get_cached_block(i->i_sb, (char *) + if (!squashfs_get_cached_block(i->i_sb, dire, next_block,next_offset, sizeof(*dire), &next_block, &next_offset)) --- linux-2.6.12-rc2cow/fs/squashfs/squashfs.h~squashfs_cu3 2005-04-20 07:52:50.000000000 +0200 +++ linux-2.6.12-rc2cow/fs/squashfs/squashfs.h 2005-04-20 16:37:15.900806464 +0200 @@ -40,7 +40,7 @@ extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, unsigned int index, unsigned int length, unsigned int *next_index); -extern int squashfs_get_cached_block(struct super_block *s, char *buffer, +extern int squashfs_get_cached_block(struct super_block *s, void *buffer, unsigned int block, unsigned int offset, int length, unsigned int *next_block, unsigned int *next_offset); ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 4/4] squashfs: (void*)ify squashfs_read_data 2005-04-21 1:10 ` [PATCH 3/4] squashfs: (void*)ify squashfs_get_cached_block Jörn Engel @ 2005-04-21 1:11 ` Jörn Engel 2005-04-22 7:20 ` [PATCH 5/10] squashfs: (void*)ify read_blocklist Jörn Engel 0 siblings, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-21 1:11 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- Anything that can go wrong, will. -- Finagle's Law Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 11 +++++------ fs/squashfs/squashfs.h | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) --- linux-2.6.12-rc2cow/fs/squashfs/inode.c~squashfs_cu4 2005-04-20 16:40:47.498638704 +0200 +++ linux-2.6.12-rc2cow/fs/squashfs/inode.c 2005-04-20 22:44:04.723347592 +0200 @@ -172,7 +172,7 @@ static struct buffer_head *get_block_len } -unsigned int squashfs_read_data(struct super_block *s, char *buffer, +unsigned int squashfs_read_data(struct super_block *s, void *buffer, unsigned int index, unsigned int length, unsigned int *next_index) { @@ -324,7 +324,6 @@ int squashfs_get_cached_block(struct sup if (msBlk->block_cache[i].block == SQUASHFS_INVALID_BLK) { if (!(msBlk->block_cache[i].data = - (unsigned char *) kmalloc(SQUASHFS_METADATA_SIZE, GFP_KERNEL))) { ERROR("Failed to allocate cache" @@ -854,7 +853,7 @@ static int squashfs_fill_super(struct su init_waitqueue_head(&msBlk->waitq); init_waitqueue_head(&msBlk->fragment_wait_queue); - if (!squashfs_read_data(s, (char *) sBlk, SQUASHFS_START, + if (!squashfs_read_data(s, sBlk, SQUASHFS_START, sizeof(squashfs_super_block) | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) { SERROR("unable to read superblock\n"); @@ -955,7 +954,7 @@ static int squashfs_fill_super(struct su if (msBlk->swap) { squashfs_uid suid[sBlk->no_uids + sBlk->no_guids]; - if (!squashfs_read_data(s, (char *) &suid, sBlk->uid_start, + if (!squashfs_read_data(s, &suid, sBlk->uid_start, ((sBlk->no_uids + sBlk->no_guids) * sizeof(squashfs_uid)) | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) { @@ -966,7 +965,7 @@ static int squashfs_fill_super(struct su SQUASHFS_SWAP_DATA(msBlk->uid, suid, (sBlk->no_uids + sBlk->no_guids), (sizeof(squashfs_uid) * 8)); } else - if (!squashfs_read_data(s, (char *) msBlk->uid, sBlk->uid_start, + if (!squashfs_read_data(s, msBlk->uid, sBlk->uid_start, ((sBlk->no_uids + sBlk->no_guids) * sizeof(squashfs_uid)) | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) { @@ -1001,7 +1000,7 @@ static int squashfs_fill_super(struct su } if (SQUASHFS_FRAGMENT_INDEX_BYTES(sBlk->fragments) && - !squashfs_read_data(s, (char *) + !squashfs_read_data(s, msBlk->fragment_index, sBlk->fragment_table_start, SQUASHFS_FRAGMENT_INDEX_BYTES --- linux-2.6.12-rc2cow/fs/squashfs/squashfs.h~squashfs_cu4 2005-04-20 16:37:15.900806464 +0200 +++ linux-2.6.12-rc2cow/fs/squashfs/squashfs.h 2005-04-20 22:42:45.917327928 +0200 @@ -37,7 +37,7 @@ #define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) -extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, +extern unsigned int squashfs_read_data(struct super_block *s, void *buffer, unsigned int index, unsigned int length, unsigned int *next_index); extern int squashfs_get_cached_block(struct super_block *s, void *buffer, ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 5/10] squashfs: (void*)ify read_blocklist 2005-04-21 1:11 ` [PATCH 4/4] squashfs: (void*)ify squashfs_read_data Jörn Engel @ 2005-04-22 7:20 ` Jörn Engel 2005-04-22 7:22 ` [PATCH 6/10] squashfs: conserve stack, remove casts Jörn Engel 0 siblings, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:20 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel 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 <joern@wohnheim.fh-wedel.de> --- 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 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 6/10] squashfs: conserve stack, remove casts 2005-04-22 7:20 ` [PATCH 5/10] squashfs: (void*)ify read_blocklist Jörn Engel @ 2005-04-22 7:22 ` Jörn Engel 2005-04-22 7:22 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel 0 siblings, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:22 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- All art is but imitation of nature. -- Lucius Annaeus Seneca Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) --- linux-2.6.12-rc3cow/fs/squashfs/inode.c~squashfs_cu6 2005-04-22 07:21:11.523554656 +0200 +++ linux-2.6.12-rc3cow/fs/squashfs/inode.c 2005-04-22 09:17:45.607292312 +0200 @@ -1405,12 +1405,15 @@ static int get_dir_index_using_name(stru squashfs_sb_info *msBlk = s->s_fs_info; squashfs_super_block *sBlk = &msBlk->sBlk; int i, length = 0; - char buffer[sizeof(squashfs_dir_index) + SQUASHFS_NAME_LEN + 1]; - squashfs_dir_index *index = (squashfs_dir_index *) buffer; + squashfs_dir_index *index; char str[SQUASHFS_NAME_LEN + 1]; TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); + index = kmalloc(sizeof(*index) + SQUASHFS_NAME_LEN + 1, GFP_KERNEL); + if (!index) + return -ENOMEM; + strncpy(str, name, size); str[size] = '\0'; @@ -1442,6 +1445,7 @@ static int get_dir_index_using_name(stru } *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; + kfree(index); return length; } ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 6/10] squashfs: remove one cast 2005-04-22 7:22 ` [PATCH 6/10] squashfs: conserve stack, remove casts Jörn Engel @ 2005-04-22 7:22 ` Jörn Engel 2005-04-22 7:23 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel 2005-04-22 7:26 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel 0 siblings, 2 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:22 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- /* Keep these two variables together */ int bar; Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) --- linux-2.6.12-rc3cow/fs/squashfs/inode.c~squashfs_cu7 2005-04-22 07:25:24.146150184 +0200 +++ linux-2.6.12-rc3cow/fs/squashfs/inode.c 2005-04-22 09:17:43.831562264 +0200 @@ -1050,7 +1050,8 @@ failed_mount: static int squashfs_statfs(struct super_block *s, struct kstatfs *buf) { - squashfs_super_block *sBlk = &((squashfs_sb_info *)s->s_fs_info)->sBlk; + squashfs_sb_info *sb = s->s_fs_info; + squashfs_super_block *sBlk = &sb->sBlk; TRACE("Entered squashfs_statfs\n"); ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 8/10] squashfs: add swabbing infrastructure 2005-04-22 7:22 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel @ 2005-04-22 7:23 ` Jörn Engel 2005-04-22 7:24 ` [PATCH 9/10] squashfs: remove some more casts Jörn Engel 2005-04-22 7:52 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel 2005-04-22 7:26 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel 1 sibling, 2 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:23 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- Correctness comes second. Features come third. Performance comes last. Maintainability is needed for all of them. Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 16 ++++++++++++++++ include/linux/squashfs_fs_sb.h | 3 +++ 2 files changed, 19 insertions(+) --- linux-2.6.12-rc3cow/fs/squashfs/inode.c~squashfs_cu8 2005-04-22 08:09:25.993528336 +0200 +++ linux-2.6.12-rc3cow/fs/squashfs/inode.c 2005-04-22 09:17:42.136819904 +0200 @@ -43,6 +43,16 @@ #include <linux/vmalloc.h> #include "squashfs.h" + +#define SQUASHFS_SWAB(XX) \ +u##XX squashfs_swab##XX(u##XX x) { return swab##XX(x); } \ +u##XX squashfs_ident##XX(u##XX x) { return x; } + +SQUASHFS_SWAB(16) +SQUASHFS_SWAB(32) +SQUASHFS_SWAB(64) + + static void squashfs_put_super(struct super_block *); static int squashfs_statfs(struct super_block *, struct kstatfs *); static int squashfs_symlink_readpage(struct file *file, struct page *page); @@ -862,6 +872,9 @@ static int squashfs_fill_super(struct su /* Check it is a SQUASHFS superblock */ msBlk->swap = 0; + msBlk->swab16 = squashfs_ident16; + msBlk->swab32 = squashfs_ident32; + msBlk->swab64 = squashfs_ident64; if ((s->s_magic = sBlk->s_magic) != SQUASHFS_MAGIC) { if (sBlk->s_magic == SQUASHFS_MAGIC_SWAP) { squashfs_super_block sblk; @@ -872,6 +885,9 @@ static int squashfs_fill_super(struct su SQUASHFS_SWAP_SUPER_BLOCK(&sblk, sBlk); memcpy(sBlk, &sblk, sizeof(squashfs_super_block)); msBlk->swap = 1; + msBlk->swab16 = squashfs_swab16; + msBlk->swab32 = squashfs_swab32; + msBlk->swab64 = squashfs_swab64; } else { SERROR("Can't find a SQUASHFS superblock on %s\n", bdevname(s->s_bdev, b)); --- linux-2.6.12-rc3cow/include/linux/squashfs_fs_sb.h~squashfs_cu8 2005-04-22 07:13:33.526180840 +0200 +++ linux-2.6.12-rc3cow/include/linux/squashfs_fs_sb.h 2005-04-22 08:54:52.891976760 +0200 @@ -44,6 +44,9 @@ typedef struct squashfs_sb_info { int devblksize; int devblksize_log2; int swap; + u16 (*swab16)(u16); + u32 (*swab32)(u32); + u64 (*swab64)(u64); squashfs_cache *block_cache; struct squashfs_fragment_cache *fragment; int next_cache; ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 9/10] squashfs: remove some more casts 2005-04-22 7:23 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel @ 2005-04-22 7:24 ` Jörn Engel 2005-04-22 7:25 ` [PATCH 9/10] squashfs: first use of swabbing Jörn Engel 2005-04-22 7:52 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel 1 sibling, 1 reply; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:24 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- Ninety percent of everything is crap. -- Sturgeon's Law Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 32 ++++++++++++++------------------ 1 files changed, 14 insertions(+), 18 deletions(-) --- linux-2.6.12-rc3cow/fs/squashfs/inode.c~squashfs_cu9 2005-04-22 08:53:27.741921536 +0200 +++ linux-2.6.12-rc3cow/fs/squashfs/inode.c 2005-04-22 09:17:39.795175888 +0200 @@ -124,39 +124,35 @@ static struct buffer_head *get_block_len squashfs_sb_info *msBlk = s->s_fs_info; unsigned short temp; struct buffer_head *bh; + unsigned char *data; if (!(bh = sb_bread(s, *cur_index))) return NULL; if (msBlk->devblksize - *offset == 1) { + data = bh->b_data; if (msBlk->swap) - ((unsigned char *) &temp)[1] = *((unsigned char *) - (bh->b_data + *offset)); + ((unsigned char *) &temp)[1] = data[*offset]; else - ((unsigned char *) &temp)[0] = *((unsigned char *) - (bh->b_data + *offset)); + ((unsigned char *) &temp)[0] = data[*offset]; brelse(bh); if (!(bh = sb_bread(s, ++(*cur_index)))) return NULL; + data = bh->b_data; if (msBlk->swap) - ((unsigned char *) &temp)[0] = *((unsigned char *) - bh->b_data); + ((unsigned char *) &temp)[0] = data[0]; else - ((unsigned char *) &temp)[1] = *((unsigned char *) - bh->b_data); + ((unsigned char *) &temp)[1] = data[0]; *c_byte = temp; *offset = 1; } else { + data = bh->b_data; if (msBlk->swap) { - ((unsigned char *) &temp)[1] = *((unsigned char *) - (bh->b_data + *offset)); - ((unsigned char *) &temp)[0] = *((unsigned char *) - (bh->b_data + *offset + 1)); + ((unsigned char *) &temp)[1] = data[*offset]; + ((unsigned char *) &temp)[0] = data[*offset + 1]; } else { - ((unsigned char *) &temp)[0] = *((unsigned char *) - (bh->b_data + *offset)); - ((unsigned char *) &temp)[1] = *((unsigned char *) - (bh->b_data + *offset + 1)); + ((unsigned char *) &temp)[0] = data[*offset]; + ((unsigned char *) &temp)[1] = data[*offset + 1]; } *c_byte = temp; *offset += 2; @@ -169,8 +165,8 @@ static struct buffer_head *get_block_len return NULL; *offset = 0; } - if (*((unsigned char *) (bh->b_data + *offset)) != - SQUASHFS_MARKER_BYTE) { + data = bh->b_data; + if (data[*offset] != SQUASHFS_MARKER_BYTE) { ERROR("Metadata block marker corrupt @ %x\n", *cur_index); brelse(bh); ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 9/10] squashfs: first use of swabbing 2005-04-22 7:24 ` [PATCH 9/10] squashfs: remove some more casts Jörn Engel @ 2005-04-22 7:25 ` Jörn Engel 0 siblings, 0 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:25 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel Jörn -- To recognize individual spam features you have to try to get into the mind of the spammer, and frankly I want to spend as little time inside the minds of spammers as possible. -- Paul Graham Signed-off-by: Jörn Engel <joern@wohnheim.fh-wedel.de> --- fs/squashfs/inode.c | 25 +++++++------------------ 1 files changed, 7 insertions(+), 18 deletions(-) --- linux-2.6.12-rc3cow/fs/squashfs/inode.c~squashfs_cu10 2005-04-22 09:06:09.550109088 +0200 +++ linux-2.6.12-rc3cow/fs/squashfs/inode.c 2005-04-22 09:15:50.279824752 +0200 @@ -122,7 +122,7 @@ static struct buffer_head *get_block_len int *cur_index, int *offset, int *c_byte) { squashfs_sb_info *msBlk = s->s_fs_info; - unsigned short temp; + u16 temp; struct buffer_head *bh; unsigned char *data; @@ -131,30 +131,19 @@ static struct buffer_head *get_block_len if (msBlk->devblksize - *offset == 1) { data = bh->b_data; - if (msBlk->swap) - ((unsigned char *) &temp)[1] = data[*offset]; - else - ((unsigned char *) &temp)[0] = data[*offset]; + ((unsigned char *) &temp)[0] = data[*offset]; brelse(bh); if (!(bh = sb_bread(s, ++(*cur_index)))) return NULL; data = bh->b_data; - if (msBlk->swap) - ((unsigned char *) &temp)[0] = data[0]; - else - ((unsigned char *) &temp)[1] = data[0]; - *c_byte = temp; + ((unsigned char *) &temp)[1] = data[0]; + *c_byte = (msBlk->swab16)(temp); *offset = 1; } else { data = bh->b_data; - if (msBlk->swap) { - ((unsigned char *) &temp)[1] = data[*offset]; - ((unsigned char *) &temp)[0] = data[*offset + 1]; - } else { - ((unsigned char *) &temp)[0] = data[*offset]; - ((unsigned char *) &temp)[1] = data[*offset + 1]; - } - *c_byte = temp; + ((unsigned char *) &temp)[0] = data[*offset]; + ((unsigned char *) &temp)[1] = data[*offset + 1]; + *c_byte = (msBlk->swab16)(temp); *offset += 2; } ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 8/10] squashfs: add swabbing infrastructure 2005-04-22 7:23 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel 2005-04-22 7:24 ` [PATCH 9/10] squashfs: remove some more casts Jörn Engel @ 2005-04-22 7:52 ` Jörn Engel 1 sibling, 0 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:52 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel On Fri, 22 April 2005 09:23:56 +0200, Jörn Engel wrote: > + > +#define SQUASHFS_SWAB(XX) \ > +u##XX squashfs_swab##XX(u##XX x) { return swab##XX(x); } \ > +u##XX squashfs_ident##XX(u##XX x) { return x; } > + > +SQUASHFS_SWAB(16) > +SQUASHFS_SWAB(32) > +SQUASHFS_SWAB(64) > + > + While it made one function somewhat nicer, I'm not entirely sure this approach is a good idea in general. With all the bitfields used, simple byte-swabbing just doesn't cut it. Really, the best strategy I can think of would still be considered A Mess(tm). It may be time to create a new version of the on-medium layout of the filesystem. The new layout is explicitly made big-endian (or little-endian, whatever) and all structs consist exclusively of u8, u16, u32 and u64, or their leXX or beXX counterparts. Advantages: Swapping is trivially done by beXX_to_cpu and friends. Code size should decrease significantly. Disadvantages: New, incompatible layout. FS compatibility and code shrinkage are mutually exclusive. The thing should be called squashfs2 and have a completely different code base. 'Bitfield'-access is done by explicit masking and shifting. Again, this option looks just as rotten as all the previous alternatives. The decision is up to you, Phillip. Jörn -- They laughed at Galileo. They laughed at Copernicus. They laughed at Columbus. But remember, they also laughed at Bozo the Clown. -- unknown ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 6/10] squashfs: remove one cast 2005-04-22 7:22 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel 2005-04-22 7:23 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel @ 2005-04-22 7:26 ` Jörn Engel 1 sibling, 0 replies; 18+ messages in thread From: Jörn Engel @ 2005-04-22 7:26 UTC (permalink / raw) To: Phillip Lougher; +Cc: linux-kernel On Fri, 22 April 2005 09:22:51 +0200, Jörn Engel wrote: > Subject: [PATCH 6/10] squashfs: remove one cast As you should have noticed, patches were sent manually. That should have been 7/10. Jörn -- He that composes himself is wiser than he that composes a book. -- B. Franklin ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2005-04-22 7:52 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-04-20 6:55 [PATCH] remove some usesless casts Jörn Engel 2005-04-20 15:20 ` Phillip Lougher 2005-04-20 21:33 ` Jörn Engel 2005-04-20 20:51 ` Phillip Lougher 2005-04-21 1:06 ` Jörn Engel 2005-04-21 6:36 ` Pekka Enberg 2005-04-21 6:48 ` Jörn Engel 2005-04-21 1:08 ` [PATCH 2/4] squashfs: kmalloc (less stack, less casts) Jörn Engel 2005-04-21 1:10 ` [PATCH 3/4] squashfs: (void*)ify squashfs_get_cached_block Jörn Engel 2005-04-21 1:11 ` [PATCH 4/4] squashfs: (void*)ify squashfs_read_data Jörn Engel 2005-04-22 7:20 ` [PATCH 5/10] squashfs: (void*)ify read_blocklist Jörn Engel 2005-04-22 7:22 ` [PATCH 6/10] squashfs: conserve stack, remove casts Jörn Engel 2005-04-22 7:22 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel 2005-04-22 7:23 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel 2005-04-22 7:24 ` [PATCH 9/10] squashfs: remove some more casts Jörn Engel 2005-04-22 7:25 ` [PATCH 9/10] squashfs: first use of swabbing Jörn Engel 2005-04-22 7:52 ` [PATCH 8/10] squashfs: add swabbing infrastructure Jörn Engel 2005-04-22 7:26 ` [PATCH 6/10] squashfs: remove one cast Jörn Engel
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.