Discussion:
[PATCH 4/9] isofs: inline macros in rock.c
(too old to reply)
Pekka Enberg
2005-03-28 18:05:17 UTC
Permalink
This patch inlines the MAYBE_CONTINUE macro in fs/isofs/rock.c.

Signed-off-by: Pekka Enberg <***@cs.helsinki.fi>
---

rock.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 90 insertions(+), 31 deletions(-)

Index: 2.6/fs/isofs/rock.c
===================================================================
--- 2.6.orig/fs/isofs/rock.c 2005-03-28 16:28:05.000000000 +0300
+++ 2.6/fs/isofs/rock.c 2005-03-28 16:31:53.000000000 +0300
@@ -52,34 +52,6 @@
} \
}

-#define MAYBE_CONTINUE(LABEL,DEV) \
- {if (buffer) { kfree(buffer); buffer = NULL; } \
- if (cont_extent){ \
- int block, offset, offset1; \
- struct buffer_head * pbh; \
- buffer = kmalloc(cont_size,GFP_KERNEL); \
- if (!buffer) goto out; \
- block = cont_extent; \
- offset = cont_offset; \
- offset1 = 0; \
- pbh = sb_bread(DEV->i_sb, block); \
- if(pbh){ \
- if (offset > pbh->b_size || offset + cont_size > pbh->b_size){ \
- brelse(pbh); \
- goto out; \
- } \
- memcpy(buffer + offset1, pbh->b_data + offset, cont_size - offset1); \
- brelse(pbh); \
- chr = (unsigned char *) buffer; \
- len = cont_size; \
- cont_extent = 0; \
- cont_size = 0; \
- cont_offset = 0; \
- goto LABEL; \
- } \
- printk("Unable to read rock-ridge attributes\n"); \
- }}
-
/* return length of name field; 0: not found, -1: to be ignored */
int get_rock_ridge_filename(struct iso_directory_record *de,
char *retname, struct inode *inode)
@@ -163,7 +135,36 @@
}
}
}
- MAYBE_CONTINUE(repeat, inode);
+ if (buffer) {
+ kfree(buffer);
+ buffer = NULL;
+ }
+ if (cont_extent) {
+ int block, offset, offset1;
+ struct buffer_head * pbh;
+ buffer = kmalloc(cont_size,GFP_KERNEL);
+ if (!buffer)
+ goto out;
+ block = cont_extent;
+ offset = cont_offset;
+ offset1 = 0;
+ pbh = sb_bread(inode->i_sb, block);
+ if(pbh) {
+ if (offset > pbh->b_size || offset + cont_size > pbh->b_size) {
+ brelse(pbh);
+ goto out;
+ }
+ memcpy(buffer + offset1, pbh->b_data + offset, cont_size - offset1);
+ brelse(pbh);
+ chr = (unsigned char *) buffer;
+ len = cont_size;
+ cont_extent = 0;
+ cont_size = 0;
+ cont_offset = 0;
+ goto repeat;
+ }
+ printk("Unable to read rock-ridge attributes\n");
+ }
if (buffer)
kfree(buffer);
return retnamlen; /* If 0, this file did not have a NM field */
@@ -428,7 +429,36 @@
}
}
}
- MAYBE_CONTINUE(repeat, inode);
+ if (buffer) {
+ kfree(buffer);
+ buffer = NULL;
+ }
+ if (cont_extent) {
+ int block, offset, offset1;
+ struct buffer_head * pbh;
+ buffer = kmalloc(cont_size,GFP_KERNEL);
+ if (!buffer)
+ goto out;
+ block = cont_extent;
+ offset = cont_offset;
+ offset1 = 0;
+ pbh = sb_bread(inode->i_sb, block);
+ if(pbh) {
+ if (offset > pbh->b_size || offset + cont_size > pbh->b_size) {
+ brelse(pbh);
+ goto out;
+ }
+ memcpy(buffer + offset1, pbh->b_data + offset, cont_size - offset1);
+ brelse(pbh);
+ chr = (unsigned char *) buffer;
+ len = cont_size;
+ cont_extent = 0;
+ cont_size = 0;
+ cont_offset = 0;
+ goto repeat;
+ }
+ printk("Unable to read rock-ridge attributes\n");
+ }
out:
if (buffer)
kfree(buffer);
@@ -597,7 +627,36 @@
break;
}
}
- MAYBE_CONTINUE(repeat, inode);
+ if (buffer) {
+ kfree(buffer);
+ buffer = NULL;
+ }
+ if (cont_extent) {
+ int block, offset, offset1;
+ struct buffer_head * pbh;
+ buffer = kmalloc(cont_size,GFP_KERNEL);
+ if (!buffer)
+ goto out;
+ block = cont_extent;
+ offset = cont_offset;
+ offset1 = 0;
+ pbh = sb_bread(inode->i_sb, block);
+ if(pbh) {
+ if (offset > pbh->b_size || offset + cont_size > pbh->b_size) {
+ brelse(pbh);
+ goto out;
+ }
+ memcpy(buffer + offset1, pbh->b_data + offset, cont_size - offset1);
+ brelse(pbh);
+ chr = (unsigned char *) buffer;
+ len = cont_size;
+ cont_extent = 0;
+ cont_size = 0;
+ cont_offset = 0;
+ goto repeat;
+ }
+ printk("Unable to read rock-ridge attributes\n");
+ }
if (buffer)
kfree(buffer);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



-------------------------------------------------------------------------------
Achtung: diese Newsgruppe ist eine unidirektional gegatete Mailingliste.
Antworten nur per Mail an die im Reply-To-Header angegebene Adresse.
Fragen zum Gateway -> ***@inka.de.
-------------------------------------------------------------------------------
Pekka Enberg
2005-03-28 18:01:25 UTC
Permalink
This patch converts the SETUP_ROCK_RIDGE macro to a proper function in
fs/isofs/rock.c.

Signed-off-by: Pekka Enberg <***@cs.helsinki.fi>
---

rock.c | 34 +++++++++++++++++++---------------
1 files changed, 19 insertions(+), 15 deletions(-)

Index: 2.6/fs/isofs/rock.c
===================================================================
--- 2.6.orig/fs/isofs/rock.c 2005-03-28 16:31:53.000000000 +0300
+++ 2.6/fs/isofs/rock.c 2005-03-28 16:32:13.000000000 +0300
@@ -38,18 +38,22 @@
same thing in certain places. We use the macros to ensure that everything
is done correctly */

-#define SETUP_ROCK_RIDGE(DE,CHR,LEN) \
- {LEN= sizeof(struct iso_directory_record) + DE->name_len[0]; \
- if(LEN & 1) LEN++; \
- CHR = ((unsigned char *) DE) + LEN; \
- LEN = *((unsigned char *) DE) - LEN; \
- if (LEN<0) LEN=0; \
- if (ISOFS_SB(inode->i_sb)->s_rock_offset!=-1) \
- { \
- LEN-=ISOFS_SB(inode->i_sb)->s_rock_offset; \
- CHR+=ISOFS_SB(inode->i_sb)->s_rock_offset; \
- if (LEN<0) LEN=0; \
- } \
+static int setup_rock_ridge(struct iso_directory_record *de, struct inode *inode, unsigned char ** chr)
+{
+ int len = sizeof(struct iso_directory_record) + de->name_len[0];
+ if (len & 1)
+ len++;
+ *chr = ((unsigned char *) de) + len;
+ len = *((unsigned char *) de) - len;
+ if (len < 0)
+ len = 0;
+ if (ISOFS_SB(inode->i_sb)->s_rock_offset != -1) {
+ len -= ISOFS_SB(inode->i_sb)->s_rock_offset;
+ *chr += ISOFS_SB(inode->i_sb)->s_rock_offset;
+ if (len < 0)
+ len = 0;
+ }
+ return len;
}

/* return length of name field; 0: not found, -1: to be ignored */
@@ -66,7 +70,7 @@
return 0;
*retname = 0;

- SETUP_ROCK_RIDGE(de, chr, len);
+ len = setup_rock_ridge(de, inode, &chr);
repeat:
{
struct rock_ridge *rr;
@@ -187,7 +191,7 @@
if (!ISOFS_SB(inode->i_sb)->s_rock)
return 0;

- SETUP_ROCK_RIDGE(de, chr, len);
+ len = setup_rock_ridge(de, inode, &chr);
if (regard_xa) {
chr += 14;
len -= 14;
@@ -589,7 +593,7 @@
/* Now test for possible Rock Ridge extensions which will override
some of these numbers in the inode structure. */

- SETUP_ROCK_RIDGE(raw_inode, chr, len);
+ len = setup_rock_ridge(raw_inode, inode, &chr);

repeat:
while (len > 2) { /* There may be one byte for padding somewhere */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



-------------------------------------------------------------------------------
Achtung: diese Newsgruppe ist eine unidirektional gegatete Mailingliste.
Antworten nur per Mail an die im Reply-To-Header angegebene Adresse.
Fragen zum Gateway -> ***@inka.de.
-------------------------------------------------------------------------------
Loading...