]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.1pre2 2.3.1pre2
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:25:00 +0000 (15:25 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:25:00 +0000 (15:25 -0500)
53 files changed:
drivers/block/acsi.c
drivers/block/acsi_slm.c
drivers/block/amiflop.c
drivers/block/ataflop.c
drivers/block/ps2esdi.c
drivers/block/raid5.c
drivers/block/swim3.c
drivers/block/xd.c
drivers/misc/parport_share.c
drivers/sound/dev_table.c
drivers/sound/dmasound.c
drivers/sound/es1370.c
drivers/sound/es1371.c
drivers/sound/gus_wave.c
drivers/sound/midibuf.c
drivers/sound/msnd_pinnacle.c
drivers/sound/sequencer.c
drivers/sound/sonicvibes.c
drivers/sound/wavfront.c
drivers/usb/hub.c
drivers/usb/mouse.c
drivers/usb/ohci-hcd.c
drivers/usb/ohci.c
drivers/usb/uhci.c
fs/coda/cnode.c
fs/coda/upcall.c
fs/devices.c
fs/ext2/inode.c
fs/ext2/namei.c
fs/fat/misc.c
fs/hfs/dir.c
fs/hfs/dir_cap.c
fs/hfs/dir_dbl.c
fs/hfs/dir_nat.c
fs/isofs/inode.c
fs/minix/inode.c
fs/minix/namei.c
fs/namei.c
fs/ncpfs/dir.c
fs/nfs/inode.c
fs/nfsd/export.c
fs/proc/omirr.c
fs/qnx4/inode.c
fs/sysv/CHANGES
fs/sysv/inode.c
fs/sysv/namei.c
fs/ufs/inode.c
fs/ufs/namei.c
fs/umsdos/inode.c
include/linux/fs.h
include/linux/hfs_fs.h
include/linux/lp.h
kernel/ksyms.c

index b1433046f2d348343da218679091c8ff8158f25f..d9598fb73031c85fe210f28d7a29100221e3a4c6 100644 (file)
@@ -245,7 +245,7 @@ static int                          acsi_blocksizes[MAX_DEV<<4] = { 0, };
 static struct hd_struct        acsi_part[MAX_DEV<<4] = { {0,0}, };
 static int                             access_count[MAX_DEV] = { 0, };
 static char                    busy[MAX_DEV] = { 0, };
-static struct wait_queue *busy_wait;
+static DECLARE_WAIT_QUEUE_HEAD(busy_wait);
 
 static int                             CurrentNReq;
 static int                             CurrentNSect;
index 1f5d31b8897b187752bcf83b0161834afa5526d1..b341c39c4692315ddf41a02e04def02586920c61 100644 (file)
@@ -143,8 +143,8 @@ static unsigned long        SLMSliceSize;   /* size of one DMA chunk */
 static int                             SLMError;
 
 /* wait queues */
-static struct wait_queue *slm_wait;            /* waiting for buffer */
-static struct wait_queue *print_wait;  /* waiting for printing finished */
+static DECLARE_WAIT_QUEUE_HEAD(slm_wait);      /* waiting for buffer */
+static DECLARE_WAIT_QUEUE_HEAD(print_wait);    /* waiting for printing finished */
 
 /* status codes */
 #define        SLMSTAT_OK              0x00
index cc97d18ddbdebc8e9cba65205ea5b9e6edc4d4bf..27ad0ec758da1c1796d6d1eb6193f12cc64755b3 100644 (file)
@@ -167,9 +167,9 @@ static int on_attempts;
 /* request loop (trackbuffer) */
 static volatile int fdc_busy = -1;
 static volatile int fdc_nested = 0;
-static struct wait_queue *fdc_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(fdc_wait);
  
-static struct wait_queue *motor_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(motor_wait);
 
 static volatile int selected = -1;     /* currently selected drive */
 
@@ -185,7 +185,7 @@ static char *raw_buf;
  * request.
  */
 static volatile char block_flag = 0;
-static struct wait_queue *wait_fd_block = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(wait_fd_block);
 
 /* MS-Dos MFM Coding tables (should go quick and easy) */
 static unsigned char mfmencode[16]={
@@ -196,7 +196,7 @@ static unsigned char mfmdecode[128];
 
 /* floppy internal millisecond timer stuff */
 static volatile int ms_busy = -1;
-static struct wait_queue *ms_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(ms_wait);
 #define MS_TICKS ((amiga_eclock+50)/1000)
 
 /*
index 4f22bd609f1d8201e5aeff92a4950c46ee3e2213..f06aaccc2e2b413bf43979e83b158f97a540b35a 100644 (file)
@@ -314,8 +314,8 @@ MODULE_PARM(UserSteprate, "1-" __MODULE_STRING(FD_MAX_UNITS) "i");
 
 /* Synchronization of FDC access. */
 static volatile int fdc_busy = 0;
-static struct wait_queue *fdc_wait = NULL;
-static struct wait_queue *format_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(fdc_wait);
+static DECLARE_WAIT_QUEUE_HEAD(format_wait);
 
 static unsigned int changed_floppies = 0xff, fake_change = 0;
 #define        CHECK_CHANGE_DELAY      HZ/2
index 7c2d36c727f9b2cb7a80eb8b779ebbc1fa62c3f3..015c9468bb820580b7225dac036056b5d7528800 100644 (file)
@@ -108,7 +108,9 @@ void ps2esdi_reset_timer(unsigned long unused);
 
 u_int dma_arb_level;           /* DMA arbitration level */
 
-static struct wait_queue *ps2esdi_int = NULL, *ps2esdi_wait_open = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(ps2esdi_int);
+static DECLARE_WAIT_QUEUE_HEAD(ps2esdi_wait_open);
+
 int no_int_yet;
 static int access_count[MAX_HD] = {0,};
 static char ps2esdi_valid[MAX_HD] = {0,};
index 66713a84b955d46803ab628d3d96a49d95d3e05b..3c5701b3eae719f7156a4ec2cbb652d0d6f9935e 100644 (file)
@@ -91,7 +91,7 @@ static inline void finish_stripe(struct stripe_head *sh)
 
 void __wait_on_stripe(struct stripe_head *sh)
 {
-       struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
 
        PRINTK(("wait_on_stripe %lu\n", sh->sector));
        sh->count++;
@@ -1395,7 +1395,7 @@ static int raid5_run (int minor, struct md_dev *mddev)
                goto abort;
        memset(raid_conf->stripe_hashtbl, 0, HASH_PAGES * PAGE_SIZE);
 
-       init_waitqueue(&raid_conf->wait_for_stripe);
+       init_waitqueue_head(&raid_conf->wait_for_stripe);
        PRINTK(("raid5_run(%d) called.\n", minor));
 
        for (i = 0; i < mddev->nb_dev; i++) {
index 246405aff1ed917f3135915009bfb127d2a4b6d1..cee5493da0ec4359c23b539e360ed4c841d29d6a 100644 (file)
@@ -193,7 +193,7 @@ struct floppy_state {
        struct timer_list timeout;
        int     timeout_pending;
        int     ejected;
-       struct wait_queue *wait;
+       wait_queue_head_t wait;
        int     wanted;
        struct device_node*     media_bay; /* NULL when not in bay */
        char    dbdma_cmd_space[5 * sizeof(struct dbdma_cmd)];
@@ -1132,6 +1132,7 @@ static int swim3_add_device(struct device_node *swim)
        fs->secpertrack = 18;
        fs->total_secs = 2880;
        fs->media_bay = mediabay;
+       init_waitqueue_head(&fs->wait);
 
        fs->dma_cmd = (struct dbdma_cmd *) DBDMA_ALIGN(fs->dbdma_cmd_space);
        memset(fs->dma_cmd, 0, 2 * sizeof(struct dbdma_cmd));
index 8adc37fcb8863bd678ca48ed305380d748823a18..9c1c2d7b103c00992fc6f3e7ea8664114fe143a2 100644 (file)
@@ -159,7 +159,8 @@ static struct file_operations xd_fops = {
        xd_release,             /* release */
        block_fsync             /* fsync */
 };
-static struct wait_queue *xd_wait_int = NULL, *xd_wait_open = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(xd_wait_int);
+static DECLARE_WAIT_QUEUE_HEAD(xd_wait_open);
 static u_char xd_valid[XD_MAXDRIVES] = { 0,0 };
 static u_char xd_drives = 0, xd_irq = 5, xd_dma = 3, xd_maxsectors;
 static u_char xd_override __initdata = 0, xd_type = 0;
@@ -167,7 +168,7 @@ static u_short xd_iobase = 0x320;
 static int xd_geo[XD_MAXDRIVES*3] __initdata = { 0,0,0,0,0,0 };
 
 static volatile int xdc_busy = 0;
-static struct wait_queue *xdc_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(xdc_wait);
 
 typedef void (*timeout_fn)(unsigned long);
 static struct timer_list xd_timer = { NULL, NULL, 0, 0, (timeout_fn) xd_wakeup },
index 3e9b7ace163d19aa75dd62a11e347e23634f9775..f413c0a655a78ca3396d6bbbbe26081636d17bd0 100644 (file)
@@ -277,7 +277,7 @@ struct pardevice *parport_register_device(struct parport *port, const char *name
        inc_parport_count();
        port->ops->inc_use_count();
 
-       init_waitqueue(&tmp->wait_q);
+       init_waitqueue_head(&tmp->wait_q);
        tmp->timeslice = PARPORT_DEFAULT_TIMESLICE;
        tmp->waitnext = tmp->waitprev = NULL;
 
index dd12a0c68d06cab271eb928c59029f1c32880b28..71d820b9efe06d88b2fb1cffcb537f6ca8c693f9 100644 (file)
@@ -435,9 +435,9 @@ int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver,
                return -(ENOMEM);
        }
        memset((char *) op, 0, sizeof(struct audio_operations));
-       init_waitqueue(&op->in_sleeper);
-       init_waitqueue(&op->out_sleeper);       
-       init_waitqueue(&op->poll_sleeper);
+       init_waitqueue_head(&op->in_sleeper);
+       init_waitqueue_head(&op->out_sleeper);  
+       init_waitqueue_head(&op->poll_sleeper);
        if (driver_size < sizeof(struct audio_driver))
                memset((char *) d, 0, sizeof(struct audio_driver));
 
index 5f96b3a42829790537458066f4d37ee25e4f5756..d95f462f6bb7145d194956aca0754861d01ba872 100644 (file)
@@ -809,7 +809,7 @@ struct sound_queue {
         *             Bit 1 is set: a frame is playing
         */
        int playing;
-       struct wait_queue *write_queue, *open_queue, *sync_queue;
+       wait_queue_head_t write_queue, open_queue, sync_queue;
        int open_mode;
        int busy, syncing;
 #ifdef CONFIG_ATARI
@@ -4623,7 +4623,9 @@ static void __init sq_init(void)
        if (sq_unit < 0)
                return;
 
-       sq.write_queue = sq.open_queue = sq.sync_queue = 0;
+       init_waitqueue_head(&sq.write_queue);
+       init_waitqueue_head(&sq.open_queue);
+       init_waitqueue_head(&sq.sync_queue);
        sq.busy = 0;
 
        /* whatever you like as startup mode for /dev/dsp,
index 1ce70dc7b28f90228248c06aacf42632254bb00f..caacf3f58f7182db4d6807e342cad1acd04d2b16 100644 (file)
@@ -310,7 +310,7 @@ struct es1370_state {
        spinlock_t lock;
        struct semaphore open_sem;
        mode_t open_mode;
-       struct wait_queue *open_wait;
+       wait_queue_head_t open_wait;
 
        struct dmabuf {
                void *rawbuf;
@@ -321,7 +321,7 @@ struct es1370_state {
                unsigned total_bytes;
                int count;
                unsigned error; /* over/underrun */
-               struct wait_queue *wait;
+               wait_queue_head_t wait;
                /* redundant, but makes calculations easier */
                unsigned fragsize;
                unsigned dmasize;
@@ -339,8 +339,8 @@ struct es1370_state {
        struct {
                unsigned ird, iwr, icnt;
                unsigned ord, owr, ocnt;
-               struct wait_queue *iwait;
-               struct wait_queue *owait;
+               wait_queue_head_t iwait;
+               wait_queue_head_t owait;
                unsigned char ibuf[MIDIINBUF];
                unsigned char obuf[MIDIOUTBUF];
        } midi;
@@ -1007,7 +1007,7 @@ static /*const*/ struct file_operations es1370_mixer_fops = {
 
 static int drain_dac1(struct es1370_state *s, int nonblock)
 {
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        int count, tmo;
        
@@ -1042,7 +1042,7 @@ static int drain_dac1(struct es1370_state *s, int nonblock)
 
 static int drain_dac2(struct es1370_state *s, int nonblock)
 {
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        int count, tmo;
 
@@ -2191,7 +2191,7 @@ static int es1370_midi_open(struct inode *inode, struct file *file)
 static int es1370_midi_release(struct inode *inode, struct file *file)
 {
        struct es1370_state *s = (struct es1370_state *)file->private_data;
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        unsigned count, tmo;
 
@@ -2308,12 +2308,12 @@ __initfunc(int init_es1370(void))
                        continue;
                }
                memset(s, 0, sizeof(struct es1370_state));
-               init_waitqueue(&s->dma_adc.wait);
-               init_waitqueue(&s->dma_dac1.wait);
-               init_waitqueue(&s->dma_dac2.wait);
-               init_waitqueue(&s->open_wait);
-               init_waitqueue(&s->midi.iwait);
-               init_waitqueue(&s->midi.owait);
+               init_waitqueue_head(&s->dma_adc.wait);
+               init_waitqueue_head(&s->dma_dac1.wait);
+               init_waitqueue_head(&s->dma_dac2.wait);
+               init_waitqueue_head(&s->open_wait);
+               init_waitqueue_head(&s->midi.iwait);
+               init_waitqueue_head(&s->midi.owait);
                s->open_sem = MUTEX;
                s->magic = ES1370_MAGIC;
                s->io = pcidev->base_address[0] & PCI_BASE_ADDRESS_IO_MASK;
index fa2efd25f714d0b7856e587443ebc6362a3c874c..e0882d7ce4fc039ad3aecf15e350b6e2a35bf451 100644 (file)
@@ -361,7 +361,7 @@ struct es1371_state {
        spinlock_t lock;
        struct semaphore open_sem;
        mode_t open_mode;
-       struct wait_queue *open_wait;
+       wait_queue_head_t open_wait;
 
        struct dmabuf {
                void *rawbuf;
@@ -372,7 +372,7 @@ struct es1371_state {
                unsigned total_bytes;
                int count;
                unsigned error; /* over/underrun */
-               struct wait_queue *wait;
+               wait_queue_head_t wait;
                /* redundant, but makes calculations easier */
                unsigned fragsize;
                unsigned dmasize;
@@ -390,8 +390,8 @@ struct es1371_state {
        struct {
                unsigned ird, iwr, icnt;
                unsigned ord, owr, ocnt;
-               struct wait_queue *iwait;
-               struct wait_queue *owait;
+               wait_queue_head_t iwait;
+               wait_queue_head_t owait;
                unsigned char ibuf[MIDIINBUF];
                unsigned char obuf[MIDIOUTBUF];
        } midi;
@@ -1454,7 +1454,7 @@ static /*const*/ struct file_operations es1371_mixer_fops = {
 
 static int drain_dac1(struct es1371_state *s, int nonblock)
 {
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        int count, tmo;
        
@@ -1489,7 +1489,7 @@ static int drain_dac1(struct es1371_state *s, int nonblock)
 
 static int drain_dac2(struct es1371_state *s, int nonblock)
 {
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        int count, tmo;
 
@@ -2625,7 +2625,7 @@ static int es1371_midi_open(struct inode *inode, struct file *file)
 static int es1371_midi_release(struct inode *inode, struct file *file)
 {
        struct es1371_state *s = (struct es1371_state *)file->private_data;
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        unsigned count, tmo;
 
@@ -2745,12 +2745,12 @@ __initfunc(int init_es1371(void))
                        continue;
                }
                memset(s, 0, sizeof(struct es1371_state));
-               init_waitqueue(&s->dma_adc.wait);
-               init_waitqueue(&s->dma_dac1.wait);
-               init_waitqueue(&s->dma_dac2.wait);
-               init_waitqueue(&s->open_wait);
-               init_waitqueue(&s->midi.iwait);
-               init_waitqueue(&s->midi.owait);
+               init_waitqueue_head(&s->dma_adc.wait);
+               init_waitqueue_head(&s->dma_dac1.wait);
+               init_waitqueue_head(&s->dma_dac2.wait);
+               init_waitqueue_head(&s->open_wait);
+               init_waitqueue_head(&s->midi.iwait);
+               init_waitqueue_head(&s->midi.owait);
                s->open_sem = MUTEX;
                s->magic = ES1371_MAGIC;
                s->io = pcidev->base_address[0] & PCI_BASE_ADDRESS_IO_MASK;
index b0eacde385408a5c2bd3082ea33ed81b485656e4..0dddaacaaa0c074c73bc10d7231fb8a700edce01 100644 (file)
@@ -118,7 +118,7 @@ static int      gus_audio_bits;
 static int      gus_audio_bsize;
 static char     bounce_buf[8 * 1024];  /* Must match value set to max_fragment */
 
-static struct wait_queue *dram_sleeper = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(dram_sleeper);
 
 /*
  * Variables and buffers for PCM output
@@ -1663,7 +1663,7 @@ static int guswave_open(int dev, int mode)
                        gus_no_dma = 0;
        }
 
-       init_waitqueue(&dram_sleeper);
+       init_waitqueue_head(&dram_sleeper);
        gus_busy = 1;
        active_device = GUS_DEV_WAVE;
 
index b1c9763e50b5905f8218efbaf36476ba057a1427..42682175381a6eff85631db2a6a545175cc4097a 100644 (file)
@@ -29,8 +29,8 @@
 
 #define MAX_QUEUE_SIZE 4000
 
-static struct wait_queue *midi_sleeper[MAX_MIDI_DEV] = {NULL};
-static struct wait_queue *input_sleeper[MAX_MIDI_DEV] = {NULL};
+static wait_queue_head_t midi_sleeper[MAX_MIDI_DEV];
+static wait_queue_head_t input_sleeper[MAX_MIDI_DEV];
 
 struct midi_buf
 {
@@ -202,8 +202,8 @@ int MIDIbuf_open(int dev, struct file *file)
        midi_out_buf[dev]->len = midi_out_buf[dev]->head = midi_out_buf[dev]->tail = 0;
        open_devs++;
 
-       init_waitqueue(&midi_sleeper[dev]);
-       init_waitqueue(&input_sleeper[dev]);
+       init_waitqueue_head(&midi_sleeper[dev]);
+       init_waitqueue_head(&input_sleeper[dev]);
 
        if (open_devs < 2)      /* This was first open */
        {
index 7bf7364ab9e7f501e25c4e83894ec85698896b64..05845cf96f86e90fa98ff15038ea3b1e9f97cd5c 100644 (file)
@@ -1913,9 +1913,9 @@ __initfunc(int msnd_pinnacle_init(void))
        if (digital)
                set_bit(F_HAVEDIGITAL, &dev.flags);
 #endif
-       init_waitqueue(&dev.writeblock);
-       init_waitqueue(&dev.readblock);
-       init_waitqueue(&dev.writeflush);
+       init_waitqueue_head(&dev.writeblock);
+       init_waitqueue_head(&dev.readblock);
+       init_waitqueue_head(&dev.writeflush);
        msnd_fifo_init(&dev.DAPF);
        msnd_fifo_init(&dev.DARF);
 #ifndef LINUX20
index af40a2117455306c9c9e86785d64e28a49478779..8fee21c6bd94047eb70701d33291001faa041a81 100644 (file)
@@ -53,8 +53,8 @@ static int      max_synthdev = 0;
 #define SEQ_2  2
 static int      seq_mode = SEQ_1;
 
-static struct wait_queue *seq_sleeper = NULL;
-static struct wait_queue *midi_sleeper = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(seq_sleeper);
+static DECLARE_WAIT_QUEUE_HEAD(midi_sleeper);
 
 static int      midi_opened[MAX_MIDI_DEV] = {
        0
@@ -1117,8 +1117,8 @@ int sequencer_open(int dev, struct file *file)
        if (seq_mode == SEQ_2)
                tmr->open(tmr_no, seq_mode);
 
-       init_waitqueue(&seq_sleeper);
-       init_waitqueue(&midi_sleeper);
+       init_waitqueue_head(&seq_sleeper);
+       init_waitqueue_head(&midi_sleeper);
        output_threshold = SEQ_MAX_QUEUE / 2;
 
        return 0;
index c6d30d43f9804593fbccd9f65587ac96be961bd8..76f6c1497cb5b4b6a051f5cc256a4133e4aa2761 100644 (file)
@@ -286,7 +286,7 @@ struct sv_state {
        spinlock_t lock;
        struct semaphore open_sem;
        mode_t open_mode;
-       struct wait_queue *open_wait;
+       wait_queue_head_t open_wait;
 
        struct dmabuf {
                void *rawbuf;
@@ -297,7 +297,7 @@ struct sv_state {
                unsigned total_bytes;
                int count;
                unsigned error; /* over/underrun */
-               struct wait_queue *wait;
+               wait_queue_head_t wait;
                /* redundant, but makes calculations easier */
                unsigned fragsize;
                unsigned dmasize;
@@ -315,8 +315,8 @@ struct sv_state {
        struct {
                unsigned ird, iwr, icnt;
                unsigned ord, owr, ocnt;
-               struct wait_queue *iwait;
-               struct wait_queue *owait;
+               wait_queue_head_t iwait;
+               wait_queue_head_t owait;
                struct timer_list timer;
                unsigned char ibuf[MIDIINBUF];
                unsigned char obuf[MIDIOUTBUF];
@@ -1241,7 +1241,7 @@ static /*const*/ struct file_operations sv_mixer_fops = {
 
 static int drain_dac(struct sv_state *s, int nonblock)
 {
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        int count, tmo;
 
@@ -2043,7 +2043,7 @@ static int sv_midi_open(struct inode *inode, struct file *file)
 static int sv_midi_release(struct inode *inode, struct file *file)
 {
        struct sv_state *s = (struct sv_state *)file->private_data;
-        struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
        unsigned count, tmo;
 
@@ -2344,11 +2344,11 @@ __initfunc(int init_sonicvibes(void))
                        continue;
                }
                memset(s, 0, sizeof(struct sv_state));
-               init_waitqueue(&s->dma_adc.wait);
-               init_waitqueue(&s->dma_dac.wait);
-               init_waitqueue(&s->open_wait);
-               init_waitqueue(&s->midi.iwait);
-               init_waitqueue(&s->midi.owait);
+               init_waitqueue_head(&s->dma_adc.wait);
+               init_waitqueue_head(&s->dma_dac.wait);
+               init_waitqueue_head(&s->open_wait);
+               init_waitqueue_head(&s->midi.iwait);
+               init_waitqueue_head(&s->midi.owait);
                s->open_sem = MUTEX;
                s->magic = SV_MAGIC;
                s->iosb = pcidev->base_address[0] & PCI_BASE_ADDRESS_IO_MASK;
index b6ec7c2636195cd49c0cd0e54060696cfc6406c6..ac58b97dab5612e6b7ea5a825308b63d28ab48c9 100644 (file)
@@ -290,7 +290,7 @@ struct wf_config {
        int samples_used;                  /* how many */
        char interrupts_on;                /* h/w MPU interrupts enabled ? */
        char rom_samples_rdonly;           /* can we write on ROM samples */
-       struct wait_queue *interrupt_sleeper; 
+       wait_queue_head_t interrupt_sleeper; 
 } dev;
 
 static int  detect_wffx(void);
@@ -2535,7 +2535,7 @@ __initfunc (static int detect_wavefront (int irq, int io_base))
 
        }
 
-       init_waitqueue (&dev.interrupt_sleeper);
+       init_waitqueue_head (&dev.interrupt_sleeper);
 
        if (wavefront_hw_reset ()) {
                printk (KERN_WARNING LOGNAME "hardware reset failed\n");
index 16789b9445c05125b59eebd560d2a4646ce34b13..95c65e0cde4eabb698b6268525045879aacde54b 100644 (file)
@@ -24,7 +24,7 @@
 extern struct usb_operations uhci_device_operations;
 
 /* Wakes up khubd */
-static struct wait_queue *usb_hub_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(usb_hub_wait);
 static spinlock_t hub_event_lock = SPIN_LOCK_UNLOCKED;
 
 /* List of hubs needing servicing */
index 4d346c41ac9863a2894bc6c7ed9420a3258298b6..59b93bd82f6c2369181d49a9944515ee6ac200ea 100644 (file)
@@ -48,13 +48,17 @@ struct mouse_state {
        int present; /* this mouse is plugged in */
        int active; /* someone is has this mouse's device open */
        int ready; /* the mouse has changed state since the last read */
-       struct wait_queue *wait; /* for polling */
+       wait_queue_head_t wait; /* for polling */
        struct fasync_struct *fasync;
        /* later, add a list here to support multiple mice */
        /* but we will also need a list of file pointers to identify it */
 };
 
-static struct mouse_state static_mouse_state;
+static struct mouse_state static_mouse_state = {
+       0, 0, 0, 0,
+       0, 0, 0,
+       __WAIT_QUEUE_HEAD_INITIALIZER(static_mouse_state.wait),
+};
 
 spinlock_t usb_mouse_lock = SPIN_LOCK_UNLOCKED;
 
index da3ef6657dc0e24a5c0ee667fd7c53a736198d71..2dadb9195b08a5cccf9823bd4cc8f58126b1eccc 100644 (file)
@@ -63,8 +63,8 @@ static int apm_resume = 0;
 
  
 
-static struct wait_queue *control_wakeup;         
-static struct wait_queue *root_hub = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(control_wakeup);
+static DECLARE_WAIT_QUEUE_HEAD(root_hub);
  
 static __u8 cc_to_status[16] = { /* mapping of the OHCI CC to the UHCI status codes; first guess */
 /* Activ, Stalled, Data Buffer Err, Babble Detected : NAK recvd, CRC/Timeout, Bitstuff, reservd */
@@ -145,7 +145,7 @@ static int sohci_request_irq(struct usb_device *usb_dev, unsigned int pipe, usb_
 
 static int sohci_control_msg(struct usb_device *usb_dev, unsigned int pipe, void *cmd, void *data, int len)
 {
-       struct wait_queue wait = { current, NULL }; 
+       DECLARE_WAITQUEUE(wait, current);
        struct ohci * ohci = usb_dev->bus->hcpriv;
        int status;
        union ep_addr_ ep_addr;
index b12d0114c6908c61e1f97e154cc1b050f7d987fe..a000c015bbf85036ffb46c16f1f7709b0de96f55 100644 (file)
@@ -57,7 +57,7 @@ static int handle_apm_event(apm_event_t event);
 static int apm_resume = 0;
 #endif
 
-static struct wait_queue *ohci_configure = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(ohci_configure);
 
 #ifdef OHCI_TIMER
 static struct timer_list ohci_timer;   /* timer for root hub polling */
@@ -476,7 +476,7 @@ static int ohci_request_irq(struct usb_device *usb, unsigned int pipe,
 /*
  * Control thread operations:
  */
-static struct wait_queue *control_wakeup;
+static DECLARE_WAIT_QUEUE_HEAD(control_wakeup);
 
 /*
  *  This is the handler that gets called when a control transaction
@@ -515,7 +515,7 @@ static int ohci_control_msg(struct usb_device *usb, unsigned int pipe, void *cmd
         */
        struct ohci_ed *control_ed = &dev->ohci->root_hub->ed[ED_CONTROL];
        struct ohci_td *setup_td, *data_td, *status_td;
-       struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
 
 #if 0
        printk(KERN_DEBUG "entering ohci_control_msg %p (ohci_dev: %p) pipe 0x%x, cmd %p, data %p, len %d\n", usb, dev, pipe, cmd, data, len);
index 3d8ccdb7d9d96c3e1434beab4c21f76b69c7ddc5..c9a57627aa215d7155f44d87777e6649a3c81d44 100644 (file)
@@ -47,7 +47,7 @@ static int apm_resume = 0;
 
 #define compile_assert(x) do { switch (0) { case 1: case !(x): } } while (0)
 
-static struct wait_queue *uhci_configure = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(uhci_configure);
 
 /*
  * Return the result of a TD..
@@ -312,7 +312,7 @@ static int uhci_request_irq(struct usb_device *usb_dev, unsigned int pipe, usb_d
  * We need to remove the TD from the lists (both interrupt
  * list and TD lists) by hand if something bad happens!
  */
-static struct wait_queue *control_wakeup;
+static DECLARE_WAIT_QUEUE_HEAD(control_wakeup);
 
 static int uhci_control_completed(int status, void *buffer, void *dev_id)
 {
@@ -323,7 +323,7 @@ static int uhci_control_completed(int status, void *buffer, void *dev_id)
 /* td points to the last td in the list, which interrupts on completion */
 static int uhci_run_control(struct uhci_device *dev, struct uhci_td *first, struct uhci_td *last)
 {
-       struct wait_queue wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        struct uhci_qh *ctrl_qh = uhci_qh_allocate(dev);
        struct uhci_td *curtd;
 
index 2a099d86518a84f25d1283ecd965de48086c4c59..9fc3e9bc66f3d7438cc4c27595df68ac2d58e162 100644 (file)
@@ -29,21 +29,8 @@ static void coda_fill_inode(struct inode *inode, struct coda_vattr *attr)
                 inode->i_op = &coda_dir_inode_operations;
         else if (S_ISLNK(inode->i_mode))
                 inode->i_op = &coda_symlink_inode_operations;
-        else if (S_ISCHR(inode->i_mode)) {
-                inode->i_op = &chrdev_inode_operations;
-                inode->i_rdev = to_kdev_t(attr->va_rdev);
-        } else if (S_ISBLK(inode->i_mode)) {
-                inode->i_op = &blkdev_inode_operations;
-                inode->i_rdev = to_kdev_t(attr->va_rdev);
-        } else if (S_ISFIFO(inode->i_mode))
-                init_fifo(inode);
-       else if (S_ISSOCK(inode->i_mode))
-               inode->i_op = NULL;
-        else {
-                printk ("coda_fill_inode: what's this? i_mode = %o\n", 
-                       inode->i_mode);
-                inode->i_op = NULL;
-        }
+        else
+                init_special_inode(inode, inode->i_mode, attr->va_rdev);
 }
 
 /* this is effectively coda_iget:
index d3f0161a3a1e4884d7e6ee17265f1bb60d89462c..a0c1092b28758bcbfd30d1c424234af7f0f244d0 100644 (file)
@@ -587,7 +587,7 @@ int venus_pioctl(struct super_block *sb, struct ViceFid *fid,
 
 static inline unsigned long coda_waitfor_upcall(struct upc_req *vmp)
 {
-       struct wait_queue       wait = { current, NULL };
+       DECLARE_WAITQUEUE(wait, current);
        unsigned long posttime;
 
        vmp->uc_posttime = jiffies;
@@ -662,7 +662,7 @@ ENTRY;
        req->uc_outSize = *outSize ? *outSize : inSize;
        req->uc_opcode = ((union inputArgs *)buffer)->ih.opcode;
        req->uc_unique = ++vcommp->vc_seq;
-        req->uc_sleep = NULL;
+       init_waitqueue_head(&req->uc_sleep);
        
        /* Fill in the common input args. */
        ((union inputArgs *)buffer)->ih.unique = req->uc_unique;
index 2ff69850a1b562b60a2753029a940974f164985d..30db1ace1652d024e2f71e48aeaf8b37f294ea0c 100644 (file)
@@ -370,3 +370,21 @@ char * cdevname(kdev_t dev)
        sprintf(buffer, "%s(%d,%d)", name, MAJOR(dev), MINOR(dev));
        return buffer;
 }
+
+void init_special_inode(struct inode *inode, umode_t mode, int rdev)
+{
+       inode->i_mode = mode;
+       inode->i_op = NULL;
+       if (S_ISCHR(mode)) {
+               inode->i_op = &chrdev_inode_operations;
+               inode->i_rdev = to_kdev_t(rdev);
+       } else if (S_ISBLK(mode)) {
+               inode->i_op = &blkdev_inode_operations;
+               inode->i_rdev = to_kdev_t(rdev);
+       } else if (S_ISFIFO(mode))
+               init_fifo(inode);
+       else if (S_ISSOCK(mode))
+               ;
+       else
+               printk(KERN_DEBUG "init_special_inode: bogus imode (%o)\n", mode);
+}
index 62fd726edb1060dee2172f829a3dab8c78eacc78..693964a8030e6f86006384e3b837149dd2210071 100644 (file)
@@ -569,15 +569,11 @@ void ext2_read_inode (struct inode * inode)
        if (inode->u.ext2_i.i_prealloc_count)
                ext2_error (inode->i_sb, "ext2_read_inode",
                            "New inode has non-zero prealloc count!");
-       if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-               inode->i_rdev = to_kdev_t(le32_to_cpu(raw_inode->i_block[0]));
-       else if (S_ISLNK(inode->i_mode) && !inode->i_blocks)
+       if (S_ISLNK(inode->i_mode) && !inode->i_blocks)
                for (block = 0; block < EXT2_N_BLOCKS; block++)
                        inode->u.ext2_i.i_data[block] = raw_inode->i_block[block];
        else for (block = 0; block < EXT2_N_BLOCKS; block++)
                inode->u.ext2_i.i_data[block] = le32_to_cpu(raw_inode->i_block[block]);
-       brelse (bh);
-       inode->i_op = NULL;
        if (inode->i_ino == EXT2_ACL_IDX_INO ||
            inode->i_ino == EXT2_ACL_DATA_INO)
                /* Nothing to do */ ;
@@ -587,12 +583,10 @@ void ext2_read_inode (struct inode * inode)
                inode->i_op = &ext2_dir_inode_operations;
        else if (S_ISLNK(inode->i_mode))
                inode->i_op = &ext2_symlink_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
+       else 
+               init_special_inode(inode, inode->i_mode,
+                                  le32_to_cpu(raw_inode->i_block[0]));
+       brelse (bh);
        inode->i_attr_flags = 0;
        if (inode->u.ext2_i.i_flags & EXT2_SYNC_FL) {
                inode->i_attr_flags |= ATTR_FLAG_SYNCRONOUS;
index 4a8c4a7d6a522620144f80f03c81d5dd155c785e..6bfa7041d5f13771e30220d83fe78358d4befdea 100644 (file)
@@ -347,6 +347,25 @@ static int ext2_delete_entry (struct ext2_dir_entry_2 * dir,
        return -ENOENT;
 }
 
+static inline void ext2_set_de_type(struct super_block *sb,
+                               struct ext2_dir_entry_2 *de,
+                               umode_t mode) {
+       if (!EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE))
+               return;
+       if (S_ISCHR(mode))
+               de->file_type = EXT2_FT_CHRDEV;
+       else if (S_ISBLK(mode))
+               de->file_type = EXT2_FT_BLKDEV;
+       else if (S_ISFIFO(mode))  
+               de->file_type = EXT2_FT_FIFO;
+       else if (S_ISLNK(mode))
+               de->file_type = EXT2_FT_SYMLINK;
+       else if (S_ISREG(mode))
+               de->file_type = EXT2_FT_REG_FILE;
+       else if (S_ISDIR(mode))  
+               de->file_type = EXT2_FT_DIR;
+}
+
 /*
  * By the time this is called, we already have created
  * the directory cache entry for the new file, but it
@@ -380,9 +399,7 @@ int ext2_create (struct inode * dir, struct dentry * dentry, int mode)
                return err;
        }
        de->inode = cpu_to_le32(inode->i_ino);
-       if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                     EXT2_FEATURE_INCOMPAT_FILETYPE))
-               de->file_type = EXT2_FT_REG_FILE;
+       ext2_set_de_type(dir->i_sb, de, S_IFREG);
        dir->i_version = ++event;
        mark_buffer_dirty(bh, 1);
        if (IS_SYNC(dir)) {
@@ -406,36 +423,13 @@ int ext2_mknod (struct inode * dir, struct dentry *dentry, int mode, int rdev)
                goto out;
 
        inode->i_uid = current->fsuid;
-       inode->i_mode = mode;
-       inode->i_op = NULL;
+       init_special_inode(inode, mode, rdev);
        bh = ext2_add_entry (dir, dentry->d_name.name, dentry->d_name.len, &de, &err);
        if (!bh)
                goto out_no_entry;
        de->inode = cpu_to_le32(inode->i_ino);
        dir->i_version = ++event;
-       if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext2_file_inode_operations;
-               if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                             EXT2_FEATURE_INCOMPAT_FILETYPE))
-                       de->file_type = EXT2_FT_REG_FILE;
-       } else if (S_ISCHR(inode->i_mode)) {
-               inode->i_op = &chrdev_inode_operations;
-               if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                             EXT2_FEATURE_INCOMPAT_FILETYPE))
-                       de->file_type = EXT2_FT_CHRDEV;
-       } else if (S_ISBLK(inode->i_mode)) {
-               inode->i_op = &blkdev_inode_operations;
-               if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                             EXT2_FEATURE_INCOMPAT_FILETYPE))
-                       de->file_type = EXT2_FT_BLKDEV;
-       } else if (S_ISFIFO(inode->i_mode))  {
-               init_fifo(inode);
-               if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                             EXT2_FEATURE_INCOMPAT_FILETYPE))
-                       de->file_type = EXT2_FT_FIFO;
-       }
-       if (S_ISBLK(mode) || S_ISCHR(mode))
-               inode->i_rdev = to_kdev_t(rdev);
+       ext2_set_de_type(dir->i_sb, de, inode->i_mode);
        mark_inode_dirty(inode);
        mark_buffer_dirty(bh, 1);
        if (IS_SYNC(dir)) {
@@ -486,17 +480,13 @@ int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode)
        de->name_len = 1;
        de->rec_len = cpu_to_le16(EXT2_DIR_REC_LEN(de->name_len));
        strcpy (de->name, ".");
-       if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                     EXT2_FEATURE_INCOMPAT_FILETYPE))
-               de->file_type = EXT2_FT_DIR;
+       ext2_set_de_type(dir->i_sb, de, S_IFDIR);
        de = (struct ext2_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
        de->inode = cpu_to_le32(dir->i_ino);
        de->rec_len = cpu_to_le16(inode->i_sb->s_blocksize - EXT2_DIR_REC_LEN(1));
        de->name_len = 2;
        strcpy (de->name, "..");
-       if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                     EXT2_FEATURE_INCOMPAT_FILETYPE))
-               de->file_type = EXT2_FT_DIR;
+       ext2_set_de_type(dir->i_sb, de, S_IFDIR);
        inode->i_nlink = 2;
        mark_buffer_dirty(dir_block, 1);
        brelse (dir_block);
@@ -508,9 +498,7 @@ int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode)
        if (!bh)
                goto out_no_entry;
        de->inode = cpu_to_le32(inode->i_ino);
-       if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                     EXT2_FEATURE_INCOMPAT_FILETYPE))
-               de->file_type = EXT2_FT_DIR;
+       ext2_set_de_type(dir->i_sb, de, S_IFDIR);
        dir->i_version = ++event;
        mark_buffer_dirty(bh, 1);
        if (IS_SYNC(dir)) {
@@ -744,9 +732,7 @@ int ext2_symlink (struct inode * dir, struct dentry *dentry, const char * symnam
        if (!bh)
                goto out_no_entry;
        de->inode = cpu_to_le32(inode->i_ino);
-       if (EXT2_HAS_INCOMPAT_FEATURE(dir->i_sb,
-                                     EXT2_FEATURE_INCOMPAT_FILETYPE))
-               de->file_type = EXT2_FT_SYMLINK;
+       ext2_set_de_type(dir->i_sb, de, S_IFLNK);
        dir->i_version = ++event;
        mark_buffer_dirty(bh, 1);
        if (IS_SYNC(dir)) {
@@ -785,21 +771,7 @@ int ext2_link (struct dentry * old_dentry,
                return err;
 
        de->inode = cpu_to_le32(inode->i_ino);
-       if (EXT2_HAS_INCOMPAT_FEATURE(inode->i_sb,
-                                     EXT2_FEATURE_INCOMPAT_FILETYPE)) {
-               if (S_ISREG(inode->i_mode))
-                       de->file_type = EXT2_FT_REG_FILE;
-               else if (S_ISDIR(inode->i_mode))
-                       de->file_type = EXT2_FT_DIR;
-               else if (S_ISLNK(inode->i_mode))
-                       de->file_type = EXT2_FT_SYMLINK;
-               else if (S_ISCHR(inode->i_mode))
-                       de->file_type = EXT2_FT_CHRDEV;
-               else if (S_ISBLK(inode->i_mode))
-                       de->file_type = EXT2_FT_BLKDEV;
-               else if (S_ISFIFO(inode->i_mode))  
-                       de->file_type = EXT2_FT_FIFO;
-       }
+       ext2_set_de_type(dir->i_sb, de, inode->i_mode);
        dir->i_version = ++event;
        mark_buffer_dirty(bh, 1);
        if (IS_SYNC(dir)) {
index 1dfddd3c722761f3a38a5b8ec260dfd9d98a95c6..22d9d8af9c3cd4f822523a22c284308caa6edeb3 100644 (file)
@@ -79,7 +79,7 @@ int fat_is_binary(char conversion,char *extension)
 /* File creation lock. This is system-wide to avoid deadlocks in rename. */
 /* (rename might deadlock before detecting cross-FS moves.) */
 
-static struct wait_queue *creation_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(creation_wait);
 static int creation_lock = 0;
 
 
index b355408c92758903859737d85fa1a5b73a07150c..6d111009634ef6dd11f398229cadbc24bc059617 100644 (file)
@@ -254,31 +254,6 @@ int hfs_mkdir(struct inode * parent, struct dentry *dentry, int mode)
        return 0;
 }
 
-/*
- * hfs_mknod()
- *
- * This is the mknod() entry in the inode_operations structure for
- * regular HFS directories.  The purpose is to create a new entry
- * in a directory, given the inode for the parent directory and the
- * name (and its length) and the mode of the new entry (and the device
- * number if the entry is to be a device special file).
- *
- * HFS only supports regular files and directories and Linux disallows
- * using mknod() to create directories.  Thus we just check the arguments
- * and call hfs_create().
- */
-int hfs_mknod(struct inode *dir, struct dentry *dentry, int mode, int rdev)
-{
-       if (!dir) 
-               return -ENOENT;
-
-       /* the only thing we currently do. */
-       if (S_ISREG(mode)) 
-               return hfs_create(dir, dentry, mode);
-
-       return -EPERM;
-}
-
 /*
  * hfs_unlink()
  *
index 0ab81d9663322750ffac2caae4b19f119b42d663..7460cca626657a8ade19e52053ff02ed65c6153c 100644 (file)
@@ -83,7 +83,7 @@ struct inode_operations hfs_cap_ndir_inode_operations = {
        NULL,                   /* symlink */
        hfs_mkdir,              /* mkdir */
        hfs_rmdir,              /* rmdir */
-       hfs_mknod,              /* mknod */
+       NULL,                   /* mknod */
        hfs_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
index 80e9906273511f09cc3474131e4609a7b526811d..e5ad805116741abc7119129269cc2906ef3ea01d 100644 (file)
@@ -27,7 +27,6 @@ static struct dentry *dbl_lookup(struct inode *, struct dentry *);
 static int dbl_readdir(struct file *, void *, filldir_t);
 static int dbl_create(struct inode *, struct dentry *, int);
 static int dbl_mkdir(struct inode *, struct dentry *, int);
-static int dbl_mknod(struct inode *, struct dentry *, int, int);
 static int dbl_unlink(struct inode *, struct dentry *);
 static int dbl_rmdir(struct inode *, struct dentry *);
 static int dbl_rename(struct inode *, struct dentry *,
@@ -83,7 +82,7 @@ struct inode_operations hfs_dbl_dir_inode_operations = {
        NULL,                   /* symlink */
        dbl_mkdir,              /* mkdir */
        dbl_rmdir,              /* rmdir */
-       dbl_mknod,              /* mknod */
+       NULL,                   /* mknod */
        dbl_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
@@ -322,28 +321,6 @@ static int dbl_mkdir(struct inode * parent, struct dentry *dentry,
        return error;
 }
 
-/*
- * dbl_mknod()
- *
- * This is the mknod() entry in the inode_operations structure for
- * regular HFS directories.  The purpose is to create a new entry
- * in a directory, given the inode for the parent directory and the
- * name (and its length) and the mode of the new entry (and the device
- * number if the entry is to be a device special file).
- */
-static int dbl_mknod(struct inode *dir, struct dentry *dentry,
-                    int mode, int rdev)
-{
-       int error;
-
-       if (is_hdr(dir, dentry->d_name.name, dentry->d_name.len)) {
-               error = -EEXIST;
-       } else {
-               error = hfs_mknod(dir, dentry, mode, rdev);
-       }
-       return error;
-}
-
 /*
  * dbl_unlink()
  *
index 5cff9d8142631e7b407155bd44ec1cf7a72e7eb0..f9f131a17f2ffda99687458a32d712c757877439 100644 (file)
@@ -89,7 +89,7 @@ struct inode_operations hfs_nat_ndir_inode_operations = {
        NULL,                   /* symlink */
        hfs_mkdir,              /* mkdir */
        nat_rmdir,              /* rmdir */
-       hfs_mknod,              /* mknod */
+       NULL,                   /* mknod */
        hfs_rename,             /* rename */
        NULL,                   /* readlink */
        NULL,                   /* follow_link */
index 3ab20a30344cba78e6f5c8a306421d45dfe03d49..9dc1f7dee7809a78911860fb051b610308ef33e3 100644 (file)
@@ -1211,12 +1211,9 @@ void isofs_read_inode(struct inode * inode)
            inode->i_op = &isofs_dir_inode_operations;
          else if (S_ISLNK(inode->i_mode))
            inode->i_op = &isofs_symlink_inode_operations;
-         else if (S_ISCHR(inode->i_mode))
-           inode->i_op = &chrdev_inode_operations;
-         else if (S_ISBLK(inode->i_mode))
-           inode->i_op = &blkdev_inode_operations;
-         else if (S_ISFIFO(inode->i_mode))
-           init_fifo(inode);
+         else
+           /* XXX - parse_rock_ridge_inode() had already set i_rdev. */
+           init_special_inode(inode, inode->i_mode, kdev_t_to_nr(inode->i_rdev));
        }
        return;
 
index 60032292c3cb076aeb72d8e5fe45aadc830ca0bd..f454c1eadc70d29a8d6ae9bfc9457592d2dd9616 100644 (file)
@@ -756,23 +756,17 @@ static void V1_minix_read_inode(struct inode * inode)
        inode->i_size = raw_inode->i_size;
        inode->i_mtime = inode->i_atime = inode->i_ctime = raw_inode->i_time;
        inode->i_blocks = inode->i_blksize = 0;
-       if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-               inode->i_rdev = to_kdev_t(raw_inode->i_zone[0]);
-       else for (block = 0; block < 9; block++)
+       for (block = 0; block < 9; block++)
                inode->u.minix_i.u.i1_data[block] = raw_inode->i_zone[block];
-       brelse(bh);
        if (S_ISREG(inode->i_mode))
                inode->i_op = &minix_file_inode_operations;
        else if (S_ISDIR(inode->i_mode))
                inode->i_op = &minix_dir_inode_operations;
        else if (S_ISLNK(inode->i_mode))
                inode->i_op = &minix_symlink_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
+       else
+               init_special_inode(inode, inode->i_mode, raw_inode->i_zone[0]);
+       brelse(bh);
 }
 
 /*
@@ -812,23 +806,17 @@ static void V2_minix_read_inode(struct inode * inode)
        inode->i_atime = raw_inode->i_atime;
        inode->i_ctime = raw_inode->i_ctime;
        inode->i_blocks = inode->i_blksize = 0;
-       if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-               inode->i_rdev = to_kdev_t(raw_inode->i_zone[0]);
-       else for (block = 0; block < 10; block++)
+       for (block = 0; block < 10; block++)
                inode->u.minix_i.u.i2_data[block] = raw_inode->i_zone[block];
-       brelse(bh);
        if (S_ISREG(inode->i_mode))
                inode->i_op = &minix_file_inode_operations;
        else if (S_ISDIR(inode->i_mode))
                inode->i_op = &minix_dir_inode_operations;
        else if (S_ISLNK(inode->i_mode))
                inode->i_op = &minix_symlink_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
+       else
+               init_special_inode(inode, inode->i_mode, raw_inode->i_zone[0]);
+       brelse(bh);
 }
 
 /*
index e6d680ecf3e031986469f30370e372a7d09fa527..c2366ae4b200f04cd21a5d0243a04f00db03a6c2 100644 (file)
@@ -253,18 +253,7 @@ int minix_mknod(struct inode * dir, struct dentry *dentry, int mode, int rdev)
        if (!inode)
                return -ENOSPC;
        inode->i_uid = current->fsuid;
-       inode->i_mode = mode;
-       inode->i_op = NULL;
-       if (S_ISREG(inode->i_mode))
-               inode->i_op = &minix_file_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
-       if (S_ISBLK(mode) || S_ISCHR(mode))
-               inode->i_rdev = to_kdev_t(rdev);
+       init_special_inode(inode, mode, rdev);
        mark_inode_dirty(inode);
        error = minix_add_entry(dir, dentry->d_name.name, dentry->d_name.len, &bh, &de);
        if (error) {
index b91b43a1f774689bcf53e76b1b2a8b7df67db8f3..93df6705cbc6e36b4205e0c50f4ded408715f7e6 100644 (file)
@@ -633,6 +633,24 @@ static inline int lookup_flags(unsigned int f)
        return retval;
 }
 
+int vfs_create(struct inode *dir, struct dentry *dentry, int mode)
+{
+       int error;
+
+       error = may_create(dir, dentry);
+       if (error)
+               goto exit_lock;
+
+       error = -EACCES;        /* shouldn't it be ENOSYS? */
+       if (!dir->i_op || !dir->i_op->create)
+               goto exit_lock;
+
+       DQUOT_INIT(dir);
+       error = dir->i_op->create(dir, dentry, mode);
+exit_lock:
+       return error;
+}
+
 /*
  *     open_namei()
  *
@@ -695,16 +713,11 @@ struct dentry * open_namei(const char * pathname, int flag, int mode)
                        error = 0;
                        if (flag & O_EXCL)
                                error = -EEXIST;
-               } else if ((error = may_create(dir->d_inode, dentry)) == 0) {
-                       if (!dir->d_inode->i_op || !dir->d_inode->i_op->create)
-                               error = -EACCES;
-                       else {
-                               DQUOT_INIT(dir->d_inode);
-                               error = dir->d_inode->i_op->create(dir->d_inode, dentry, mode);
-                               /* Don't check for write permission, don't truncate */
-                               acc_mode = 0;
-                               flag &= ~O_TRUNC;
-                       }
+               } else {
+                       error = vfs_create(dir->d_inode, dentry,mode);
+                       /* Don't check for write permission, don't truncate */
+                       acc_mode = 0;
+                       flag &= ~O_TRUNC;
                }
                unlock_dir(dir);
                if (error)
@@ -825,32 +838,45 @@ asmlinkage int sys_mknod(const char * filename, int mode, dev_t dev)
 {
        int error;
        char * tmp;
+       struct dentry * dentry;
 
        lock_kernel();
        error = -EPERM;
        if (S_ISDIR(mode) || (!S_ISFIFO(mode) && !capable(CAP_SYS_ADMIN)))
                goto out;
+       tmp = getname(filename);
+       error = PTR_ERR(tmp);
+       if (IS_ERR(tmp))
+               goto out;
+
        error = -EINVAL;
        switch (mode & S_IFMT) {
        case 0:
-               mode |= S_IFREG;
-               break;
-       case S_IFREG: case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK:
+               mode |= S_IFREG;        /* fallthrough */
+       case S_IFREG:
+               mode &= ~current->fs->umask;
+               dentry = lookup_dentry(filename, NULL, LOOKUP_FOLLOW);
+               if (IS_ERR(dentry))
+                       error = PTR_ERR(dentry);
+               else {
+                       struct dentry *dir = lock_parent(dentry);
+                       error = -ENOENT;
+                       if (check_parent(dir, dentry))
+                               error = vfs_create(dir->d_inode, dentry, mode);
+                       dput(dentry);
+               }
                break;
-       default:
-               goto out;
-       }
-       tmp = getname(filename);
-       error = PTR_ERR(tmp);
-       if (!IS_ERR(tmp)) {
-               struct dentry * dentry = do_mknod(tmp,mode,dev);
-               putname(tmp);
+       case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK:
+               dentry = do_mknod(tmp,mode,dev);
                error = PTR_ERR(dentry);
                if (!IS_ERR(dentry)) {
                        dput(dentry);
                        error = 0;
                }
+               break;
        }
+       putname(tmp);
+
 out:
        unlock_kernel();
        return error;
index cacc0d5c5bb2c82acb1edbd110e098b0c2acb5b7..8fc3a0994039d8932c6b85413d036f0541d21802 100644 (file)
@@ -39,7 +39,7 @@ static int c_seen_eof;
 static int c_last_returned_index;
 static struct ncp_dirent *c_entry = NULL;
 static int c_lock = 0;
-static struct wait_queue *c_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(c_wait);
 
 static int ncp_read_volume_list(struct ncp_server *, int, int,
                                        struct ncp_dirent *);
index c46eeb57bb505cf4c4a2da639dca5fa4852ca3d7..3b5931eccbacbb06fd1b2d91f462ef222d5a54e4 100644 (file)
@@ -470,16 +470,8 @@ nfs_fill_inode(struct inode *inode, struct nfs_fattr *fattr)
                        inode->i_op = &nfs_dir_inode_operations;
                else if (S_ISLNK(inode->i_mode))
                        inode->i_op = &nfs_symlink_inode_operations;
-               else if (S_ISCHR(inode->i_mode)) {
-                       inode->i_op = &chrdev_inode_operations;
-                       inode->i_rdev = to_kdev_t(fattr->rdev);
-               } else if (S_ISBLK(inode->i_mode)) {
-                       inode->i_op = &blkdev_inode_operations;
-                       inode->i_rdev = to_kdev_t(fattr->rdev);
-               } else if (S_ISFIFO(inode->i_mode))
-                       init_fifo(inode);
                else
-                       inode->i_op = NULL;
+                       init_special_inode(inode, inode->i_mode, fattr->rdev);
                /*
                 * Preset the size and mtime, as there's no need
                 * to invalidate the caches.
index eb644935c7e8e295c7937a3d90f6b0ae33c6c47b..f7d2cc551b65bd0120f3d9d4fa7f5bdb98f9cfa2 100644 (file)
@@ -64,7 +64,7 @@ static int                    initialized = 0;
 static int                     hash_lock = 0;
 static int                     want_lock = 0;
 static int                     hash_count = 0;
-static struct wait_queue *     hash_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(        hash_wait );
 
 #define READLOCK               0
 #define WRITELOCK              1
index 9bde82e82377361472cedb710abedc6f312d5725..dbf2b32b979e8c91465312dee67172054569148f 100644 (file)
@@ -16,8 +16,8 @@ static int cleared_flag = 0;
 static char * buffer = NULL;
 static int read_pos, write_pos;
 static int clip_pos, max_pos;
-static struct wait_queue * read_wait = NULL;
-static struct wait_queue * write_wait = NULL;
+static DECLARE_WAIT_QUEUE_HEAD(read_wait);
+static DECLARE_WAIT_QUEUE_HEAD(write_wait);
 
 static /*inline*/ int reserve_write_space(int len)
 {
index 6261670444a9723cfaebe93dc82994ec09628f11..388593cc1cc86a4094b363f5bf1f2eab26df61a0 100644 (file)
@@ -408,29 +408,16 @@ static void qnx4_read_inode(struct inode *inode)
 
        memcpy(&inode->u.qnx4_i, (struct qnx4_inode_info *) raw_inode, QNX4_DIR_ENTRY_SIZE);
        inode->i_op = &qnx4_file_inode_operations;
-       if (S_ISREG(inode->i_mode)) {
+       if (S_ISREG(inode->i_mode))
                inode->i_op = &qnx4_file_inode_operations;
-       } else {
-               if (S_ISDIR(inode->i_mode)) {
-                       inode->i_op = &qnx4_dir_inode_operations;
-               } else {
-                       if (S_ISLNK(inode->i_mode)) {
-                               inode->i_op = &qnx4_symlink_inode_operations;
-                       } else {
-                               if (S_ISCHR(inode->i_mode)) {
-                                       inode->i_op = &chrdev_inode_operations;
-                               } else {
-                                       if (S_ISBLK(inode->i_mode)) {
-                                               inode->i_op = &blkdev_inode_operations;
-                                       } else {
-                                               if (S_ISFIFO(inode->i_mode)) {
-                                                       init_fifo(inode);
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+       else if (S_ISDIR(inode->i_mode))
+               inode->i_op = &qnx4_dir_inode_operations;
+       else if (S_ISLNK(inode->i_mode))
+               inode->i_op = &qnx4_symlink_inode_operations;
+       else
+               /* HUH??? Where is device number? Oh, well... */
+               init_special_inode(inode, inode->i_mode, 0);
+
        brelse(bh);
 }
 
index 94507925c4d84897494f39c908d1044300c23258..3cbcd7b9da18bd48a54077563122d8d57313bc9b 100644 (file)
@@ -53,3 +53,8 @@ Sun, 21 Mar 1999   AV
                        _inode()'s job.
        *    ialloc.c: (sysv_free_inode):
                        Fixed race.
+
+Sun, 30 Apr 1999   AV
+       *    namei.c (sysv_mknod):
+                       Removed dead code (S_IFREG case is now passed to
+                       ->create() by VFS).
index f58560996d994bb1ae0b026422467fc016372838..18f98d3536973ad625e8ff48030553d4285522af 100644 (file)
@@ -882,7 +882,7 @@ void sysv_read_inode(struct inode * inode)
        }
        inode->i_blocks = inode->i_blksize = 0;
        if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-               inode->i_rdev = to_kdev_t(raw_inode->i_a.i_rdev);
+               ;
        else
        if (sb->sv_convert)
                for (block = 0; block < 10+1+1+1; block++)
@@ -899,12 +899,8 @@ void sysv_read_inode(struct inode * inode)
                inode->i_op = &sysv_dir_inode_operations;
        else if (S_ISLNK(inode->i_mode))
                inode->i_op = &sysv_symlink_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
+       else
+               init_special_inode(inode, inode->i_mode,raw_inode->i_a.i_rdev);
 }
 
 /* To avoid inconsistencies between inodes in memory and inodes on disk. */
index 8cea266a8ee5ec1cf1ad6bb3e80166f26ff87a39..455d34b7acdb2389188f03b22e152ae8dfa817a0 100644 (file)
@@ -240,18 +240,7 @@ int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, int rdev)
        if (!inode)
                return -ENOSPC;
        inode->i_uid = current->fsuid;
-       inode->i_mode = mode;
-       inode->i_op = NULL;
-       if (S_ISREG(inode->i_mode))
-               inode->i_op = &sysv_file_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
-       if (S_ISBLK(mode) || S_ISCHR(mode))
-               inode->i_rdev = to_kdev_t(rdev);
+       init_special_inode(inode, mode, rdev);
        mark_inode_dirty(inode);
        error = sysv_add_entry(dir, dentry->d_name.name, 
                               dentry->d_name.len, &bh, &de);
index 84e003d2d294ecb20c70db7ea0f531ea8f451c62..a5a51bac52526daddb7ccbc71b7c64fc5469682d 100644 (file)
@@ -518,7 +518,7 @@ void ufs_read_inode (struct inode * inode)
        inode->u.ufs_i.i_lastfrag = howmany (inode->i_size, uspi->s_fsize);
        
        if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
-               inode->i_rdev = to_kdev_t(SWAB32(ufs_inode->ui_u2.ui_addr.ui_db[0]));
+               ;
        else if (inode->i_blocks) {
                for (i = 0; i < (UFS_NDADDR + UFS_NINDIR); i++)
                        inode->u.ufs_i.i_u1.i_data[i] = ufs_inode->ui_u2.ui_addr.ui_db[i];
@@ -528,7 +528,6 @@ void ufs_read_inode (struct inode * inode)
                        inode->u.ufs_i.i_u1.i_symlink[i] = ufs_inode->ui_u2.ui_symlink[i];
        }
 
-       brelse (bh);
 
        inode->i_op = NULL;
 
@@ -538,12 +537,11 @@ void ufs_read_inode (struct inode * inode)
                inode->i_op = &ufs_dir_inode_operations;
        else if (S_ISLNK(inode->i_mode))
                inode->i_op = &ufs_symlink_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode))
-               init_fifo(inode);
+       else
+               init_special_inode(inode, inode->i_mode,
+                                  SWAB32(ufs_inode->ui_u2.ui_addr.ui_db[0]));
+
+       brelse (bh);
 
 #ifdef UFS_INODE_DEBUG_MORE
        ufs_print_inode (inode);
index 3daf77c57042d10e86f7773730c37e033b20b39b..46c9f8e53b2291238eea971ee70ab3117b8f86f3 100644 (file)
@@ -467,18 +467,7 @@ int ufs_mknod (struct inode * dir, struct dentry *dentry, int mode, int rdev)
                goto out;
 
        inode->i_uid = current->fsuid;
-       inode->i_mode = mode;
-       inode->i_op = NULL;
-       if (S_ISREG(inode->i_mode))
-               inode->i_op = &ufs_file_inode_operations;
-       else if (S_ISCHR(inode->i_mode))
-               inode->i_op = &chrdev_inode_operations;
-       else if (S_ISBLK(inode->i_mode))
-               inode->i_op = &blkdev_inode_operations;
-       else if (S_ISFIFO(inode->i_mode)) 
-               init_fifo(inode);
-       if (S_ISBLK(mode) || S_ISCHR(mode))
-               inode->i_rdev = to_kdev_t(rdev);
+       init_special_inode(inode, mode, rdev);
        mark_inode_dirty(inode);
        bh = ufs_add_entry (dir, dentry->d_name.name, dentry->d_name.len, &de, &err);
        if (!bh)
index c7c94b55871569ff4e6cee149345dd645cf83bc0..ad3aff768343b5ddeb903cab48d552c2063f1ffb 100644 (file)
@@ -163,13 +163,9 @@ dentry, f_pos));
                umsdos_setup_dir(dentry);
        } else if (S_ISLNK (inode->i_mode)) {
                inode->i_op = &umsdos_symlink_inode_operations;
-       } else if (S_ISCHR (inode->i_mode)) {
-               inode->i_op = &chrdev_inode_operations;
-       } else if (S_ISBLK (inode->i_mode)) {
-               inode->i_op = &blkdev_inode_operations;
-       } else if (S_ISFIFO (inode->i_mode)) {
-               init_fifo (inode);
-       }
+       } else
+               init_special_inode(inode, inode->i_mode,
+                                       kdev_t_to_nr(inode->i_rdev));
 }
 
 
index 7124178cb3e852900d0d71d44aa2dd74641323a8..ef838f57366c657df84a68388273617ca56b8357 100644 (file)
@@ -719,6 +719,7 @@ extern struct inode_operations chrdev_inode_operations;
 extern char * bdevname(kdev_t dev);
 extern char * cdevname(kdev_t dev);
 extern char * kdevname(kdev_t dev);
+extern void init_special_inode(struct inode *, umode_t, int);
 
 
 extern void init_fifo(struct inode * inode);
index eaae0ecc53f5e11c6768dd63e657368fd09b5d9e..659c1c6d24da9f5cd9b060b2ceb99db987bd86fd 100644 (file)
@@ -225,7 +225,6 @@ extern hfs_rwret_t hfs_dir_read(struct file *, char *, hfs_rwarg_t,
                                loff_t *);
 extern int hfs_create(struct inode *, struct dentry *, int);
 extern int hfs_mkdir(struct inode *, struct dentry *, int);
-extern int hfs_mknod(struct inode *, struct dentry *, int, int);
 extern int hfs_unlink(struct inode *, struct dentry *);
 extern int hfs_rmdir(struct inode *, struct dentry *);
 extern int hfs_rename(struct inode *, struct dentry *,
index a60d29860a31eda9f564a02ba63343526fc1040d..07219a5a5b4a8bc9ddf626449c9346439f498d7b 100644 (file)
@@ -123,7 +123,7 @@ struct lp_struct {
        unsigned int runchars;
        struct lp_stats stats;
 #endif
-       struct wait_queue *wait_q;
+       wait_queue_head_t wait_q;
        unsigned int last_error;
        volatile unsigned int irq_detected:1;
        volatile unsigned int irq_missed:1;
index 8fdd18c881892d2a02e85dd3e8f7d502677d6d0d..2fcb3c736c65cd58d5b7b3d3bc73ecd4d1c967f8 100644 (file)
@@ -358,6 +358,7 @@ EXPORT_SYMBOL(clear_inode);
 EXPORT_SYMBOL(refile_buffer);
 EXPORT_SYMBOL(nr_async_pages);
 EXPORT_SYMBOL(___strtok);
+EXPORT_SYMBOL(init_special_inode);
 EXPORT_SYMBOL(init_fifo);
 EXPORT_SYMBOL(fifo_inode_operations);
 EXPORT_SYMBOL(chrdev_inode_operations);