linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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 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 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 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

* [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

* 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 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 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

* 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

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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).