Commit ed6ac3a1 authored by Linus Torvalds's avatar Linus Torvalds

Import 1.3.88

parent f806c6db
This diff is collapsed.
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 87
SUBLEVEL = 88
ARCH = i386
......
......@@ -951,7 +951,7 @@ int ftape_wakeup_drive(wake_up_types method)
default:
result = -ENODEV; /* unknown wakeup method */
}
/* If wakeup succeeded we shouldn't get and error here..
/* If wakeup succeeded we shouldn't get an error here..
*/
if (result == 0) {
result = ftape_report_raw_drive_status(&status);
......
......@@ -527,7 +527,7 @@ static int stl_findpcibrds(void);
/*
* Define the driver info for a user level control device. Used mainly
* to get at port stats - only ont using the port device itself.
* to get at port stats - only not using the port device itself.
*/
static struct file_operations stl_fsiomem = {
NULL,
......
......@@ -51,7 +51,7 @@
*
* Revision 1.8 1995/03/15 12:49:44 fritz
* Added support for SPV's
* Split pollbchan_work ifor calling send-routine directly
* Split pollbchan_work for calling send-routine directly
*
* Revision 1.7 1995/02/20 03:48:03 fritz
* Added support of new request_region-function.
......
......@@ -419,7 +419,6 @@ int pas16_detect(Scsi_Host_Template * tpnt) {
else
instance->irq = NCR5380_probe_irq(instance, PAS16_IRQS);
instance->irq = IRQ_NONE; /*****temp****/
if (instance->irq != IRQ_NONE)
if (request_irq(instance->irq, pas16_intr, SA_INTERRUPT, "pas16", NULL)) {
printk("scsi%d : IRQ%d not free, interrupts disabled\n",
......
......@@ -277,6 +277,7 @@ static struct dev_info device_list[] =
{"TEXEL","CD-ROM","1.06", BLIST_BORKEN},
{"INSITE","Floptical F*8I","*", BLIST_KEY},
{"INSITE","I325VM","*", BLIST_KEY},
{"NRC","MBR-7","*", BLIST_FORCELUN | BLIST_SINGLELUN},
{"PIONEER","CD-ROM DRM-602X","*", BLIST_FORCELUN | BLIST_SINGLELUN},
{"PIONEER","CD-ROM DRM-604X","*", BLIST_FORCELUN | BLIST_SINGLELUN},
{"EMULEX","MD21/S2 ESDI","*",BLIST_FORCELUN | BLIST_SINGLELUN},
......
......@@ -2653,7 +2653,7 @@ guswave_patchmgr (int dev, struct patmgr_info *rec)
*/
offs += sample_ptrs[sample]; /*
* Begin offsess + offset to DRAM
* Begin offset + offset to DRAM
*/
for (n = 0; n < l; n++)
......@@ -2698,7 +2698,7 @@ guswave_patchmgr (int dev, struct patmgr_info *rec)
*/
offs += sample_ptrs[sample]; /*
* Begin offsess + offset to DRAM
* Begin offset + offset to DRAM
*/
for (n = 0; n < l; n++)
......
......@@ -1145,7 +1145,7 @@ attach_ss_ms_sound (long mem_start, struct address_info *hw_config)
sscape_write (devc, GA_DMACFG_REG, 0x50);
/*
* Take the gate-arry off of the DMA channel.
* Take the gate-array off of the DMA channel.
*/
sscape_write (devc, GA_DMAB_REG, 0x20);
......
......@@ -430,7 +430,7 @@ void isofs_statfs (struct super_block *sb, struct statfs *buf, int bufsiz)
struct statfs tmp;
tmp.f_type = ISOFS_SUPER_MAGIC;
tmp.f_bsize = 1 << ISOFS_BLOCK_BITS;
tmp.f_bsize = sb->s_blocksize;
tmp.f_blocks = sb->u.isofs_sb.s_nzones;
tmp.f_bfree = 0;
tmp.f_bavail = 0;
......@@ -681,7 +681,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent)
struct iso_directory_record * de;
offset = 0;
block = extent << (ISOFS_BLOCK_BITS - bufbits);
block = extent << (ISOFS_ZONE_BITS(parent) - bufbits);
if (!(bh = bread(parent->i_dev, block, bufsize))) return -1;
while (1 == 1) {
......@@ -689,6 +689,7 @@ int isofs_lookup_grandparent(struct inode * parent, int extent)
if (*((unsigned char *) de) == 0)
{
brelse(bh);
printk("Directory .. not found\n");
return -1;
}
......@@ -718,9 +719,11 @@ int isofs_lookup_grandparent(struct inode * parent, int extent)
result = -1;
offset = 0;
block = parent_dir << (ISOFS_BLOCK_BITS - bufbits);
block = parent_dir << (ISOFS_ZONE_BITS(parent) - bufbits);
if (!block || !(bh = bread(parent->i_dev,block, bufsize)))
{
return -1;
}
for(;;)
{
......@@ -738,11 +741,19 @@ int isofs_lookup_grandparent(struct inode * parent, int extent)
block++;
directory_size -= bufsize;
if(directory_size < 0) return -1;
if((block & 1) && (ISOFS_BLOCK_BITS - bufbits))
return -1;
if((block & 1) && (ISOFS_ZONE_BITS(parent) - bufbits) == 1)
{
return -1;
}
if((block & 3) && (ISOFS_ZONE_BITS(parent) - bufbits) == 2)
{
return -1;
}
if (!block
|| !(bh = bread(parent->i_dev,block, bufsize)))
{
return -1;
}
continue;
}
......@@ -764,7 +775,11 @@ int isofs_lookup_grandparent(struct inode * parent, int extent)
brelse(bh);
offset -= bufsize;
directory_size -= bufsize;
if(directory_size < 0) return -1;
if(directory_size < 0)
{
printk("Directory size < 0\n");
return -1;
}
block++;
if(!(bh = bread(parent->i_dev,block,bufsize))) {
kfree(cpnt);
......
......@@ -199,7 +199,9 @@ static struct buffer_head * isofs_find_entry(struct inode * dir,
find_rock_ridge_relocation(de,dir));
if(inode_number == -1){
/* Should never happen */
printk("Backlink not properly set.\n");
printk("Backlink not properly set %x %lx.\n",
isonum_733(de->extent),
dir->i_ino);
goto out;
}
}
......
......@@ -507,6 +507,8 @@ char * get_rock_ridge_symlink(struct inode * inode)
if(slen < 2) break;
if(!rootflag) strcat(rpnt,"/");
};
case SIG('C','E'):
CHECK_CE; /* This tells is if there is a continuation record */
break;
default:
break;
......
......@@ -486,7 +486,7 @@ static int nfs_rmdir(struct inode *dir, const char *name, int len)
static int nfs_sillyrename(struct inode *dir, const char *name, int len)
{
struct inode *inode;
char silly[14];
char silly[16];
int slen, ret;
dir->i_count++;
......
......@@ -122,6 +122,7 @@ struct iso_directory_record {
#define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize)
#define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits)
#define ISOFS_ZONE_BITS(INODE) ((INODE)->i_sb->u.isofs_sb.s_log_zone_size)
#if 0
#ifdef ISOFS_FIXED_BLOCKSIZE
......
......@@ -201,7 +201,7 @@ static __inline__ int tcp_new_window(struct sock * sk)
/*
* RFC 1122 says:
*
* "the suggested [SWS] avoidance algoritm for the receiver is to keep
* "the suggested [SWS] avoidance algorithm for the receiver is to keep
* RECV.NEXT + RCV.WIN fixed until:
* RCV.BUFF - RCV.USER - RCV.WINDOW >= min(1/2 RCV.BUFF, MSS)"
*
......@@ -213,7 +213,7 @@ static __inline__ int tcp_new_window(struct sock * sk)
* the size of the current free space, truncated to a multiple
* of 1024 bytes. If the window is smaller than
* min(sk->mss, MAX_WINDOW/2)
* then we adversize the window as having size 0, unless this
* then we advertise the window as having size 0, unless this
* would shrink the window we offered last time.
* This results in as much as double the throughput as the original
* implementation.
......
......@@ -329,7 +329,7 @@ static inline unsigned long generic_file_readahead(struct file * filp, struct in
if (PageLocked(page)) {
max_ahead = filp->f_ramax;
rapos = ppos;
/* try_async = 1 */ /* Seems questionnable */
/* try_async = 1 */ /* Seems questionable */
}
/*
* The current page is not locked
......@@ -435,10 +435,10 @@ int generic_file_read(struct inode * inode, struct file * filp, char * buf, int
pos = filp->f_pos;
/*
* Dont beleive f_reada
* Dont believe f_reada
* --------------------
* f_reada is set to 0 by seek operations.
* If we beleive f_reada, small seek ops break asynchronous read-ahead.
* If we believe f_reada, small seek ops break asynchronous read-ahead.
* That may be quite bad for small seeks or rewrites operations.
* I prefer to check if the current position is inside the previous read-ahead
* window.
......@@ -461,10 +461,10 @@ int generic_file_read(struct inode * inode, struct file * filp, char * buf, int
/*
* Now f_reada = 1 means that asynchronous read-ahead is the good tactics.
* Will try asynchrous read-ahead as soon as possible.
* Will try asynchronous read-ahead as soon as possible.
* Double the max read ahead size each time.
* That euristic avoid to do some large IO for files that are not really
* accessed sequentialy.
* That heuristic avoid to do some large IO for files that are not really
* accessed sequentially.
*/
if (filp->f_reada) {
try_async = 1;
......
......@@ -172,26 +172,15 @@ static void bad_tcp_sequence(struct sock *sk, struct tcphdr *th, u32 end_seq,
tcp_send_reset(sk->saddr,sk->daddr,th,sk->prot,NULL,dev, sk->ip_tos,sk->ip_ttl);
return;
}
/*
* We got out of sequence data.
* This turns out to be tricky. If the packet ends at the
* edge of the window, then we MUST ack the packet,
* otherwise a lost ACK packet can stall the TCP.
* We deal with this case in tcp_queue().
* On the other hand, if the packet is further to the
* left of the window, then we are looking a retransmitted
* packet. If we ACK it we can get into a situation that
* will later induce a fast retransmit of another packet.
* This can end up eating up half our bandwidth.
*/
/* This case is NOT supposed to be able
* to happen. Test for it?
/*
* 4.3reno machines look for these kind of acks so they can do fast
* recovery. Three identical 'old' acks lets it know that one frame has
* been lost and should be resent. Because this is before the whole window
* of data has timed out it can take one lost frame per window without
* stalling. [See Jacobson RFC1323, Stevens TCP/IP illus vol2]
*/
if (sk->acked_seq == end_seq)
printk("Impossible out of sequence data case.\n");
return;
tcp_send_ack(sk);
}
/*
......@@ -915,9 +904,17 @@ static int tcp_ack(struct sock *sk, struct tcphdr *th, u32 ack, int len)
break;
default:
/*
* Reset the xmit timer - state has changed.
* Must check send_head and write_queue
* to determine which timeout to use.
*/
tcp_reset_xmit_timer(sk, 0, 0);
if (sk->send_head || !skb_queue_empty(&sk->write_queue)) {
tcp_reset_xmit_timer(sk, TIME_WRITE, sk->rto);
} else if (sk->keepopen) {
tcp_reset_xmit_timer(sk, TIME_KEEPOPEN, TCP_TIMEOUT_LEN);
} else {
del_timer(&sk->retransmit_timer);
sk->ip_xmit_timeout = 0;
}
break;
}
}
......@@ -1237,7 +1234,7 @@ static void tcp_queue(struct sk_buff * skb, struct sock * sk, struct tcphdr *th)
if (!after(skb->seq, ack_seq)) {
if (after(skb->end_seq, ack_seq)) {
/* the packet stradles our window end */
/* the packet straddles our window end */
struct sk_buff_head * list = &sk->receive_queue;
struct sk_buff * next;
ack_seq = tcp_queue_ack(skb, sk);
......@@ -1285,7 +1282,7 @@ static void tcp_queue(struct sk_buff * skb, struct sock * sk, struct tcphdr *th)
*/
int delay = HZ/2;
if (th->psh)
delay = HZ/10;
delay = HZ/50;
tcp_send_delayed_ack(sk, delay);
}
......@@ -1335,7 +1332,7 @@ static void tcp_queue(struct sk_buff * skb, struct sock * sk, struct tcphdr *th)
*/
static int tcp_data(struct sk_buff *skb, struct sock *sk,
unsigned long saddr, unsigned short len)
unsigned long saddr, unsigned int len)
{
struct tcphdr *th;
u32 new_seq, shut_seq;
......@@ -1738,9 +1735,9 @@ int tcp_rcv(struct sk_buff *skb, struct device *dev, struct options *opt,
{
/* A valid ack from a different connection
start. Shouldn't happen but cover it */
tcp_statistics.TcpAttemptFails++;
tcp_send_reset(daddr, saddr, th,
sk->prot, opt,dev,sk->ip_tos,sk->ip_ttl);
tcp_statistics.TcpAttemptFails++;
tcp_send_reset(daddr, saddr, th,
sk->prot, opt,dev,sk->ip_tos,sk->ip_ttl);
kfree_skb(skb, FREE_READ);
return 0;
}
......
......@@ -29,66 +29,19 @@ void tcp_delack_timer(unsigned long data)
/*
* Reset the retransmission timer
*
* We currently ignore the why/when parameters, and decide on
* our own how long we should wait on our own..
*/
void tcp_reset_xmit_timer(struct sock *sk, int why, unsigned long when)
{
unsigned long now = jiffies;
when = ~0UL;
why = -1;
/*
* Was an old timer event active?
*/
if (del_timer(&sk->retransmit_timer)) {
why = sk->ip_xmit_timeout;
when = sk->retransmit_timer.expires;
}
/*
* Keepopen processing?
*/
if (sk->keepopen) {
unsigned long new_when = now + TCP_TIMEOUT_LEN;
if (new_when < when) {
when = new_when;
why = TIME_KEEPOPEN;
}
}
/*
* Retransmission?
*/
if (sk->send_head) {
struct sk_buff * skb = sk->send_head;
unsigned long new_when = skb->when + sk->rto;
if (new_when < when) {
when = new_when;
why = TIME_WRITE;
}
} else if (!skb_queue_empty(&sk->write_queue)) {
/*
* Zero window probe?
*/
struct sk_buff * skb = sk->write_queue.next;
if (before(sk->window_seq, skb->end_seq)) {
unsigned long new_when = now + TIME_PROBE0;
if (new_when < when) {
when = new_when;
why = TIME_PROBE0;
}
}
}
if (why >= 0) {
sk->ip_xmit_timeout = why;
sk->retransmit_timer.expires = when;
add_timer(&sk->retransmit_timer);
del_timer(&sk->retransmit_timer);
sk->ip_xmit_timeout = why;
if((long)when < 0)
{
when=3;
printk("Error: Negative timer in xmit_timer\n");
}
sk->retransmit_timer.expires=jiffies+when;
add_timer(&sk->retransmit_timer);
}
/*
......@@ -222,6 +175,19 @@ static int tcp_write_timeout(struct sock *sk)
return 1;
}
/*
* It could be we got here because we needed to send an ack,
* so we need to check for that and not just normal retransmit.
*/
static void tcp_time_write_timeout(struct sock * sk)
{
/*
* Retransmission
*/
sk->prot->retransmit (sk, 0);
tcp_write_timeout(sk);
}
/*
* The TCP retransmit timer. This lacks a few small details.
......@@ -267,25 +233,27 @@ void tcp_retransmit_timer(unsigned long data)
/* Window probing */
case TIME_PROBE0:
tcp_send_probe0(sk);
tcp_reset_xmit_timer(sk, 0, 0); /* get us going again */
tcp_write_timeout(sk);
break;
/* Retransmitting */
case TIME_WRITE:
sk->prot->retransmit (sk, 0);
tcp_write_timeout(sk);
tcp_reset_xmit_timer(sk, 0, 0); /* get us going again */
tcp_time_write_timeout(sk);
break;
/* Sending Keepalives */
case TIME_KEEPOPEN:
/*
* this reset_timer() call is a hack, this is not
* how KEEPOPEN is supposed to work.
*/
tcp_reset_xmit_timer (sk, TIME_KEEPOPEN, TCP_TIMEOUT_LEN);
/* Send something to keep the connection open. */
if (sk->prot->write_wakeup)
sk->prot->write_wakeup (sk);
sk->retransmits++;
sk->prot->retransmits++;
tcp_write_timeout(sk);
tcp_reset_xmit_timer (sk, 0, 0);
break;
default:
......
#
# Create a "reference" object to steal colors from.
#
button .ref
#
# This is a handy replacement for ".widget cget" that requires neither tk4
# nor additional source code uglification.
#
proc cget { w option } {
return [lindex [$w configure $option] 4]
return "[lindex [$w configure $option] 4]"
}
#
......@@ -18,12 +13,25 @@ proc cget { w option } {
#
proc vfix { var } {
global $var
if [catch {set $var [subst $$var]}] {
if [ catch {eval concat $$var} ] {
puts stdout "WARNING - broken Config.in! $var was not declared!"
set $var 0
}
}
#
# Create a "reference" object to steal colors from.
#
button .ref
#
# On monochrome displays, -disabledforeground is blank by default; that's
# bad. Fill it with -foreground instead.
#
if { [cget .ref -disabledforeground] == "" } {
.ref configure -disabledforeground [cget .ref -foreground]
}
#
# Define some macros we will need to parse the config.in file.
#
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment