From 1235b44f37277c7191d1f292cfccf1a81b13300e Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 23 Nov 2007 15:09:37 -0500 Subject: [PATCH] Import 1.1.40 --- Makefile | 2 +- drivers/char/tty_io.c | 2 -- drivers/char/tty_ioctl.c | 3 --- drivers/net/8390.c | 5 ---- drivers/scsi/NCR5380.c | 4 +-- drivers/scsi/aha1542.c | 1 + drivers/scsi/constants.h | 2 +- drivers/scsi/g_NCR5380.c | 2 +- drivers/scsi/pas16.c | 2 +- drivers/scsi/scsi.c | 2 -- drivers/scsi/sd.c | 1 + drivers/scsi/seagate.c | 2 +- drivers/scsi/sg.c | 1 + drivers/scsi/sr.c | 1 + drivers/scsi/st.c | 1 + drivers/sound/pas2_mixer.c | 13 --------- fs/Makefile | 2 +- fs/exec.c | 2 -- fs/ext2/super.c | 2 -- fs/isofs/dir.c | 52 +++++++++++++++++------------------ fs/isofs/file.c | 22 +++++++++------ fs/isofs/inode.c | 55 +++++++++++++++++++++++--------------- fs/isofs/namei.c | 35 ++++++++++-------------- fs/isofs/rock.c | 16 +++++++---- fs/msdos/dir.c | 4 --- fs/proc/base.c | 1 - fs/proc/fd.c | 50 +++++++++++----------------------- fs/proc/inode.c | 1 - fs/super.c | 1 + include/linux/iso_fs.h | 10 ------- include/linux/proc_fs.h | 1 - init/main.c | 1 - kernel/bios32.c | 2 +- kernel/ksyms.c | 14 ++-------- kernel/panic.c | 2 -- kernel/printk.c | 1 - net/inet/dev.c | 1 - net/inet/icmp.c | 1 - 38 files changed, 129 insertions(+), 191 deletions(-) diff --git a/Makefile b/Makefile index fa4d8b58f112..f5eaef41b11f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 1 -SUBLEVEL = 39 +SUBLEVEL = 40 all: Version zImage diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index cbed2d97ae96..be594b0639e8 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -439,8 +439,6 @@ int vt_waitactive(void) #define vt_wake_waitactive() wake_up(&vt_activate_queue) -extern int kill_proc(int pid, int sig, int priv); - /* * Performs the back end of a vt switch */ diff --git a/drivers/char/tty_ioctl.c b/drivers/char/tty_ioctl.c index 21a084e3cb2b..f3d1c1bc8e2f 100644 --- a/drivers/char/tty_ioctl.c +++ b/drivers/char/tty_ioctl.c @@ -31,9 +31,6 @@ # define PRINTK(x) /**/ #endif -extern int session_of_pgrp(int pgrp); -extern int kill_pg(int pgrp, int sig, int priv); - void wait_until_sent(struct tty_struct * tty, int timeout) { struct wait_queue wait = { current, NULL }; diff --git a/drivers/net/8390.c b/drivers/net/8390.c index 2786d962fb72..57029c81a5c9 100644 --- a/drivers/net/8390.c +++ b/drivers/net/8390.c @@ -85,15 +85,11 @@ int ei_debug = 1; static int high_water_mark = 0; /* Index to functions. */ -int ei_open(struct device *dev); /* Put into the device structure. */ -void ei_interrupt(int reg_ptr); /* Installed as the interrupt handler. */ - static void ei_tx_intr(struct device *dev); static void ei_receive(struct device *dev); static void ei_rx_overrun(struct device *dev); /* Routines generic to NS8390-based boards. */ -void NS8390_init(struct device *dev, int startp); static void NS8390_trigger_send(struct device *dev, unsigned int length, int start_page); #ifdef HAVE_MULTICAST @@ -288,7 +284,6 @@ void ei_interrupt(int reg_ptr) if (interrupts & ENISR_TX) { ei_tx_intr(dev); } else if (interrupts & ENISR_COUNTERS) { - struct ei_device *ei_local = (struct ei_device *) dev->priv; ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0); ei_local->stat.rx_crc_errors += inb_p(e8390_base + EN0_COUNTER1); ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2); diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index 2791df25a2ba..2b0ff9c7f276 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -2737,7 +2737,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd) { * * Purpose : reset the SCSI bus. * - * Returns : 0 + * Returns : SCSI_RESET_WAKEUP * */ @@ -2756,6 +2756,6 @@ int NCR5380_reset (Scsi_Cmnd *cmd) { NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); sti(); - return 0; + return SCSI_RESET_WAKEUP; } diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c index 70f693ed2445..695b460340d5 100644 --- a/drivers/scsi/aha1542.c +++ b/drivers/scsi/aha1542.c @@ -1083,6 +1083,7 @@ int aha1542_reset(Scsi_Cmnd * SCpnt) SCtmp->scsi_done(SCpnt); HOSTDATA(SCpnt->host)->SCint[i] = NULL; + HOSTDATA(SCpnt->host)->mb[i].status = 0; } return SCSI_RESET_SUCCESS; #else diff --git a/drivers/scsi/constants.h b/drivers/scsi/constants.h index 15f874417138..d3db95b8c521 100644 --- a/drivers/scsi/constants.h +++ b/drivers/scsi/constants.h @@ -3,5 +3,5 @@ extern void print_command(unsigned char *); extern int print_msg(unsigned char *); extern void print_sense(char *, Scsi_Cmnd *); -extern void print_status(int);; +extern void print_status(int); #endif /* def _CONSTANTS_H */ diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c index 1a2d526ff442..11e3fd7b6a9a 100644 --- a/drivers/scsi/g_NCR5380.c +++ b/drivers/scsi/g_NCR5380.c @@ -131,7 +131,7 @@ int generic_NCR5380_detect(Scsi_Host_Template * tpnt) { instance = scsi_register (tpnt, sizeof(struct NCR5380_hostdata)); instance->io_port = overrides[current_override].port; - NCR5380_init(instance); + NCR5380_init(instance, 0); if (overrides[current_override].irq != IRQ_AUTO) instance->irq = overrides[current_override].irq; diff --git a/drivers/scsi/pas16.c b/drivers/scsi/pas16.c index 9cef9c38df30..b5153e4cd838 100644 --- a/drivers/scsi/pas16.c +++ b/drivers/scsi/pas16.c @@ -360,7 +360,7 @@ int pas16_detect(Scsi_Host_Template * tpnt) { instance = scsi_register (tpnt, sizeof(struct NCR5380_hostdata)); instance->io_port = io_port; - NCR5380_init(instance); + NCR5380_init(instance, 0); if (overrides[current_override].irq != IRQ_AUTO) instance->irq = overrides[current_override].irq; diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 38bb5c6ae55a..77a5353b2ffe 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -384,7 +384,6 @@ static void scan_scsis (struct Scsi_Host * shpnt) if (type != -1) { - struct Scsi_Device_Template * sdtpnt; print_inquiry(scsi_result); for(sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next) @@ -767,7 +766,6 @@ update_timeout(SCpnt, SCpnt->timeout_per_command); if (host->hostt->can_queue) { - extern unsigned long intr_count; #ifdef DEBUG printk("queuecommand : routine at %08x\n", host->hostt->queuecommand); diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index a921bbed8988..a056e8365d17 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -1014,6 +1014,7 @@ static void sd_init() rscsi_disks = (Scsi_Disk *) scsi_init_malloc(sd_template.dev_max * sizeof(Scsi_Disk)); + memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk)); sd_sizes = (int *) scsi_init_malloc((sd_template.dev_max << 4) * sizeof(int)); diff --git a/drivers/scsi/seagate.c b/drivers/scsi/seagate.c index e2e7cd10c5ca..945ea2400cbe 100644 --- a/drivers/scsi/seagate.c +++ b/drivers/scsi/seagate.c @@ -672,7 +672,7 @@ static int internal_command(unsigned char target, unsigned char lun, const void */ for (clock = jiffies + 10, temp = 0; (jiffies < clock) && - !((temp = STATUS) & STAT_IO) || (STAT & STAT_BSY);); + !((temp = STATUS) & (STAT_IO | STAT_BSY));); if (jiffies >= clock) { diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 73013f437c31..936a48b12be8 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -340,6 +340,7 @@ static void sg_init() scsi_generics = (struct scsi_generic *) scsi_init_malloc(sg_template.dev_noticed * sizeof(struct scsi_generic)); + memset(scsi_generics, 0, sg_template.dev_noticed * sizeof(struct scsi_generic)); sg_template.dev_max = sg_template.dev_noticed; } diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index b0bb647a8b62..f10dfc711c38 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -768,6 +768,7 @@ static void sr_init() sr_template.dev_max = sr_template.dev_noticed; scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD)); + memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD)); sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int)); memset(sr_sizes, 0, sr_template.dev_max * sizeof(int)); diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 8e2007c55114..7da12b8ac442 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c @@ -1750,6 +1750,7 @@ static void st_init() for (i=0, SDp = scsi_devices; i < st_template.dev_noticed; ++i) { STp = &(scsi_tapes[i]); + STp->device = NULL; STp->capacity = 0xfffff; STp->dirty = 0; STp->rw = ST_IDLE; diff --git a/drivers/sound/pas2_mixer.c b/drivers/sound/pas2_mixer.c index c125b47c181a..df8aa3733d0c 100644 --- a/drivers/sound/pas2_mixer.c +++ b/drivers/sound/pas2_mixer.c @@ -289,19 +289,6 @@ pas_mixer_set (int whichDev, unsigned int level) /*****/ -static int -getmixer (int dev, int chn) -{ - if (chn == P_M_MV508_RIGHT) - { - return (levels[dev] >> 8) & 0x7f; - } - else - { - return levels[dev] & 0x7f; - } -} - static void pas_mixer_reset (void) { diff --git a/fs/Makefile b/fs/Makefile index 080358b48371..8e423bfb11fb 100644 --- a/fs/Makefile +++ b/fs/Makefile @@ -7,7 +7,7 @@ # # Note 2! The CFLAGS definitions are now in the main makefile... -SUBDIRS = minix ext ext2 msdos proc isofs nfs xiafs hpfs sysv +SUBDIRS = minix ext ext2 msdos proc isofs nfs xiafs umsdos hpfs sysv ifdef CONFIG_MINIX_FS FS_SUBDIRS := $(FS_SUBDIRS) minix diff --git a/fs/exec.c b/fs/exec.c index 0ad8c5e293b1..ec78844cacf9 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -48,8 +48,6 @@ #include asmlinkage int sys_exit(int exit_code); -asmlinkage int sys_close(unsigned fd); -asmlinkage int sys_open(const char *, int, int); asmlinkage int sys_brk(unsigned long); extern void shm_exit (void); diff --git a/fs/ext2/super.c b/fs/ext2/super.c index ee919e2f16bd..9bd3790e1ad6 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -25,8 +25,6 @@ #include #include -extern int vsprintf (char *, const char *, va_list); - void ext2_error (struct super_block * sb, const char * function, const char * fmt, ...) { diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c index 7d8260f5f881..3097b65097f5 100644 --- a/fs/isofs/dir.c +++ b/fs/isofs/dir.c @@ -57,12 +57,6 @@ struct inode_operations isofs_dir_inode_operations = { NULL /* permission */ }; -/* This is used to speed up lookup. Without this we would need to -make a linear search of the directory to find the file that the -directory read just returned. This is a single element cache. */ - -struct lookup_cache cache = {0,}; - static int isofs_readdir(struct inode * inode, struct file * filp, struct dirent * dirent, int count) { @@ -75,9 +69,10 @@ static int isofs_readdir(struct inode * inode, struct file * filp, void * cpnt = NULL; unsigned int old_offset; int dlen, rrflag; - char * dpnt; + char * dpnt, *dpnt1; struct iso_directory_record * de; + dpnt1 = NULL; if (!inode || !S_ISDIR(inode->i_mode)) return -EBADF; @@ -124,20 +119,21 @@ static int isofs_readdir(struct inode * inode, struct file * filp, filp->f_pos += *((unsigned char *) de); if (offset >= bufsize) { - cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL); - memcpy(cpnt, bh->b_data, bufsize); - de = (struct iso_directory_record *) - ((char *)cpnt + old_offset); + unsigned int frag1; + frag1 = bufsize - old_offset; + cpnt = kmalloc(*((unsigned char *) de),GFP_KERNEL); + memcpy(cpnt, bh->b_data + old_offset, frag1); + de = (struct iso_directory_record *) ((char *)cpnt); brelse(bh); offset = filp->f_pos & (bufsize - 1); block = isofs_bmap(inode,(filp->f_pos)>> bufbits); if (!block || !(bh = breada(inode->i_dev, block, bufsize, filp->f_pos, inode->i_size))) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); return 0; }; - memcpy((char *)cpnt+bufsize, bh->b_data, bufsize); + memcpy((char *)cpnt+frag1, bh->b_data, offset); } /* Handle the case of the '.' directory */ @@ -186,7 +182,7 @@ static int isofs_readdir(struct inode * inode, struct file * filp, if (rrflag) { if (rrflag == -1) { /* This is a rock ridge reloc dir */ if (cpnt) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); cpnt = NULL; }; continue; @@ -194,9 +190,11 @@ static int isofs_readdir(struct inode * inode, struct file * filp, i = dlen; } else - if(inode->i_sb->u.isofs_sb.s_mapping == 'n') + if(inode->i_sb->u.isofs_sb.s_mapping == 'n') { + dpnt1 = dpnt; + dpnt = kmalloc(dlen, GFP_KERNEL); for (i = 0; i < dlen && i < NAME_MAX; i++) { - if (!(c = dpnt[i])) break; + if (!(c = dpnt1[i])) break; if (c >= 'A' && c <= 'Z') c |= 0x20; /* lower case */ if (c == '.' && i == dlen-3 && de->name[i+1] == ';' && de->name[i+2] == '1') break; /* Drop trailing '.;1' (ISO9660:1988 7.5.1 requires period) */ @@ -204,26 +202,24 @@ static int isofs_readdir(struct inode * inode, struct file * filp, break; /* Drop trailing ';1' */ if (c == ';') c = '.'; /* Convert remaining ';' to '.' */ dpnt[i] = c; - }; - + } + } for(j=0; jd_name); /* And save it */ + if(dpnt1) { + kfree(dpnt); + dpnt = dpnt1; + } + + dcache_add(inode, dpnt, i, inode_number); }; #if 0 printk("Nchar: %d\n",i); #endif - if (i && i+1 < sizeof(cache.filename)) { - cache.ino = inode_number; - cache.dir = inode->i_ino; - cache.dev = inode->i_dev; - strncpy(cache.filename, dpnt, i); - cache.dlen = dlen; - }; - if (rrflag) kfree(dpnt); if (cpnt) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); cpnt = NULL; }; @@ -239,7 +235,7 @@ static int isofs_readdir(struct inode * inode, struct file * filp, to here at the end of the directory. */ out: if (cpnt) - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); brelse(bh); return 0; } diff --git a/fs/isofs/file.c b/fs/isofs/file.c index 03cf412d14e4..05c680477f33 100644 --- a/fs/isofs/file.c +++ b/fs/isofs/file.c @@ -72,14 +72,19 @@ struct inode_operations isofs_file_inode_operations = { * a 0x0a. A control-Z is also turned into a linefeed. */ -static inline void unixify_text_buffer(char * buffer, int chars, int mode) +static inline void unixify_to_fs(char * outbuf, char * buffer, int chars, + int mode) { + char outchar; + while(chars--){ - if(*buffer == 0x1a) *buffer = 0x0a; - if(*buffer == 0x0d){ - if(mode == ISOFS_FILE_TEXT_M) *buffer = 0x0a; - if(mode == ISOFS_FILE_TEXT) *buffer = ' '; + outchar = *buffer; + if(outchar == 0x1a) outchar = 0x0a; + if(outchar == 0x0d){ + if(mode == ISOFS_FILE_TEXT_M) outchar = 0x0a; + if(mode == ISOFS_FILE_TEXT) outchar = ' '; } + put_fs_byte(outchar, outbuf++); buffer++; } } @@ -210,9 +215,10 @@ static int isofs_file_read(struct inode * inode, struct file * filp, char * buf, if (*bhe) { if (inode->u.isofs_i.i_file_format == ISOFS_FILE_TEXT || inode->u.isofs_i.i_file_format == ISOFS_FILE_TEXT_M) - unixify_text_buffer(offset+(*bhe)->b_data, - chars, inode->u.isofs_i.i_file_format); - memcpy_tofs(buf,offset+(*bhe)->b_data,chars); + unixify_to_fs(buf, offset+(*bhe)->b_data, chars, + inode->u.isofs_i.i_file_format); + else + memcpy_tofs(buf,offset+(*bhe)->b_data,chars); brelse(*bhe); buf += chars; } else { diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 89f11d5ed3f4..dc38d22856e2 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -346,22 +346,26 @@ void isofs_read_inode(struct inode * inode) high_sierra = inode->i_sb->u.isofs_sb.s_high_sierra; if ((inode->i_ino & (bufsize - 1)) + *pnt > bufsize){ - cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL); + int frag1, offset; + + offset = (inode->i_ino & (bufsize - 1)); + frag1 = bufsize - offset; + cpnt = kmalloc(*pnt,GFP_KERNEL); if (cpnt == NULL) { printk(KERN_INFO "NoMem ISO inode %lu\n",inode->i_ino); brelse(bh); goto fail; } - memcpy(cpnt, bh->b_data, bufsize); + memcpy(cpnt, bh->b_data + offset, frag1); brelse(bh); if (!(bh = bread(inode->i_dev,++block, bufsize))) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); printk("unable to read i-node block"); goto fail; } - memcpy((char *)cpnt + bufsize, bh->b_data, bufsize); - pnt = ((unsigned char *) cpnt - + (inode->i_ino & (bufsize - 1))); + offset += *pnt - bufsize; + memcpy((char *)cpnt+frag1, bh->b_data, offset); + pnt = ((unsigned char *) cpnt); raw_inode = ((struct iso_directory_record *) pnt); } @@ -370,8 +374,11 @@ void isofs_read_inode(struct inode * inode) if (raw_inode->flags[-high_sierra] & 2) { inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR; - inode->i_nlink = 2; /* There are always at least 2. It is - hard to figure out what is correct*/ + inode->i_nlink = 1; /* Set to 1. We know there are 2, but + the find utility tries to optimize + if it is 2, and it screws up. It is + easier to give 1 which tells find to + do it the hard way. */ } else { inode->i_mode = S_IRUGO; /* Everybody gets to read the file. */ inode->i_nlink = 1; @@ -491,7 +498,7 @@ void isofs_read_inode(struct inode * inode) init_fifo(inode); } if (cpnt) { - kfree_s (cpnt, 1 << ISOFS_BLOCK_BITS); + kfree (cpnt); cpnt = NULL; } return; @@ -536,6 +543,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) int old_offset; void * cpnt = NULL; int result; + int directory_size; struct buffer_head * bh; struct iso_directory_record * de; @@ -564,6 +572,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) if (de->name_len[0] == 1 && de->name[0] == 1) { parent_dir = find_rock_ridge_relocation(de, parent); + directory_size = isonum_733 (de->size); brelse(bh); break; } @@ -571,9 +580,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) #ifdef DEBUG printk("Parent dir:%x\n",parent_dir); #endif - /* Now we know the extent where the parent dir starts on. We have no - idea how long it is, so we just start reading until we either find - it or we find some kind of unreasonable circumstance. */ + /* Now we know the extent where the parent dir starts on. */ result = -1; @@ -596,6 +603,8 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) brelse(bh); offset = 0; block++; + directory_size -= bufsize; + if(directory_size < 0) return -1; if((block & 1) && (ISOFS_BLOCK_BITS - bufbits)) return -1; if (!block @@ -613,19 +622,21 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) if (offset >= bufsize) { - if((block & 1) != 0) return -1; - cpnt = kmalloc(1<b_data, bufsize); - de = (struct iso_directory_record *) - ((char *)cpnt + old_offset); + unsigned int frag1; + frag1 = bufsize - old_offset; + cpnt = kmalloc(*((unsigned char *) de),GFP_KERNEL); + memcpy(cpnt, bh->b_data + old_offset, frag1); + de = (struct iso_directory_record *) ((char *)cpnt); brelse(bh); offset -= bufsize; + directory_size -= bufsize; + if(directory_size < 0) return -1; block++; - if (!(bh = bread(parent->i_dev,block,bufsize))) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + if(!(bh = bread(parent->i_dev,block,bufsize))) { + kfree(cpnt); return -1; }; - memcpy((char *)cpnt+bufsize, bh->b_data, bufsize); + memcpy((char *)cpnt+frag1, bh->b_data, offset); } if (find_rock_ridge_relocation(de, parent) == extent){ @@ -634,7 +645,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) } if (cpnt) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); cpnt = NULL; } } @@ -644,7 +655,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent) out: if (cpnt) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); cpnt = NULL; } brelse(bh); diff --git a/fs/isofs/namei.c b/fs/isofs/namei.c index 8061e1c94110..af02ef6d051b 100644 --- a/fs/isofs/namei.c +++ b/fs/isofs/namei.c @@ -116,18 +116,20 @@ static struct buffer_head * isofs_find_entry(struct inode * dir, /* Handle case where the directory entry spans two blocks. Usually 1024 byte boundaries */ if (offset >= bufsize) { - cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL); - memcpy(cpnt, bh->b_data, bufsize); - de = (struct iso_directory_record *) - ((char *)cpnt + old_offset); + unsigned int frag1; + frag1 = bufsize - old_offset; + cpnt = kmalloc(*((unsigned char *) de),GFP_KERNEL); + memcpy(cpnt, bh->b_data + old_offset, frag1); + + de = (struct iso_directory_record *) cpnt; brelse(bh); offset = f_pos & (bufsize - 1); block = isofs_bmap(dir,f_pos>>bufbits); if (!block || !(bh = bread(dir->i_dev,block,bufsize))) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); return 0; }; - memcpy((char *)cpnt+bufsize,bh->b_data,bufsize); + memcpy((char *)cpnt+frag1, bh->b_data, offset); } /* Handle the '.' case */ @@ -179,7 +181,7 @@ static struct buffer_head * isofs_find_entry(struct inode * dir, } match = isofs_match(namelen,name,dpnt,dlen); if (cpnt) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); cpnt = NULL; } @@ -203,7 +205,7 @@ static struct buffer_head * isofs_find_entry(struct inode * dir, } out: if (cpnt) - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); brelse(bh); return NULL; } @@ -227,25 +229,16 @@ int isofs_lookup(struct inode * dir,const char * name, int len, } ino = 0; - if (dir->i_dev == cache.dev && - dir->i_ino == cache.dir && - len == cache.dlen && - isofs_match(len, name, cache.filename, cache.dlen)) - { - ino = cache.ino; - ino_back = dir->i_ino; - /* These two cases are special, but since they are at the start - of the directory, we can just as easily search there */ - if (cache.dlen == 1 && cache.filename[0] == '.') ino = 0; - if (cache.dlen == 2 && cache.filename[0] == '.' && - cache.filename[1] == '.') ino = 0; - }; + + if (dcache_lookup(dir, name, len, &ino)) ino_back = dir->i_ino; if (!ino) { if (!(bh = isofs_find_entry(dir,name,len, &ino, &ino_back))) { iput(dir); return -ENOENT; } + if (ino_back == dir->i_ino) + dcache_add(dir, name, len, ino); brelse(bh); }; diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index 342757bcdd78..f1459511db9b 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c @@ -419,16 +419,22 @@ char * get_rock_ridge_symlink(struct inode * inode) raw_inode = ((struct iso_directory_record *) pnt); if ((inode->i_ino & (bufsize - 1)) + *pnt > bufsize){ - cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL); - memcpy(cpnt, bh->b_data, bufsize); + int frag1, offset; + + offset = (inode->i_ino & (bufsize - 1)); + frag1 = bufsize - offset; + cpnt = kmalloc(*pnt,GFP_KERNEL); + if(!cpnt) return NULL; + memcpy(cpnt, bh->b_data + offset, frag1); brelse(bh); if (!(bh = bread(inode->i_dev,++block, bufsize))) { - kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS); + kfree(cpnt); printk("unable to read i-node block"); return NULL; }; - memcpy((char *)cpnt+bufsize, bh->b_data, bufsize); - pnt = ((unsigned char *) cpnt) + (inode->i_ino & (bufsize - 1)); + offset += *pnt - bufsize; + memcpy((char *)cpnt+frag1, bh->b_data, offset); + pnt = ((unsigned char *) cpnt); raw_inode = ((struct iso_directory_record *) pnt); }; diff --git a/fs/msdos/dir.c b/fs/msdos/dir.c index bb9a6db09840..98f177d826e2 100644 --- a/fs/msdos/dir.c +++ b/fs/msdos/dir.c @@ -20,10 +20,6 @@ static int msdos_dir_read(struct inode * inode,struct file * filp, char * buf,in return -EISDIR; } -int msdos_readdir(struct inode *inode,struct file *filp, - struct dirent *dirent,int count); - - static struct file_operations msdos_dir_operations = { NULL, /* lseek - default */ msdos_dir_read, /* read */ diff --git a/fs/proc/base.c b/fs/proc/base.c index f38072d88afb..80e010964918 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -58,7 +58,6 @@ static struct proc_dir_entry base_dir[] = { { 5,4,"root" }, { 6,3,"exe" }, { 7,2,"fd" }, - { 8,4,"mmap" }, { 9,7,"environ" }, { 10,7,"cmdline" }, { 11,4,"stat" }, diff --git a/fs/proc/fd.c b/fs/proc/fd.c index a5907b3016f3..954540871acb 100644 --- a/fs/proc/fd.c +++ b/fs/proc/fd.c @@ -66,7 +66,7 @@ static int proc_lookupfd(struct inode * dir,const char * name, int len, if (!dir) return -ENOENT; sb = dir->i_sb; - if (!pid || ino > 1 || !S_ISDIR(dir->i_mode)) { + if (!pid || ino || !S_ISDIR(dir->i_mode)) { iput(dir); return -ENOENT; } @@ -104,20 +104,12 @@ static int proc_lookupfd(struct inode * dir,const char * name, int len, break; if (!pid || i >= NR_TASKS) return -ENOENT; - if (!ino) { - if (fd >= NR_OPEN || !p->files->fd[fd] || !p->files->fd[fd]->f_inode) - return -ENOENT; - ino = (pid << 16) + 0x100 + fd; - } else { - int j = 0; - struct vm_area_struct * mpnt; - for (mpnt = p->mm->mmap; mpnt; mpnt = mpnt->vm_next) - if (mpnt->vm_inode) - j++; - if (fd >= j) - return -ENOENT; - ino = (pid << 16) + 0x200 + fd; - } + + if (fd >= NR_OPEN || !p->files->fd[fd] || !p->files->fd[fd]->f_inode) + return -ENOENT; + + ino = (pid << 16) + 0x100 + fd; + if (!(*result = iget(sb,ino))) return -ENOENT; return 0; @@ -136,7 +128,7 @@ static int proc_readfd(struct inode * inode, struct file * filp, pid = ino >> 16; ino &= 0x0000ffff; ino -= 7; - if (ino > 1) + if (ino) return 0; while (1) { fd = filp->f_pos; @@ -160,20 +152,12 @@ static int proc_readfd(struct inode * inode, struct file * filp, break; if (i >= NR_TASKS) return 0; - if (!ino) { - if (fd >= NR_OPEN) - break; - if (!p->files->fd[fd] || !p->files->fd[fd]->f_inode) - continue; - } else { - int j = 0; - struct vm_area_struct * mpnt; - for (mpnt = p->mm->mmap ; mpnt ; mpnt = mpnt->vm_next) - if (mpnt->vm_inode) - j++; - if (fd >= j) - break; - } + if (fd >= NR_OPEN) + break; + + if (!p->files->fd[fd] || !p->files->fd[fd]->f_inode) + continue; + j = 10; i = 1; while (fd >= j) { @@ -181,10 +165,8 @@ static int proc_readfd(struct inode * inode, struct file * filp, i++; } j = i; - if (!ino) - ino = (pid << 16) + 0x100 + fd; - else - ino = (pid << 16) + 0x200 + fd; + ino = (pid << 16) + 0x100 + fd; + put_fs_long(ino, &dirent->d_ino); put_fs_word(i, &dirent->d_reclen); put_fs_byte(0, i+dirent->d_name); diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 9d80c151a2df..60c9db962c12 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -152,7 +152,6 @@ void proc_read_inode(struct inode * inode) inode->i_mode = S_IFLNK | S_IRWXU; return; case 7: - case 8: inode->i_mode = S_IFDIR | S_IRUSR | S_IXUSR; inode->i_op = &proc_fd_inode_operations; inode->i_nlink = 2; diff --git a/fs/super.c b/fs/super.c index 3ffc728f833b..ff2213b4c765 100644 --- a/fs/super.c +++ b/fs/super.c @@ -27,6 +27,7 @@ extern struct file_operations * get_chrfops(unsigned int); extern void wait_for_keypress(void); extern void fcntl_init_locks(void); +extern int floppy_grab_irq_and_dma(void); extern int root_mountflags; diff --git a/include/linux/iso_fs.h b/include/linux/iso_fs.h index cf5efa7dd18c..99b032e5ef9d 100644 --- a/include/linux/iso_fs.h +++ b/include/linux/iso_fs.h @@ -190,16 +190,6 @@ extern struct inode_operations isofs_chrdev_inode_operations; extern struct inode_operations isofs_blkdev_inode_operations; extern struct inode_operations isofs_fifo_inode_operations; -struct lookup_cache{ - unsigned long dir; /* If this matches... */ - dev_t dev; /* And this matches */ - unsigned short dlen; /* and this matches... */ - char filename[256]; /* and this matches... */ - unsigned long ino; /* Then this is the file we are looking for */ -}; - -extern struct lookup_cache cache; - /* The following macros are used to check for memory leaks. */ #ifdef LEAK_CHECK #define free_s leak_check_free_s diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 14f1a3b385e2..345a628f22d6 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h @@ -31,6 +31,5 @@ extern struct inode_operations proc_array_inode_operations; extern struct inode_operations proc_kmsg_inode_operations; extern struct inode_operations proc_link_inode_operations; extern struct inode_operations proc_fd_inode_operations; -extern struct inode_operations proc_net_inode_operations; #endif diff --git a/init/main.c b/init/main.c index 6fca1d694fd8..724e4ab5e879 100644 --- a/init/main.c +++ b/init/main.c @@ -68,7 +68,6 @@ static char printbuf[1024]; extern int console_loglevel; extern char empty_zero_page[PAGE_SIZE]; -extern int vsprintf(char *,const char *,va_list); extern void init(void); extern void init_IRQ(void); extern void init_modules(void); diff --git a/kernel/bios32.c b/kernel/bios32.c index 2522ebf3e69b..c1d53142b07b 100644 --- a/kernel/bios32.c +++ b/kernel/bios32.c @@ -397,7 +397,7 @@ void NCR53c810_test(void) { } char *pcibios_strerror (int error) { - char buf[80]; + static char buf[80]; switch (error) { case PCIBIOS_SUCCESFUL: return "SUCCESFUL"; diff --git a/kernel/ksyms.c b/kernel/ksyms.c index 42a6701dd4c0..5969aa0d775c 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -45,26 +45,14 @@ extern void free_dma(unsigned int dmanr); extern int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs); -extern void flush_old_exec(struct linux_binprm * bprm); -extern int open_inode(struct inode * inode, int mode); -extern int read_exec(struct inode *inode, unsigned long offset, - char * addr, unsigned long count); extern int do_signal(unsigned long oldmask, struct pt_regs * regs); extern void (* iABI_hook)(struct pt_regs * regs); #ifdef CONFIG_INET -extern int register_netdev(struct device *); -extern void unregister_netdev(struct device *); -extern void ether_setup(struct device *); -extern struct sk_buff *alloc_skb(unsigned int,int); -extern void kfree_skb(struct sk_buff *, int); extern void snarf_region(unsigned int, unsigned int); -extern void netif_rx(struct sk_buff *); -extern int dev_rint(unsigned char *, long, int, struct device *); extern void dev_tint(struct device *); extern struct device *irq2dev_map[]; -extern void dev_kfree_skb(struct sk_buff *, int); #endif @@ -83,6 +71,8 @@ struct symbol_table symbol_table = { 0, 0, 0, /* for stacked module support */ X(do_munmap), X(zeromap_page_range), X(unmap_page_range), + X(insert_vm_struct), + X(merge_segments), /* internal kernel memory management */ X(__get_free_pages), diff --git a/kernel/panic.c b/kernel/panic.c index 43ba3c68444f..ed212de54341 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -15,8 +15,6 @@ asmlinkage void sys_sync(void); /* it's really int */ -extern int vsprintf(char * buf, const char * fmt, va_list args); - NORET_TYPE void panic(const char * fmt, ...) { static char buf[1024]; diff --git a/kernel/printk.c b/kernel/printk.c index 13c6b243f2b7..d92269b3024d 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -24,7 +24,6 @@ static char buf[1024]; -extern int vsprintf(char * buf, const char * fmt, va_list args); extern void console_print(const char *); #define DEFAULT_MESSAGE_LOGLEVEL 7 /* KERN_DEBUG */ diff --git a/net/inet/dev.c b/net/inet/dev.c index 090e7a711017..8914d887ee00 100644 --- a/net/inet/dev.c +++ b/net/inet/dev.c @@ -468,7 +468,6 @@ void dev_queue_xmit(struct sk_buff *skb, struct device *dev, int pri) void netif_rx(struct sk_buff *skb) { static int dropping = 0; - extern struct timeval xtime; /* * Any received buffers are un-owned and should be discarded diff --git a/net/inet/icmp.c b/net/inet/icmp.c index fd94a59682d6..f7619bff8001 100644 --- a/net/inet/icmp.c +++ b/net/inet/icmp.c @@ -423,7 +423,6 @@ static void icmp_timestamp(struct icmphdr *icmph, struct sk_buff *skb, struct de struct sk_buff *skb2; int size, offset; unsigned long *timeptr, midtime; - extern struct timeval xtime; /* kernel/time.c */ struct device *ndev=NULL; size = dev->hard_header_len + 64 + len; -- 2.39.5