]> git.neil.brown.name Git - history.git/commitdiff
Import 1.1.59 1.1.59
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:42 +0000 (15:09 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:42 +0000 (15:09 -0500)
Makefile
drivers/char/busmouse.c
drivers/char/tty_io.c
drivers/scsi/ChangeLog
fs/open.c
kernel/ksyms.c
mm/swap.c
net/inet/tcp.c

index 292a9e97d26dd4b537e4c79283b8856026a51e08..3f3182f380665c9f048f9b07c79e1bbfc9510c9c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 1
-SUBLEVEL = 58
+SUBLEVEL = 59
 
 ARCH = i386
 
index 0c6373ab8935a81dc877652d36760bdc6338e819..7c2ce9910d0f2f3b0739e14348e8206caa6127c2 100644 (file)
@@ -234,6 +234,7 @@ unsigned long bus_mouse_init(unsigned long kmem_start)
        mouse.dx = 0;
        mouse.dy = 0;
        mouse.wait = NULL;
-       printk("Logitech Bus mouse detected and installed.\n");
+       printk("Logitech Bus mouse detected and installed with IRQ %d.\n",
+              mouse_irq);
        return kmem_start;
 }
index 7f8dfe0a7409c4414e91ceb0e75e3228674d73b2..f95c75e0a95f965c15fd3a2a49f38cc2dbe2b6c9 100644 (file)
@@ -1463,12 +1463,13 @@ void do_SAK( struct tty_struct *tty)
        tty_hangup(tty);
 #else
        struct task_struct **p;
-       int session = tty->session;
+       int session;
        int             i;
        struct file     *filp;
        
        if (!tty)
                return;
+       session  = tty->session;
        if (tty->ldisc.flush_buffer)
                tty->ldisc.flush_buffer(tty);
        if (tty->driver.flush_buffer)
index 8e87692c4f5861997ce5c53e18670b0a468444fc..644cd90029a90927d48dabb46d3bc39949decb96 100644 (file)
@@ -1,3 +1,146 @@
+Tue Oct 11 08:47:39 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.54 released.
+
+       * Add third PCI chip id.  [Drew]
+
+       * buslogic.c: Set BUSLOGIC_CMDLUN back to 1 [Eric].
+
+Sun Oct  9 20:23:14 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.53 released.
+
+       * scsi.c: Do not allocate dma bounce buffers if we have exactly
+       16Mb.
+
+Fri Sep  9 05:35:30 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.51 released.
+
+       * aha152x.c: Add support for disabling the parity check.  Update
+       to version 1.4. [Juergen].
+
+       * seagate.c: Tweak debugging message.
+
+Wed Aug 31 10:15:55 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.50 released.
+
+       * aha152x.c: Add eb800 for Vtech Platinum SMP boards. [Juergen].
+
+       * scsi.c: Add Quantum PD1225S to blacklist.
+
+Fri Aug 26 09:38:45 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.49 released.
+
+       * sd.c: Fix bug when we were deleting the wrong entry if we
+       get an unsupported sector size device.
+
+       * sr.c: Another spelling patch.
+
+Thu Aug 25 09:15:27 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.48 released.
+
+       * Throughout: Use new semantics for request_dma, as appropriate.
+
+       * sr.c: Print correct device number.
+
+Sun Aug 21 17:49:23 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.47 released.
+
+       * NCR5380.c: Add support for LIMIT_TRANSFERSIZE.
+
+       * constants.h: Add prototype for print_Scsi_Cmnd.
+
+       * pas16.c: Some more minor tweaks.  Test for Mediavision board.
+       Allow for disks > 1Gb.  [Drew??]
+
+       * sr.c: Set SCpnt->transfersize.
+
+Tue Aug 16 17:29:35 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.46 released.
+
+       * Throughout: More spelling fixups.
+
+       * buslogic.c: Add a few more fixups from Dave.  Disk translation
+       mainly.
+
+       * pas16.c: Add a few patches (Drew?).
+
+
+Thu Aug 11 20:45:15 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.44 released.
+
+       * hosts.c: Add type casts for scsi_init_malloc.
+
+       * scsicam.c: Add type cast.
+
+Wed Aug 10 19:23:01 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.43 released.
+
+       * Throughout: Spelling cleanups. [??]
+
+       * aha152x.c, NCR53*.c, fdomain.c, g_NCR5380.c, pas16.c, seagate.c,
+        t128.c: Use request_irq, not irqaction. [??]
+
+       * aha1542.c: Move test for shost before we start to use shost.
+
+       * aha1542.c, aha1740.c, ultrastor.c, wd7000.c: Use new
+       calling sequence for request_irq.
+
+       * buslogic.c: Update from Dave Gentzel.
+
+Tue Aug  9 09:32:59 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.42 released.
+
+       * NCR5380.c: Change NCR5380_print_status to static.
+
+       * seagate.c: A few more bugfixes.  Only Drew knows what they are
+       for.
+
+       * ultrastor.c: Tweak some __asm__ directives so that it works
+       with newer compilers. [??]
+
+Sat Aug  6 21:29:36 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.40 released.
+
+       * NCR5380.c: Return SCSI_RESET_WAKEUP from reset function.
+
+       * aha1542.c: Reset mailbox status after a bus device reset.
+
+       * constants.c: Fix typo (;;).
+
+       * g_NCR5380.c: 
+       * pas16.c:  Correct usage of NCR5380_init.
+
+       * scsi.c: Remove redunant (and unused variables).
+
+       * sd.c: Use memset to clear all of rscsi_disks before we use it.
+
+       * sg.c: Ditto, except for scsi_generics.
+
+       * sr.c: Ditto, except for scsi_CDs.
+
+       * st.c: Initialize STp->device.
+
+       * seagate.c: Fix bug. [Drew]
+
+Thu Aug  4 08:47:27 1994  Eric Youngdale  (eric@andante)
+
+       * Linux 1.1.39 released.
+
+       * Makefile: Fix typo in NCR53C7xx.
+
+       * st.c: Print correct number for device.
+
 Sat Jul  9 15:01:03 1994  Eric Youngdale  (eric@esp22)
 
        More changes to eventually support loadable modules.  Mainly
index e72ef7bf657ce8084f9c597e221ad12f612b5098..cf3f3bec933e68e9963030d46191a6ba5411aef9 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -312,6 +312,7 @@ asmlinkage int sys_fchown(unsigned int fd, uid_t user, gid_t group)
                user = inode->i_uid;
        if (group == (gid_t) -1)
                group = inode->i_gid;
+       newattrs.ia_mode = inode->i_mode;
        newattrs.ia_uid = user;
        newattrs.ia_gid = group;
        newattrs.ia_ctime = CURRENT_TIME;
@@ -320,14 +321,14 @@ asmlinkage int sys_fchown(unsigned int fd, uid_t user, gid_t group)
         * If the owner has been changed, remove the setuid bit
         */
        if (user != inode->i_uid && inode->i_mode & S_ISUID) {
-               newattrs.ia_mode = inode->i_mode & ~S_ISUID;
+               newattrs.ia_mode &= ~S_ISUID;
                newattrs.ia_valid |= ATTR_MODE;
        }
        /*
         * If the group has been changed, remove the setgid bit
         */
        if (group != inode->i_gid && inode->i_mode & S_ISGID) {
-               newattrs.ia_mode = inode->i_mode & ~S_ISGID;
+               newattrs.ia_mode &= ~S_ISGID;
                newattrs.ia_valid |= ATTR_MODE;
        }
        inode->i_dirt = 1;
index 363b1fcc0222bf5724348c5e2aa7b198923ca41f..063e04564e465fcc3d7d81e2be76669e0c6a5a98 100644 (file)
@@ -87,6 +87,8 @@ struct symbol_table symbol_table = { 0, 0, 0, /* for stacked module support */
        X(namei),
        X(lnamei),
        X(open_namei),
+       X(inode_setattr),
+       X(inode_change_ok),
 
        /* device registration */
        X(register_chrdev),
index 83649ca65da31451457a183c98730773bf98d389..908e2e4d52bc52c8d6ccc5b94c1a9717f1d5ab80 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -637,6 +637,33 @@ repeat:
        return 0;
 }
 
+/*
+ * Yes, I know this is ugly. Don't tell me.
+ */
+unsigned long __get_dma_pages(int priority, unsigned long order)
+{
+       unsigned long list = 0; 
+       unsigned long result;
+       unsigned long limit = 16*1024*1024;
+       
+       /* if (EISA_bus) limit = ~0UL; */
+       if (priority != GFP_ATOMIC)
+               priority = GFP_BUFFER;
+       for (;;) {
+               result = __get_free_pages(priority, order);
+               if (result < limit) /* covers failure as well */
+                       break;
+               *(unsigned long *) result = list;
+               list = result;
+       }
+       while (list) {
+               unsigned long tmp = list;
+               list = *(unsigned long *) list;
+               free_pages(tmp, order);
+       }
+       return result;
+}
+
 /*
  * Show free area list (used inside shift_scroll-lock stuff)
  * We also calculate the percentage fragmentation. We do this by counting the
index 87a5cb50b2c84b8e595fa7799fbc55c6681451b4..2f81c506eb8770614b7657bd61e2e7a77e033a59 100644 (file)
@@ -86,6 +86,9 @@
  *             Alan Cox        :       Reset on closedown bug.
  *     Peter De Schrijver      :       ENOTCONN check missing in tcp_sendto().
  *             Michael Pall    :       Handle select() after URG properly in all cases.
+ *             Michael Pall    :       Undo the last fix in tcp_read_urg() (multi URG PUSH broke rlogin).
+ *             Michael Pall    :       Fix the multi URG PUSH problem in tcp_readable(), select() after URG works now.
+ *             Michael Pall    :       recv(...,MSG_OOB) never blocks in the BSD api.
  *
  *
  * To Fix:
@@ -407,14 +410,29 @@ static int tcp_readable(struct sock *sk)
                                amount--;
                        counted += sum;
                }
+               /*
+                * Don't count urg data ... but do it in the right place!
+                * Consider: "old_data (ptr is here) URG PUSH data"
+                * The old code would stop at the first push because
+                * it counted the urg (amount==1) and then does amount--
+                * *after* the loop.  This means tcp_readable() always
+                * returned zero if any URG PUSH was in the queue, even
+                * though there was normal data available. If we subtract
+                * the urg data right here, we even get it to work for more
+                * than one URG PUSH skb without normal data.
+                * This means that select() finally works now with urg data
+                * in the queue.  Note that rlogin was never affected
+                * because it doesn't use select(); it uses two processes
+                * and a blocking read().  And the queue scan in tcp_read()
+                * was correct.  Mike <pall@rz.uni-karlsruhe.de>
+                */
+               if (skb->h.th->urg)
+                       amount--;       /* don't count urg data */
                if (amount && skb->h.th->psh) break;
                skb = skb->next;
        }
        while(skb != (struct sk_buff *)&sk->receive_queue);
 
-       if (amount && !sk->urginline && sk->urg_data &&
-           (sk->urg_seq - sk->copied_seq) <= (counted - sk->copied_seq))
-               amount--;               /* don't count urg data */
        restore_flags(flags);
        if(sk->debug)
                printk("got %lu bytes.\n",amount);
@@ -434,42 +452,27 @@ static int tcp_select(struct sock *sk, int sel_type, select_table *wait)
        switch(sel_type) 
        {
                case SEL_IN:
-                       if(sk->debug)
-                               printk("select in");
                        select_wait(sk->sleep, wait);
-                       if(sk->debug)
-                               printk("-select out");
                        if (skb_peek(&sk->receive_queue) != NULL) 
                        {
                                if ((sk->state == TCP_LISTEN && tcp_find_established(sk)) || tcp_readable(sk)) 
                                {
                                        release_sock(sk);
-                                       if(sk->debug)
-                                               printk("-select ok data\n");
                                        return(1);
                                }
                        }
                        if (sk->err != 0)       /* Receiver error */
                        {
                                release_sock(sk);
-                               if(sk->debug)
-                                       printk("-select ok error");
                                return(1);
                        }
                        if (sk->shutdown & RCV_SHUTDOWN) 
                        {
                                release_sock(sk);
-                               if(sk->debug)
-                                       printk("-select ok down\n");
                                return(1);
                        } 
-                       else 
-                       {
-                               release_sock(sk);
-                               if(sk->debug)
-                                       printk("-select fail\n");
-                               return(0);
-                       }
+                       release_sock(sk);
+                       return(0);
                case SEL_OUT:
                        select_wait(sk->sleep, wait);
                        if (sk->shutdown & SEND_SHUTDOWN) 
@@ -1405,28 +1408,20 @@ static void cleanup_rbuf(struct sock *sk)
 static int tcp_read_urg(struct sock * sk, int nonblock,
             unsigned char *to, int len, unsigned flags)
 {
+#ifdef NOTDEF
        struct wait_queue wait = { current, NULL };
+#endif
 
        while (len > 0) 
        {
                if (sk->urginline || !sk->urg_data || sk->urg_data == URG_READ)
                        return -EINVAL;
-               sk->inuse=1;
+               sk->inuse = 1;
                if (sk->urg_data & URG_VALID) 
                {
                        char c = sk->urg_data;
                        if (!(flags & MSG_PEEK))
-                       {
-                               /* Skip over urgent data, so tcp_readable() returns
-                                  something again.  This in turn makes tcp_select()
-                                  happy.  Mike <pall@rz.uni-karlsruhe.de> */
-                               if (sk->copied_seq + 1 == sk->urg_seq)
-                               {
-                                       wake_up_interruptible(sk->sleep);
-                                       sk->copied_seq++;
-                               }
                                sk->urg_data = URG_READ;
-                       }
                        put_fs_byte(c, to);
                        release_sock(sk);
                        return 1;
@@ -1456,6 +1451,16 @@ static int tcp_read_urg(struct sock * sk, int nonblock,
                        return 0;
                }
 
+               /*
+                * Fixed the recv(..., MSG_OOB) behaviour.  BSD docs and
+                * the available implementations agree in this case:
+                * this call should never block, independent of the
+                * blocking state of the socket.
+                * Mike <pall@rz.uni-karlsruhe.de>
+                */
+               return -EAGAIN;
+#ifdef NOTDEF
+               /* remove the loop, if this dead code gets removed! */
                if (nonblock)
                        return -EAGAIN;
 
@@ -1469,6 +1474,7 @@ static int tcp_read_urg(struct sock * sk, int nonblock,
                        schedule();
                remove_wait_queue(sk->sleep, &wait);
                current->state = TASK_RUNNING;
+#endif
        }
        return 0;
 }