summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2002-03-17 18:39:06 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2002-03-17 18:39:06 -0800
commitc3d7ae3b07d7d7d1214af82d240f4fb5706bf5b9 (patch)
treeac20d4d10a4eb9dbd9327643e0307129b8212ef8
parent5bb3575c7c93e3315df4123a2911ada821e757c2 (diff)
parent2703321515d8d73771236f78f8fb721103a1494f (diff)
Automerge
-rw-r--r--arch/ppc/kernel/align.c2
-rw-r--r--arch/ppc/kernel/prom_init.c16
-rw-r--r--arch/ppc/platforms/pmac_feature.c10
-rw-r--r--drivers/pci/pci.c55
-rw-r--r--fs/isofs/dir.c17
-rw-r--r--fs/isofs/inode.c157
-rw-r--r--fs/isofs/joliet.c4
-rw-r--r--fs/isofs/namei.c13
-rw-r--r--fs/isofs/rock.c26
-rw-r--r--fs/udf/super.c9
-rw-r--r--fs/udf/udf_sb.h6
-rw-r--r--fs/udf/udfdecl.h4
-rw-r--r--include/asm-ppc/siginfo.h2
-rw-r--r--include/asm-ppc/thread_info.h9
-rw-r--r--include/linux/fs.h4
-rw-r--r--include/linux/if_wanpipe.h1
-rw-r--r--include/linux/iso_fs.h7
-rw-r--r--net/ipv4/netfilter/ip_conntrack_standalone.c2
-rw-r--r--net/wanrouter/af_wanpipe.c55
19 files changed, 208 insertions, 191 deletions
diff --git a/arch/ppc/kernel/align.c b/arch/ppc/kernel/align.c
index 0f8dbd1cb585..ed023aace203 100644
--- a/arch/ppc/kernel/align.c
+++ b/arch/ppc/kernel/align.c
@@ -28,7 +28,7 @@ struct aligninfo {
#define OPCD(inst) (((inst) & 0xFC000000) >> 26)
#define RS(inst) (((inst) & 0x03E00000) >> 21)
#define RA(inst) (((inst) & 0x001F0000) >> 16)
-#define IS_DFORM(code) ((code) >= 32 && (code) <= 47)
+#define IS_DFORM(code) ((code) >= 32 && (code) <= 55)
#endif
#define INVALID { 0, 0 }
diff --git a/arch/ppc/kernel/prom_init.c b/arch/ppc/kernel/prom_init.c
index fea41427aa29..96f43675dae8 100644
--- a/arch/ppc/kernel/prom_init.c
+++ b/arch/ppc/kernel/prom_init.c
@@ -50,7 +50,7 @@
#define FB_MAX 8
#endif
-#define ALIGN(x) (((x) + sizeof(unsigned long)-1) & -sizeof(unsigned long))
+#define ALIGNUL(x) (((x) + sizeof(unsigned long)-1) & -sizeof(unsigned long))
struct prom_args {
const char *service;
@@ -376,7 +376,7 @@ try_again:
}
}
- return ALIGN(mem);
+ return ALIGNUL(mem);
}
/* This function will enable the early boot text when doing OF booting. This
@@ -457,7 +457,7 @@ copy_device_tree(unsigned long mem_start, unsigned long mem_end)
prom_exit();
}
allnextp = &allnodes;
- mem_start = ALIGN(mem_start);
+ mem_start = ALIGNUL(mem_start);
new_start = inspect_node(root, 0, mem_start, mem_end, &allnextp);
*allnextp = 0;
return new_start;
@@ -501,7 +501,7 @@ inspect_node(phandle node, struct device_node *dad,
if ((int) call_prom("nextprop", 3, 1, node, prev_name,
namep) <= 0)
break;
- mem_start = ALIGN((unsigned long)namep + strlen(namep) + 1);
+ mem_start = ALIGNUL((unsigned long)namep + strlen(namep) + 1);
prev_name = namep;
valp = (unsigned char *) mem_start;
pp->value = PTRUNRELOC(valp);
@@ -514,7 +514,7 @@ inspect_node(phandle node, struct device_node *dad,
if (pp->length > MAX_PROPERTY_LENGTH)
continue; /* ignore this property */
#endif
- mem_start = ALIGN(mem_start + pp->length);
+ mem_start = ALIGNUL(mem_start + pp->length);
*prev_propp = PTRUNRELOC(pp);
prev_propp = &pp->next;
}
@@ -526,7 +526,7 @@ inspect_node(phandle node, struct device_node *dad,
namep = (char *) (pp + 1);
pp->name = PTRUNRELOC(namep);
strcpy(namep, "linux,phandle");
- mem_start = ALIGN((unsigned long)namep + strlen(namep) + 1);
+ mem_start = ALIGNUL((unsigned long)namep + strlen(namep) + 1);
pp->value = (unsigned char *) PTRUNRELOC(&np->node);
pp->length = sizeof(np->node);
}
@@ -538,7 +538,7 @@ inspect_node(phandle node, struct device_node *dad,
if (l >= 0) {
np->full_name = PTRUNRELOC((char *) mem_start);
*(char *)(mem_start + l) = 0;
- mem_start = ALIGN(mem_start + l + 1);
+ mem_start = ALIGNUL(mem_start + l + 1);
}
/* do all our children */
@@ -741,7 +741,7 @@ prom_init(int r3, int r4, prom_entry pp)
*d = 0;
call_prom("canon", 3, 1, p, d, 1<<20);
bootdevice = PTRUNRELOC(d);
- mem = ALIGN(mem + strlen(d) + 1);
+ mem = ALIGNUL(mem + strlen(d) + 1);
}
prom_instantiate_rtas();
diff --git a/arch/ppc/platforms/pmac_feature.c b/arch/ppc/platforms/pmac_feature.c
index 3a930be3e77d..ee134a1b84cf 100644
--- a/arch/ppc/platforms/pmac_feature.c
+++ b/arch/ppc/platforms/pmac_feature.c
@@ -400,13 +400,17 @@ heathrow_modem_enable(struct device_node* node, int param, int value)
LOCK(flags);
MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio | 1);
(void)MACIO_IN8(HRW_GPIO_MODEM_RESET);
- UNLOCK(flags); mdelay(250); LOCK(flags);
+ UNLOCK(flags);
+ mdelay(250);
+ LOCK(flags);
MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio);
(void)MACIO_IN8(HRW_GPIO_MODEM_RESET);
- UNLOCK(flags); mdelay(250); LOCK(flags);
+ UNLOCK(flags);
+ mdelay(250);
+ LOCK(flags);
MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio | 1);
(void)MACIO_IN8(HRW_GPIO_MODEM_RESET);
- UNLOCK(flags); mdelay(250); LOCK(flags);
+ UNLOCK(flags);
}
return 0;
}
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 890ca713c999..a8fa051737f8 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1710,7 +1710,6 @@ struct pci_pool { /* the pool */
spinlock_t lock;
size_t blocks_per_page;
size_t size;
- int flags;
struct pci_dev *dev;
size_t allocation;
char name [32];
@@ -1727,8 +1726,6 @@ struct pci_page { /* cacheable header for 'allocation' bytes */
#define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000)
#define POOL_POISON_BYTE 0xa7
-// #define CONFIG_PCIPOOL_DEBUG
-
/**
* pci_pool_create - Creates a pool of pci consistent memory blocks, for dma.
@@ -1737,7 +1734,7 @@ struct pci_page { /* cacheable header for 'allocation' bytes */
* @size: size of the blocks in this pool.
* @align: alignment requirement for blocks; must be a power of two
* @allocation: returned blocks won't cross this boundary (or zero)
- * @flags: SLAB_* flags (not all are supported).
+ * @mem_flags: SLAB_* flags.
*
* Returns a pci allocation pool with the requested characteristics, or
* null if one can't be created. Given one of these pools, pci_pool_alloc()
@@ -1753,7 +1750,7 @@ struct pci_page { /* cacheable header for 'allocation' bytes */
*/
struct pci_pool *
pci_pool_create (const char *name, struct pci_dev *pdev,
- size_t size, size_t align, size_t allocation, int flags)
+ size_t size, size_t align, size_t allocation, int mem_flags)
{
struct pci_pool *retval;
@@ -1777,13 +1774,9 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
} else if (allocation < size)
return 0;
- if (!(retval = kmalloc (sizeof *retval, flags)))
+ if (!(retval = kmalloc (sizeof *retval, mem_flags)))
return retval;
-#ifdef CONFIG_PCIPOOL_DEBUG
- flags |= SLAB_POISON;
-#endif
-
strncpy (retval->name, name, sizeof retval->name);
retval->name [sizeof retval->name - 1] = 0;
@@ -1791,17 +1784,10 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
INIT_LIST_HEAD (&retval->page_list);
spin_lock_init (&retval->lock);
retval->size = size;
- retval->flags = flags;
retval->allocation = allocation;
retval->blocks_per_page = allocation / size;
init_waitqueue_head (&retval->waitq);
-#ifdef CONFIG_PCIPOOL_DEBUG
- printk (KERN_DEBUG "pcipool create %s/%s size %d, %d/page (%d alloc)\n",
- pdev ? pdev->slot_name : NULL, retval->name, size,
- retval->blocks_per_page, allocation);
-#endif
-
return retval;
}
@@ -1824,8 +1810,9 @@ pool_alloc_page (struct pci_pool *pool, int mem_flags)
&page->dma);
if (page->vaddr) {
memset (page->bitmap, 0xff, mapsize); // bit set == free
- if (pool->flags & SLAB_POISON)
- memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
+#ifdef CONFIG_DEBUG_SLAB
+ memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
+#endif
list_add (&page->page_list, &pool->page_list);
} else {
kfree (page);
@@ -1851,8 +1838,9 @@ pool_free_page (struct pci_pool *pool, struct pci_page *page)
{
dma_addr_t dma = page->dma;
- if (pool->flags & SLAB_POISON)
- memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
+#ifdef CONFIG_DEBUG_SLAB
+ memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
+#endif
pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma);
list_del (&page->page_list);
kfree (page);
@@ -1871,12 +1859,6 @@ pci_pool_destroy (struct pci_pool *pool)
{
unsigned long flags;
-#ifdef CONFIG_PCIPOOL_DEBUG
- printk (KERN_DEBUG "pcipool destroy %s/%s\n",
- pool->dev ? pool->dev->slot_name : NULL,
- pool->name);
-#endif
-
spin_lock_irqsave (&pool->lock, flags);
while (!list_empty (&pool->page_list)) {
struct pci_page *page;
@@ -2010,30 +1992,27 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
pool->name, vaddr, (unsigned long) dma);
return;
}
-#ifdef CONFIG_PCIPOOL_DEBUG
- if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
- printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%lx\n",
- pool->dev ? pool->dev->slot_name : NULL,
- pool->name, vaddr, (unsigned long) dma);
- return;
- }
-#endif
block = dma - page->dma;
block /= pool->size;
map = block / BITS_PER_LONG;
block %= BITS_PER_LONG;
-#ifdef CONFIG_PCIPOOL_DEBUG
+#ifdef CONFIG_DEBUG_SLAB
+ if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
+ printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%lx\n",
+ pool->dev ? pool->dev->slot_name : NULL,
+ pool->name, vaddr, (unsigned long) dma);
+ return;
+ }
if (page->bitmap [map] & (1UL << block)) {
printk (KERN_ERR "pci_pool_free %s/%s, dma %x already free\n",
pool->dev ? pool->dev->slot_name : NULL,
pool->name, dma);
return;
}
+ memset (vaddr, POOL_POISON_BYTE, pool->size);
#endif
- if (pool->flags & SLAB_POISON)
- memset (vaddr, POOL_POISON_BYTE, pool->size);
spin_lock_irqsave (&pool->lock, flags);
set_bit (block, &page->bitmap [map]);
diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c
index 583ade0421c0..bef27095249e 100644
--- a/fs/isofs/dir.c
+++ b/fs/isofs/dir.c
@@ -110,14 +110,13 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
struct buffer_head *bh = NULL;
int len;
int map;
- int high_sierra;
int first_de = 1;
char *p = NULL; /* Quiet GCC */
struct iso_directory_record *de;
+ struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb);
offset = filp->f_pos & (bufsize - 1);
block = filp->f_pos >> bufbits;
- high_sierra = inode->i_sb->u.isofs_sb.s_high_sierra;
while (filp->f_pos < inode->i_size) {
int de_len;
@@ -166,7 +165,7 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
de = tmpde;
}
- if (de->flags[-high_sierra] & 0x80) {
+ if (de->flags[-sbi->s_high_sierra] & 0x80) {
first_de = 0;
filp->f_pos += de_len;
continue;
@@ -194,16 +193,16 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
/* Handle everything else. Do name translation if there
is no Rock Ridge NM field. */
- if (inode->i_sb->u.isofs_sb.s_unhide == 'n') {
+ if (sbi->s_unhide == 'n') {
/* Do not report hidden or associated files */
- if (de->flags[-high_sierra] & 5) {
+ if (de->flags[-sbi->s_high_sierra] & 5) {
filp->f_pos += de_len;
continue;
}
}
map = 1;
- if (inode->i_sb->u.isofs_sb.s_rock) {
+ if (sbi->s_rock) {
len = get_rock_ridge_filename(de, tmpname, inode);
if (len != 0) { /* may be -1 */
p = tmpname;
@@ -212,16 +211,16 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
}
if (map) {
#ifdef CONFIG_JOLIET
- if (inode->i_sb->u.isofs_sb.s_joliet_level) {
+ if (sbi->s_joliet_level) {
len = get_joliet_filename(de, tmpname, inode);
p = tmpname;
} else
#endif
- if (inode->i_sb->u.isofs_sb.s_mapping == 'a') {
+ if (sbi->s_mapping == 'a') {
len = get_acorn_filename(de, tmpname, inode);
p = tmpname;
} else
- if (inode->i_sb->u.isofs_sb.s_mapping == 'n') {
+ if (sbi->s_mapping == 'n') {
len = isofs_name_translate(de, tmpname, inode);
p = tmpname;
} else {
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index d1bec1eae0a0..31174ae2bede 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -60,10 +60,11 @@ static int isofs_dentry_cmp_ms(struct dentry *dentry, struct qstr *a, struct qst
static void isofs_put_super(struct super_block *sb)
{
+ struct isofs_sb_info *sbi = ISOFS_SB(sb);
#ifdef CONFIG_JOLIET
- if (sb->u.isofs_sb.s_nls_iocharset) {
- unload_nls(sb->u.isofs_sb.s_nls_iocharset);
- sb->u.isofs_sb.s_nls_iocharset = NULL;
+ if (sbi->s_nls_iocharset) {
+ unload_nls(sbi->s_nls_iocharset);
+ sbi->s_nls_iocharset = NULL;
}
#endif
@@ -72,6 +73,8 @@ static void isofs_put_super(struct super_block *sb)
check_malloc, check_bread);
#endif
+ kfree(sbi);
+ sb->u.generic_sbp = NULL;
return;
}
@@ -518,7 +521,6 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
struct iso_supplementary_descriptor *sec = NULL;
struct iso_directory_record * rootp;
int joliet_level = 0;
- int high_sierra;
int iso_blknum, block;
int orig_zonesize;
int table;
@@ -526,9 +528,16 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
unsigned long first_data_zone;
struct inode * inode;
struct iso9660_options opt;
+ struct isofs_sb_info * sbi;
+
+ sbi = kmalloc(sizeof(struct isofs_sb_info), GFP_KERNEL);
+ if (!sbi)
+ return -ENOMEM;
+ s->u.generic_sbp = sbi;
+ memset(sbi, 0, sizeof(struct isofs_sb_info));
if (!parse_options((char *) data, &opt))
- goto out_unlock;
+ goto out_freesbi;
#if 0
printk("map = %c\n", opt.map);
@@ -554,7 +563,7 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
*/
opt.blocksize = sb_min_blocksize(s, opt.blocksize);
- s->u.isofs_sb.s_high_sierra = high_sierra = 0; /* default is iso9660 */
+ sbi->s_high_sierra = 0; /* default is iso9660 */
vol_desc_start = (opt.sbsector != -1) ?
opt.sbsector : isofs_get_last_session(s,opt.session);
@@ -614,8 +623,7 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
if (isonum_711 (hdp->type) != ISO_VD_PRIMARY)
goto out_freebh;
- s->u.isofs_sb.s_high_sierra = 1;
- high_sierra = 1;
+ sbi->s_high_sierra = 1;
opt.rock = 'n';
h_pri = (struct hs_primary_descriptor *)vdp;
goto root_found;
@@ -646,29 +654,29 @@ root_found:
pri = (struct iso_primary_descriptor *) sec;
}
- if(high_sierra){
+ if(sbi->s_high_sierra){
rootp = (struct iso_directory_record *) h_pri->root_directory_record;
#ifndef IGNORE_WRONG_MULTI_VOLUME_SPECS
if (isonum_723 (h_pri->volume_set_size) != 1)
goto out_no_support;
#endif /* IGNORE_WRONG_MULTI_VOLUME_SPECS */
- s->u.isofs_sb.s_nzones = isonum_733 (h_pri->volume_space_size);
- s->u.isofs_sb.s_log_zone_size = isonum_723 (h_pri->logical_block_size);
- s->u.isofs_sb.s_max_size = isonum_733(h_pri->volume_space_size);
+ sbi->s_nzones = isonum_733 (h_pri->volume_space_size);
+ sbi->s_log_zone_size = isonum_723 (h_pri->logical_block_size);
+ sbi->s_max_size = isonum_733(h_pri->volume_space_size);
} else {
rootp = (struct iso_directory_record *) pri->root_directory_record;
#ifndef IGNORE_WRONG_MULTI_VOLUME_SPECS
if (isonum_723 (pri->volume_set_size) != 1)
goto out_no_support;
#endif /* IGNORE_WRONG_MULTI_VOLUME_SPECS */
- s->u.isofs_sb.s_nzones = isonum_733 (pri->volume_space_size);
- s->u.isofs_sb.s_log_zone_size = isonum_723 (pri->logical_block_size);
- s->u.isofs_sb.s_max_size = isonum_733(pri->volume_space_size);
+ sbi->s_nzones = isonum_733 (pri->volume_space_size);
+ sbi->s_log_zone_size = isonum_723 (pri->logical_block_size);
+ sbi->s_max_size = isonum_733(pri->volume_space_size);
}
- s->u.isofs_sb.s_ninodes = 0; /* No way to figure this out easily */
+ sbi->s_ninodes = 0; /* No way to figure this out easily */
- orig_zonesize = s -> u.isofs_sb.s_log_zone_size;
+ orig_zonesize = sbi->s_log_zone_size;
/*
* If the zone size is smaller than the hardware sector size,
* this is a fatal error. This would occur if the disc drive
@@ -680,10 +688,10 @@ root_found:
goto out_bad_size;
/* RDE: convert log zone size to bit shift */
- switch (s -> u.isofs_sb.s_log_zone_size)
- { case 512: s -> u.isofs_sb.s_log_zone_size = 9; break;
- case 1024: s -> u.isofs_sb.s_log_zone_size = 10; break;
- case 2048: s -> u.isofs_sb.s_log_zone_size = 11; break;
+ switch (sbi->s_log_zone_size)
+ { case 512: sbi->s_log_zone_size = 9; break;
+ case 1024: sbi->s_log_zone_size = 10; break;
+ case 2048: sbi->s_log_zone_size = 11; break;
default:
goto out_bad_zone_size;
@@ -705,16 +713,16 @@ root_found:
first_data_zone = ((isonum_733 (rootp->extent) +
isonum_711 (rootp->ext_attr_length))
- << s -> u.isofs_sb.s_log_zone_size);
- s->u.isofs_sb.s_firstdatazone = first_data_zone;
+ << sbi->s_log_zone_size);
+ sbi->s_firstdatazone = first_data_zone;
#ifndef BEQUIET
printk(KERN_DEBUG "Max size:%ld Log zone size:%ld\n",
- s->u.isofs_sb.s_max_size,
- 1UL << s->u.isofs_sb.s_log_zone_size);
+ sbi->s_max_size,
+ 1UL << sbi->s_log_zone_size);
printk(KERN_DEBUG "First datazone:%ld Root inode number:%ld\n",
- s->u.isofs_sb.s_firstdatazone >> s -> u.isofs_sb.s_log_zone_size,
- s->u.isofs_sb.s_firstdatazone);
- if(high_sierra)
+ sbi->s_firstdatazone >> sbi->s_log_zone_size,
+ sbi->s_firstdatazone);
+ if(sbi->s_high_sierra)
printk(KERN_DEBUG "Disc in High Sierra format.\n");
#endif
@@ -732,7 +740,7 @@ root_found:
pri->root_directory_record;
first_data_zone = ((isonum_733 (rootp->extent) +
isonum_711 (rootp->ext_attr_length))
- << s -> u.isofs_sb.s_log_zone_size);
+ << sbi->s_log_zone_size);
}
/*
@@ -761,43 +769,43 @@ root_found:
*/
sb_set_blocksize(s, orig_zonesize);
- s->u.isofs_sb.s_nls_iocharset = NULL;
+ sbi->s_nls_iocharset = NULL;
#ifdef CONFIG_JOLIET
if (joliet_level && opt.utf8 == 0) {
char * p = opt.iocharset ? opt.iocharset : "iso8859-1";
- s->u.isofs_sb.s_nls_iocharset = load_nls(p);
- if (! s->u.isofs_sb.s_nls_iocharset) {
+ sbi->s_nls_iocharset = load_nls(p);
+ if (! sbi->s_nls_iocharset) {
/* Fail only if explicit charset specified */
if (opt.iocharset)
- goto out_unlock;
- s->u.isofs_sb.s_nls_iocharset = load_nls_default();
+ goto out_freesbi;
+ sbi->s_nls_iocharset = load_nls_default();
}
}
#endif
s->s_op = &isofs_sops;
- s->u.isofs_sb.s_mapping = opt.map;
- s->u.isofs_sb.s_rock = (opt.rock == 'y' ? 2 : 0);
- s->u.isofs_sb.s_rock_offset = -1; /* initial offset, will guess until SP is found*/
- s->u.isofs_sb.s_cruft = opt.cruft;
- s->u.isofs_sb.s_unhide = opt.unhide;
- s->u.isofs_sb.s_uid = opt.uid;
- s->u.isofs_sb.s_gid = opt.gid;
- s->u.isofs_sb.s_utf8 = opt.utf8;
- s->u.isofs_sb.s_nocompress = opt.nocompress;
+ sbi->s_mapping = opt.map;
+ sbi->s_rock = (opt.rock == 'y' ? 2 : 0);
+ sbi->s_rock_offset = -1; /* initial offset, will guess until SP is found*/
+ sbi->s_cruft = opt.cruft;
+ sbi->s_unhide = opt.unhide;
+ sbi->s_uid = opt.uid;
+ sbi->s_gid = opt.gid;
+ sbi->s_utf8 = opt.utf8;
+ sbi->s_nocompress = opt.nocompress;
/*
* It would be incredibly stupid to allow people to mark every file
* on the disk as suid, so we merely allow them to set the default
* permissions.
*/
- s->u.isofs_sb.s_mode = opt.mode & 0777;
+ sbi->s_mode = opt.mode & 0777;
/*
* Read the root inode, which _may_ result in changing
* the s_rock flag. Once we have the final s_rock value,
* we then decide whether to use the Joliet descriptor.
*/
- inode = iget(s, s->u.isofs_sb.s_firstdatazone);
+ inode = iget(s, sbi->s_firstdatazone);
/*
* If this disk has both Rock Ridge and Joliet on it, then we
@@ -807,16 +815,16 @@ root_found:
* CD with Unicode names. Until someone sees such a beast, it
* will not be supported.
*/
- if (s->u.isofs_sb.s_rock == 1) {
+ if (sbi->s_rock == 1) {
joliet_level = 0;
} else if (joliet_level) {
- s->u.isofs_sb.s_rock = 0;
- if (s->u.isofs_sb.s_firstdatazone != first_data_zone) {
- s->u.isofs_sb.s_firstdatazone = first_data_zone;
+ sbi->s_rock = 0;
+ if (sbi->s_firstdatazone != first_data_zone) {
+ sbi->s_firstdatazone = first_data_zone;
printk(KERN_DEBUG
"ISOFS: changing to secondary root\n");
iput(inode);
- inode = iget(s, s->u.isofs_sb.s_firstdatazone);
+ inode = iget(s, sbi->s_firstdatazone);
}
}
@@ -825,7 +833,7 @@ root_found:
if (joliet_level) opt.check = 'r';
else opt.check = 's';
}
- s->u.isofs_sb.s_joliet_level = joliet_level;
+ sbi->s_joliet_level = joliet_level;
/* check the root inode */
if (!inode)
@@ -855,18 +863,18 @@ out_no_root:
out_iput:
iput(inode);
#ifdef CONFIG_JOLIET
- if (s->u.isofs_sb.s_nls_iocharset)
- unload_nls(s->u.isofs_sb.s_nls_iocharset);
+ if (sbi->s_nls_iocharset)
+ unload_nls(sbi->s_nls_iocharset);
#endif
- goto out_unlock;
+ goto out_freesbi;
out_no_read:
printk(KERN_WARNING "isofs_fill_super: "
"bread failed, dev=%s, iso_blknum=%d, block=%d\n",
s->s_id, iso_blknum, block);
- goto out_unlock;
+ goto out_freesbi;
out_bad_zone_size:
printk(KERN_WARNING "Bad logical zone size %ld\n",
- s->u.isofs_sb.s_log_zone_size);
+ sbi->s_log_zone_size);
goto out_freebh;
out_bad_size:
printk(KERN_WARNING "Logical zone size(%d) < hardware blocksize(%u)\n",
@@ -883,7 +891,9 @@ out_unknown_format:
out_freebh:
brelse(bh);
-out_unlock:
+out_freesbi:
+ kfree(sbi);
+ s->u.generic_sbp = NULL;
return -EINVAL;
}
@@ -891,11 +901,11 @@ static int isofs_statfs (struct super_block *sb, struct statfs *buf)
{
buf->f_type = ISOFS_SUPER_MAGIC;
buf->f_bsize = sb->s_blocksize;
- buf->f_blocks = (sb->u.isofs_sb.s_nzones
- << (sb->u.isofs_sb.s_log_zone_size - sb->s_blocksize_bits));
+ buf->f_blocks = (ISOFS_SB(sb)->s_nzones
+ << (ISOFS_SB(sb)->s_log_zone_size - sb->s_blocksize_bits));
buf->f_bfree = 0;
buf->f_bavail = 0;
- buf->f_files = sb->u.isofs_sb.s_ninodes;
+ buf->f_files = ISOFS_SB(sb)->s_ninodes;
buf->f_ffree = 0;
buf->f_namelen = NAME_MAX;
return 0;
@@ -1058,7 +1068,7 @@ static int isofs_read_level3_size(struct inode * inode)
{
unsigned long f_pos = inode->i_ino;
unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
- int high_sierra = inode->i_sb->u.isofs_sb.s_high_sierra;
+ int high_sierra = ISOFS_SB(inode->i_sb)->s_high_sierra;
struct buffer_head * bh = NULL;
unsigned long block, offset;
int i = 0;
@@ -1157,9 +1167,10 @@ out_toomany:
static void isofs_read_inode(struct inode * inode)
{
struct super_block *sb = inode->i_sb;
+ struct isofs_sb_info *sbi = ISOFS_SB(sb);
unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
int block = inode->i_ino >> ISOFS_BUFFER_BITS(inode);
- int high_sierra = sb->u.isofs_sb.s_high_sierra;
+ int high_sierra = sbi->s_high_sierra;
struct buffer_head * bh = NULL;
struct iso_directory_record * de;
struct iso_directory_record * tmpde = NULL;
@@ -1205,7 +1216,7 @@ static void isofs_read_inode(struct inode * inode)
do it the hard way. */
} else {
/* Everybody gets to read the file. */
- inode->i_mode = inode->i_sb->u.isofs_sb.s_mode;
+ inode->i_mode = sbi->s_mode;
inode->i_nlink = 1;
inode->i_mode |= S_IFREG;
/* If there are no periods in the name,
@@ -1217,8 +1228,8 @@ static void isofs_read_inode(struct inode * inode)
if(i == de->name_len[0] || de->name[i] == ';')
inode->i_mode |= S_IXUGO; /* execute permission */
}
- inode->i_uid = inode->i_sb->u.isofs_sb.s_uid;
- inode->i_gid = inode->i_sb->u.isofs_sb.s_gid;
+ inode->i_uid = sbi->s_uid;
+ inode->i_gid = sbi->s_gid;
inode->i_blocks = inode->i_blksize = 0;
ei->i_format_parm[0] = 0;
@@ -1241,10 +1252,10 @@ static void isofs_read_inode(struct inode * inode)
* legal. Do not prevent to use DVD's schilling@fokus.gmd.de
*/
if ((inode->i_size < 0 || inode->i_size > 0x7FFFFFFE) &&
- inode->i_sb->u.isofs_sb.s_cruft == 'n') {
+ sbi->s_cruft == 'n') {
printk(KERN_WARNING "Warning: defective CD-ROM. "
"Enabling \"cruft\" mount option.\n");
- inode->i_sb->u.isofs_sb.s_cruft = 'y';
+ sbi->s_cruft = 'y';
}
/*
@@ -1254,7 +1265,7 @@ static void isofs_read_inode(struct inode * inode)
* on the CDROM.
*/
- if (inode->i_sb->u.isofs_sb.s_cruft == 'y' &&
+ if (sbi->s_cruft == 'y' &&
inode->i_size & 0xff000000) {
inode->i_size &= 0x00ffffff;
}
@@ -1298,8 +1309,8 @@ static void isofs_read_inode(struct inode * inode)
if (!high_sierra) {
parse_rock_ridge_inode(de, inode);
/* if we want uid/gid set, override the rock ridge setting */
- test_and_set_uid(&inode->i_uid, inode->i_sb->u.isofs_sb.s_uid);
- test_and_set_gid(&inode->i_gid, inode->i_sb->u.isofs_sb.s_gid);
+ test_and_set_uid(&inode->i_uid, sbi->s_uid);
+ test_and_set_gid(&inode->i_gid, sbi->s_gid);
}
/* get the volume sequence number */
@@ -1311,17 +1322,17 @@ static void isofs_read_inode(struct inode * inode)
* of which is limiting the file size to 16Mb. Thus we silently allow
* volume numbers of 0 to go through without complaining.
*/
- if (inode->i_sb->u.isofs_sb.s_cruft == 'n' &&
+ if (sbi->s_cruft == 'n' &&
(volume_seq_no != 0) && (volume_seq_no != 1)) {
printk(KERN_WARNING "Warning: defective CD-ROM "
"(volume sequence number %d). "
"Enabling \"cruft\" mount option.\n", volume_seq_no);
- inode->i_sb->u.isofs_sb.s_cruft = 'y';
+ sbi->s_cruft = 'y';
}
/* Install the inode operations vector */
#ifndef IGNORE_WRONG_MULTI_VOLUME_SPECS
- if (inode->i_sb->u.isofs_sb.s_cruft != 'y' &&
+ if (sbi->s_cruft != 'y' &&
(volume_seq_no != 0) && (volume_seq_no != 1)) {
printk(KERN_WARNING "Multi-volume CD somehow got mounted.\n");
} else
diff --git a/fs/isofs/joliet.c b/fs/isofs/joliet.c
index 15d2370bda3f..86c50e22fc87 100644
--- a/fs/isofs/joliet.c
+++ b/fs/isofs/joliet.c
@@ -77,8 +77,8 @@ get_joliet_filename(struct iso_directory_record * de, unsigned char *outname, st
struct nls_table *nls;
unsigned char len = 0;
- utf8 = inode->i_sb->u.isofs_sb.s_utf8;
- nls = inode->i_sb->u.isofs_sb.s_nls_iocharset;
+ utf8 = ISOFS_SB(inode->i_sb)->s_utf8;
+ nls = ISOFS_SB(inode->i_sb)->s_nls_iocharset;
if (utf8) {
len = wcsntombs_be(outname, de->name,
diff --git a/fs/isofs/namei.c b/fs/isofs/namei.c
index 485bb7023fe2..cbdf44b0164e 100644
--- a/fs/isofs/namei.c
+++ b/fs/isofs/namei.c
@@ -65,6 +65,7 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
unsigned char bufbits = ISOFS_BUFFER_BITS(dir);
unsigned int block, f_pos, offset;
struct buffer_head * bh = NULL;
+ struct isofs_sb_info *sbi = ISOFS_SB(dir->i_sb);
if (!ISOFS_I(dir)->i_first_extent)
return 0;
@@ -120,19 +121,19 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
dlen = de->name_len[0];
dpnt = de->name;
- if (dir->i_sb->u.isofs_sb.s_rock &&
+ if (sbi->s_rock &&
((i = get_rock_ridge_filename(de, tmpname, dir)))) {
dlen = i; /* possibly -1 */
dpnt = tmpname;
#ifdef CONFIG_JOLIET
- } else if (dir->i_sb->u.isofs_sb.s_joliet_level) {
+ } else if (sbi->s_joliet_level) {
dlen = get_joliet_filename(de, tmpname, dir);
dpnt = tmpname;
#endif
- } else if (dir->i_sb->u.isofs_sb.s_mapping == 'a') {
+ } else if (sbi->s_mapping == 'a') {
dlen = get_acorn_filename(de, tmpname, dir);
dpnt = tmpname;
- } else if (dir->i_sb->u.isofs_sb.s_mapping == 'n') {
+ } else if (sbi->s_mapping == 'n') {
dlen = isofs_name_translate(de, tmpname, dir);
dpnt = tmpname;
}
@@ -142,8 +143,8 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
*/
match = 0;
if (dlen > 0 &&
- (!(de->flags[-dir->i_sb->u.isofs_sb.s_high_sierra] & 5)
- || dir->i_sb->u.isofs_sb.s_unhide == 'y'))
+ (!(de->flags[-sbi->s_high_sierra] & 5)
+ || sbi->s_unhide == 'y'))
{
match = (isofs_cmp(dentry,dpnt,dlen) == 0);
}
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
index 5065d2fdccc6..17b2bb5e6908 100644
--- a/fs/isofs/rock.c
+++ b/fs/isofs/rock.c
@@ -32,7 +32,7 @@
#define CHECK_SP(FAIL) \
if(rr->u.SP.magic[0] != 0xbe) FAIL; \
if(rr->u.SP.magic[1] != 0xef) FAIL; \
- inode->i_sb->u.isofs_sb.s_rock_offset=rr->u.SP.skip;
+ ISOFS_SB(inode->i_sb)->s_rock_offset=rr->u.SP.skip;
/* We define a series of macros because each function must do exactly the
same thing in certain places. We use the macros to ensure that everything
is done correctly */
@@ -51,10 +51,10 @@
if(LEN & 1) LEN++; \
CHR = ((unsigned char *) DE) + LEN; \
LEN = *((unsigned char *) DE) - LEN; \
- if (inode->i_sb->u.isofs_sb.s_rock_offset!=-1) \
+ if (ISOFS_SB(inode->i_sb)->s_rock_offset!=-1) \
{ \
- LEN-=inode->i_sb->u.isofs_sb.s_rock_offset; \
- CHR+=inode->i_sb->u.isofs_sb.s_rock_offset; \
+ LEN-=ISOFS_SB(inode->i_sb)->s_rock_offset; \
+ CHR+=ISOFS_SB(inode->i_sb)->s_rock_offset; \
if (LEN<0) LEN=0; \
} \
}
@@ -102,7 +102,7 @@ int find_rock_ridge_relocation(struct iso_directory_record * de,
/* Return value if we do not find appropriate record. */
retval = isonum_733 (de->extent);
- if (!inode->i_sb->u.isofs_sb.s_rock) return retval;
+ if (!ISOFS_SB(inode->i_sb)->s_rock) return retval;
SETUP_ROCK_RIDGE(de, chr, len);
repeat:
@@ -162,7 +162,7 @@ int get_rock_ridge_filename(struct iso_directory_record * de,
CONTINUE_DECLS;
int retnamlen = 0, truncate=0;
- if (!inode->i_sb->u.isofs_sb.s_rock) return 0;
+ if (!ISOFS_SB(inode->i_sb)->s_rock) return 0;
*retname = 0;
SETUP_ROCK_RIDGE(de, chr, len);
@@ -234,7 +234,7 @@ int parse_rock_ridge_inode_internal(struct iso_directory_record * de,
int symlink_len = 0;
CONTINUE_DECLS;
- if (!inode->i_sb->u.isofs_sb.s_rock) return 0;
+ if (!ISOFS_SB(inode->i_sb)->s_rock) return 0;
SETUP_ROCK_RIDGE(de, chr, len);
if (regard_xa)
@@ -272,7 +272,7 @@ int parse_rock_ridge_inode_internal(struct iso_directory_record * de,
CHECK_CE;
break;
case SIG('E','R'):
- inode->i_sb->u.isofs_sb.s_rock = 1;
+ ISOFS_SB(inode->i_sb)->s_rock = 1;
printk(KERN_DEBUG "ISO 9660 Extensions: ");
{ int p;
for(p=0;p<rr->u.ER.len_id;p++) printk("%c",rr->u.ER.data[p]);
@@ -368,7 +368,7 @@ int parse_rock_ridge_inode_internal(struct iso_directory_record * de,
ISOFS_I(inode)->i_first_extent = isonum_733(rr->u.CL.location);
reloc = iget(inode->i_sb,
(ISOFS_I(inode)->i_first_extent <<
- inode -> i_sb -> u.isofs_sb.s_log_zone_size));
+ ISOFS_SB(inode->i_sb)->s_log_zone_size));
if (!reloc)
goto out;
inode->i_mode = reloc->i_mode;
@@ -385,7 +385,7 @@ int parse_rock_ridge_inode_internal(struct iso_directory_record * de,
break;
#ifdef CONFIG_ZISOFS
case SIG('Z','F'):
- if ( !inode->i_sb->u.isofs_sb.s_nocompress ) {
+ if ( !ISOFS_SB(inode->i_sb)->s_nocompress ) {
int algo;
algo = isonum_721(rr->u.ZF.algorithm);
if ( algo == SIG('p','z') ) {
@@ -478,8 +478,8 @@ int parse_rock_ridge_inode(struct iso_directory_record * de,
int result=parse_rock_ridge_inode_internal(de,inode,0);
/* if rockridge flag was reset and we didn't look for attributes
* behind eventual XA attributes, have a look there */
- if ((inode->i_sb->u.isofs_sb.s_rock_offset==-1)
- &&(inode->i_sb->u.isofs_sb.s_rock==2))
+ if ((ISOFS_SB(inode->i_sb)->s_rock_offset==-1)
+ &&(ISOFS_SB(inode->i_sb)->s_rock==2))
{
result=parse_rock_ridge_inode_internal(de,inode,14);
};
@@ -506,7 +506,7 @@ static int rock_ridge_symlink_readpage(struct file *file, struct page *page)
unsigned char *chr;
struct rock_ridge *rr;
- if (!inode->i_sb->u.isofs_sb.s_rock)
+ if (!ISOFS_SB(inode->i_sb)->s_rock)
panic ("Cannot have symlink with high sierra variant of iso filesystem\n");
block = inode->i_ino >> bufbits;
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 0e668a01a592..2edd4015fb61 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -1413,12 +1413,17 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
struct inode *inode=NULL;
struct udf_options uopt;
lb_addr rootdir, fileset;
+ struct udf_sb_info *sbi;
uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
uopt.uid = -1;
uopt.gid = -1;
uopt.umask = 0;
+ sbi = kmalloc(sizeof(struct udf_sb_info), GFP_KERNEL);
+ if (!sbi)
+ return -ENOMEM;
+ sb->u.generic_sbp = sbi;
memset(UDF_SB(sb), 0x00, sizeof(struct udf_sb_info));
#if UDFFS_RW != 1
@@ -1607,6 +1612,8 @@ error_out:
udf_close_lvid(sb);
udf_release_data(UDF_SB_LVIDBH(sb));
UDF_SB_FREE(sb);
+ kfree(sbi);
+ sb->u.generic_sbp = NULL;
return -EINVAL;
}
@@ -1697,6 +1704,8 @@ udf_put_super(struct super_block *sb)
udf_close_lvid(sb);
udf_release_data(UDF_SB_LVIDBH(sb));
UDF_SB_FREE(sb);
+ kfree(sb->u.generic_sbp);
+ sb->u.generic_sbp = NULL;
}
/*
diff --git a/fs/udf/udf_sb.h b/fs/udf/udf_sb.h
index 0dde99415c97..2b264e1cf49a 100644
--- a/fs/udf/udf_sb.h
+++ b/fs/udf/udf_sb.h
@@ -30,6 +30,11 @@
#define UDF_PART_FLAG_REWRITABLE 0x0040
#define UDF_PART_FLAG_OVERWRITABLE 0x0080
+static inline struct udf_sb_info *UDF_SB(struct super_block *sb)
+{
+ return sb->u.generic_sbp;
+}
+
#define UDF_SB_FREE(X)\
{\
if (UDF_SB(X))\
@@ -39,7 +44,6 @@
UDF_SB_PARTMAPS(X) = NULL;\
}\
}
-#define UDF_SB(X) (&((X)->u.udf_sb))
#define UDF_SB_ALLOC_PARTMAPS(X,Y)\
{\
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
index 836aef50cded..1b4d5a5d1401 100644
--- a/fs/udf/udfdecl.h
+++ b/fs/udf/udfdecl.h
@@ -8,6 +8,8 @@
#include <linux/fs.h>
#include <linux/config.h>
#include <linux/types.h>
+#include <linux/udf_fs_i.h>
+#include <linux/udf_fs_sb.h>
#ifndef LINUX_VERSION_CODE
#include <linux/version.h>
@@ -15,8 +17,6 @@
#if !defined(CONFIG_UDF_FS) && !defined(CONFIG_UDF_FS_MODULE)
#define CONFIG_UDF_FS_MODULE
-#include <linux/udf_fs_i.h>
-#include <linux/udf_fs_sb.h>
#endif
#include "udfend.h"
diff --git a/include/asm-ppc/siginfo.h b/include/asm-ppc/siginfo.h
index 684ad91eb8d7..597b234d1b44 100644
--- a/include/asm-ppc/siginfo.h
+++ b/include/asm-ppc/siginfo.h
@@ -99,7 +99,6 @@ typedef struct siginfo {
/*
* si_code values
- * Digital reserves positive values for kernel-generated signals.
*/
#define SI_USER 0 /* sent by kill, sigsend, raise */
#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
@@ -109,6 +108,7 @@ typedef struct siginfo {
#define SI_ASYNCIO -4 /* sent by AIO completion */
#define SI_SIGIO -5 /* sent by queued SIGIO */
#define SI_TKILL -6 /* sent by tkill system call */
+#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
diff --git a/include/asm-ppc/thread_info.h b/include/asm-ppc/thread_info.h
index 0ea0afd7e48e..b98527161019 100644
--- a/include/asm-ppc/thread_info.h
+++ b/include/asm-ppc/thread_info.h
@@ -18,10 +18,11 @@
* If you change this, change the TI_* offsets below to match.
*/
struct thread_info {
- struct task_struct *task; /* main task structure */
- struct exec_domain *exec_domain; /* execution domain */
- unsigned long flags; /* low level flags */
- int cpu; /* cpu we're on */
+ struct task_struct *task; /* main task structure */
+ struct exec_domain *exec_domain; /* execution domain */
+ unsigned long flags; /* low level flags */
+ int cpu; /* cpu we're on */
+ int preempt_count; /* not used at present */
};
/*
diff --git a/include/linux/fs.h b/include/linux/fs.h
index d05052fa4461..1600f74d5410 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -648,7 +648,6 @@ struct quota_mount_options
#include <linux/ext3_fs_sb.h>
#include <linux/hpfs_fs_sb.h>
#include <linux/ntfs_fs_sb.h>
-#include <linux/iso_fs_sb.h>
#include <linux/sysv_fs_sb.h>
#include <linux/affs_fs_sb.h>
#include <linux/ufs_fs_sb.h>
@@ -657,7 +656,6 @@ struct quota_mount_options
#include <linux/adfs_fs_sb.h>
#include <linux/reiserfs_fs_sb.h>
#include <linux/bfs_fs_sb.h>
-#include <linux/udf_fs_sb.h>
extern struct list_head super_blocks;
extern spinlock_t sb_lock;
@@ -696,7 +694,6 @@ struct super_block {
struct ext3_sb_info ext3_sb;
struct hpfs_sb_info hpfs_sb;
struct ntfs_sb_info ntfs_sb;
- struct isofs_sb_info isofs_sb;
struct sysv_sb_info sysv_sb;
struct affs_sb_info affs_sb;
struct ufs_sb_info ufs_sb;
@@ -706,7 +703,6 @@ struct super_block {
struct adfs_sb_info adfs_sb;
struct reiserfs_sb_info reiserfs_sb;
struct bfs_sb_info bfs_sb;
- struct udf_sb_info udf_sb;
void *generic_sbp;
} u;
/*
diff --git a/include/linux/if_wanpipe.h b/include/linux/if_wanpipe.h
index 544d818d9f73..c4cd29a162fe 100644
--- a/include/linux/if_wanpipe.h
+++ b/include/linux/if_wanpipe.h
@@ -122,6 +122,7 @@ struct wanpipe_opt
unsigned poll_cnt;
unsigned char force; /* Used to force sock release */
atomic_t packet_sent;
+ unsigned short num;
};
#define wp_sk(__sk) ((struct wanpipe_opt *)(__sk)->protinfo)
diff --git a/include/linux/iso_fs.h b/include/linux/iso_fs.h
index b235c3ea9f23..3520e22a2af8 100644
--- a/include/linux/iso_fs.h
+++ b/include/linux/iso_fs.h
@@ -160,7 +160,6 @@ struct iso_directory_record {
#define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize)
#define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits)
-#define ISOFS_ZONE_BITS(INODE) ((INODE)->i_sb->u.isofs_sb.s_log_zone_size)
#define ISOFS_SUPER_MAGIC 0x9660
@@ -171,6 +170,12 @@ struct iso_directory_record {
#include <asm/byteorder.h>
#include <asm/unaligned.h>
#include <linux/iso_fs_i.h>
+#include <linux/iso_fs_sb.h>
+
+static inline struct isofs_sb_info *ISOFS_SB(struct super_block *sb)
+{
+ return sb->u.generic_sbp;
+}
static inline struct iso_inode_info *ISOFS_I(struct inode *inode)
{
diff --git a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c
index 5fa94340daf9..b93dd0167679 100644
--- a/net/ipv4/netfilter/ip_conntrack_standalone.c
+++ b/net/ipv4/netfilter/ip_conntrack_standalone.c
@@ -38,7 +38,7 @@ MODULE_LICENSE("GPL");
static int kill_proto(const struct ip_conntrack *i, void *data)
{
- return (i->tuplehash[IP_CT_DIR_ORIGINAL].dst.protonum ==
+ return (i->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum ==
*((u_int8_t *) data));
}
diff --git a/net/wanrouter/af_wanpipe.c b/net/wanrouter/af_wanpipe.c
index 88a4e1356ed3..0a9f62073788 100644
--- a/net/wanrouter/af_wanpipe.c
+++ b/net/wanrouter/af_wanpipe.c
@@ -19,6 +19,7 @@
* Alan Cox.
* X25 socket Author: Jonathan Naylor.
* ============================================================================
+* Mar 15, 2002 Arnaldo C. Melo o Use wp_sk()->num, as it isnt anymore in sock
* Apr 25, 2000 Nenad Corbic o Added the ability to send zero length packets.
* Mar 13, 2000 Nenad Corbic o Added a tx buffer check via ioctl call.
* Mar 06, 2000 Nenad Corbic o Fixed the corrupt sock lcn problem.
@@ -164,11 +165,11 @@ static void dbg_kfree(void * v, int line) {
/* List of all wanpipe sockets. */
-struct sock * wanpipe_sklist = NULL;
+struct sock* wanpipe_sklist;
static rwlock_t wanpipe_sklist_lock = RW_LOCK_UNLOCKED;
atomic_t wanpipe_socks_nr;
-static unsigned long wanpipe_tx_critical=0;
+static unsigned long wanpipe_tx_critical;
#if 0
/* Private wanpipe socket structures. */
@@ -187,9 +188,9 @@ struct wanpipe_opt
};
#endif
-static int sk_count=0;
+static int sk_count;
extern struct proto_ops wanpipe_ops;
-static unsigned long find_free_critical=0;
+static unsigned long find_free_critical;
static void wanpipe_unlink_driver (struct sock *);
static void wanpipe_link_driver (netdevice_t *,struct sock *sk);
@@ -400,9 +401,9 @@ static int wanpipe_listen_rcv (struct sk_buff *skb, struct sock *sk)
card->u.x.svc_to_dev_map[(chan->lcn%MAX_X25_LCN)] = dev;
newsk->zapped=0;
- newsk->num = htons(X25_PROT);
+ newwp->num = htons(X25_PROT);
- if (wanpipe_do_bind(newsk,dev,newsk->num)){
+ if (wanpipe_do_bind(newsk, dev, newwp->num)) {
wanpipe_kill_sock_irq (newsk);
release_device(dev);
return -EINVAL;
@@ -470,7 +471,7 @@ static struct sock *wanpipe_make_new(struct sock *osk)
sk->socket = osk->socket;
sk->priority = osk->priority;
sk->protocol = osk->protocol;
- sk->num = osk->num;
+ wp_sk(sk)->num = wp_sk(osk)->num;
sk->rcvbuf = osk->rcvbuf;
sk->sndbuf = osk->sndbuf;
sk->debug = osk->debug;
@@ -566,9 +567,11 @@ static int wanpipe_sendmsg(struct socket *sock, struct msghdr *msg, int len,
if (len < sizeof(x25api_hdr_t))
return -EINVAL;
+ wp = wp_sk(sk);
+
if (saddr == NULL) {
ifindex = sk->bound_dev_if;
- proto = sk->num;
+ proto = wp->num;
addr = NULL;
}else{
@@ -648,7 +651,6 @@ static int wanpipe_sendmsg(struct socket *sock, struct msghdr *msg, int len,
}
skb_queue_tail(&sk->write_queue,skb);
- wp = wp_sk(sk);
atomic_inc(&wp->packet_sent);
if (!(test_and_set_bit(0, &wp->timer))){
@@ -998,7 +1000,8 @@ static int wanpipe_release(struct socket *sock, struct socket *peersock)
* Unhook packet receive handler.
*/
- if (sk->num == htons(X25_PROT) && sk->state != WANSOCK_DISCONNECTED && sk->zapped){
+ if (wp->num == htons(X25_PROT) &&
+ sk->state != WANSOCK_DISCONNECTED && sk->zapped) {
netdevice_t *dev = dev_get_by_index(sk->bound_dev_if);
wanpipe_common_t *chan;
if (dev){
@@ -1206,7 +1209,8 @@ static void wanpipe_kill_sock_timer (unsigned long data)
write_unlock(&wanpipe_sklist_lock);
- if (sk->num == htons(X25_PROT) && sk->state != WANSOCK_DISCONNECTED){
+ if (wp_sk(sk)->num == htons(X25_PROT) &&
+ sk->state != WANSOCK_DISCONNECTED){
netdevice_t *dev = dev_get_by_index(sk->bound_dev_if);
wanpipe_common_t *chan;
if (dev){
@@ -1352,6 +1356,7 @@ static void wanpipe_kill_sock_irq (struct sock *sk)
static int wanpipe_do_bind(struct sock *sk, netdevice_t *dev, int protocol)
{
+ wanpipe_opt *wp = wp_sk(sk);
wanpipe_common_t *chan=NULL;
int err=0;
@@ -1360,7 +1365,7 @@ static int wanpipe_do_bind(struct sock *sk, netdevice_t *dev, int protocol)
goto bind_unlock_exit;
}
- sk->num = protocol;
+ wp->num = protocol;
if (protocol == 0){
release_device(dev);
@@ -1373,7 +1378,7 @@ static int wanpipe_do_bind(struct sock *sk, netdevice_t *dev, int protocol)
chan=dev->priv;
sk->state = chan->state;
- if (sk->num == htons(X25_PROT) &&
+ if (wp->num == htons(X25_PROT) &&
sk->state != WANSOCK_DISCONNECTED &&
sk->state != WANSOCK_CONNECTING){
DBG_PRINTK(KERN_INFO
@@ -1388,7 +1393,7 @@ static int wanpipe_do_bind(struct sock *sk, netdevice_t *dev, int protocol)
sk->bound_dev_if = dev->ifindex;
/* X25 Specific option */
- if (sk->num == htons(X25_PROT))
+ if (wp->num == htons(X25_PROT))
wp_sk(sk)->svc = chan->svc;
} else {
@@ -1421,6 +1426,7 @@ static int wanpipe_bind(struct socket *sock, struct sockaddr *uaddr, int addr_le
{
struct wan_sockaddr_ll *sll = (struct wan_sockaddr_ll*)uaddr;
struct sock *sk=sock->sk;
+ wanpipe_opt *wp = wp_sk(sk);
netdevice_t *dev = NULL;
sdla_t *card=NULL;
char name[15];
@@ -1462,7 +1468,7 @@ static int wanpipe_bind(struct socket *sock, struct sockaddr *uaddr, int addr_le
return err;
if (sll->sll_protocol)
- sk->num = sll->sll_protocol;
+ wp->num = sll->sll_protocol;
sk->state = WANSOCK_BIND_LISTEN;
return 0;
@@ -1509,7 +1515,7 @@ static int wanpipe_bind(struct socket *sock, struct sockaddr *uaddr, int addr_le
return -EINVAL;
}
- return wanpipe_do_bind(sk, dev, sll->sll_protocol ? : sk->num);
+ return wanpipe_do_bind(sk, dev, sll->sll_protocol ? : wp->num);
}
/*============================================================
@@ -1613,7 +1619,7 @@ static int wanpipe_create(struct socket *sock, int protocol)
sk->zapped=0;
sk->family = PF_WANPIPE;
- sk->num = protocol;
+ wp_sk(sk)->num = protocol;
sk->state = WANSOCK_DISCONNECTED;
sk->ack_backlog = 0;
sk->bound_dev_if=0;
@@ -1774,7 +1780,7 @@ static int wanpipe_getname(struct socket *sock, struct sockaddr *uaddr,
sll->sll_family = AF_WANPIPE;
sll->sll_ifindex = sk->bound_dev_if;
- sll->sll_protocol = sk->num;
+ sll->sll_protocol = wp_sk(sk)->num;
dev = dev_get_by_index(sk->bound_dev_if);
if (dev) {
sll->sll_hatype = dev->type;
@@ -1836,7 +1842,8 @@ static int wanpipe_notifier(struct notifier_block *this, unsigned long msg, void
}
break;
case NETDEV_UP:
- if (dev->ifindex == sk->bound_dev_if && sk->num && !sk->zapped) {
+ if (dev->ifindex == sk->bound_dev_if &&
+ po->num && !sk->zapped) {
printk(KERN_INFO "wansock: Registering Device: %s\n",
dev->name);
wanpipe_link_driver(dev,sk);
@@ -2242,7 +2249,7 @@ unsigned int wanpipe_poll(struct file * file, struct socket *sock, poll_table *w
* where multiple packets can be pending in the socket
* transmit queue */
- if (sk->num == htons(X25_PROT)){
+ if (wp_sk(sk)->num == htons(X25_PROT)) {
if (atomic_read(&wp_sk(sk)->packet_sent))
return mask;
}
@@ -2274,7 +2281,7 @@ static int wanpipe_listen(struct socket *sock, int backlog)
/* This is x25 specific area if protocol doesn't
* match, return error */
- if (sk->num != htons(X25_PROT))
+ if (wp_sk(sk)->num != htons(X25_PROT))
return -EINVAL;
if (sk->state == WANSOCK_BIND_LISTEN) {
@@ -2352,7 +2359,7 @@ static int wanpipe_exec_cmd(struct sock *sk, int cmd, unsigned int flags)
/* This is x25 specific area if protocol doesn't
* match, return error */
- if (sk->num != htons(X25_PROT))
+ if (wp->num != htons(X25_PROT))
return -EINVAL;
@@ -2535,7 +2542,7 @@ static int wanpipe_accept(struct socket *sock, struct socket *newsock, int flags
if (sk->state != WANSOCK_LISTEN)
return -EINVAL;
- if (sk->num != htons(X25_PROT))
+ if (wp_sk(sk)->num != htons(X25_PROT))
return -EINVAL;
add_wait_queue(sk->sleep,&wait);
@@ -2628,7 +2635,7 @@ static int wanpipe_connect(struct socket *sock, struct sockaddr *uaddr, int addr
netdevice_t *dev;
int err;
- if (sk->num != htons(X25_PROT))
+ if (wp_sk(sk)->num != htons(X25_PROT))
return -EINVAL;
if (sk->state == WANSOCK_CONNECTED)