VERSION = 1
PATCHLEVEL = 1
-SUBLEVEL = 58
+SUBLEVEL = 59
ARCH = i386
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;
}
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)
+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
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;
* 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;
X(namei),
X(lnamei),
X(open_namei),
+ X(inode_setattr),
+ X(inode_change_ok),
/* device registration */
X(register_chrdev),
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
* 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:
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);
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)
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;
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;
schedule();
remove_wait_queue(sk->sleep, &wait);
current->state = TASK_RUNNING;
+#endif
}
return 0;
}