]> git.neil.brown.name Git - history.git/commitdiff
Linux 2.2.13pre13 2.2.13pre13
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Fri, 23 Nov 2007 20:19:56 +0000 (15:19 -0500)
committerAlan Cox <alan@lxorguk.ukuu.org.uk>
Fri, 23 Nov 2007 20:19:56 +0000 (15:19 -0500)
o NFS rename fix (Trond)
o TCP sequence guessing fix (Alexey Kuznetsov)
o xntp SMP lockup fix (DaveM)

Makefile
drivers/net/dmfe.c
drivers/net/sktr.h
fs/nfs/dir.c
kernel/time.c
net/ipv4/tcp_ipv4.c

index dc9006b8f57d5b5c0962b9ed225ccfd5fc587656..66b111509124012ec31ba3e1f508c14a0725979c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 2
 SUBLEVEL = 13
-EXTRAVERSION = pre12
+EXTRAVERSION = pre13
 
 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
 
index 7893c16ad789af2907744209adcde6ab10f91c4e..a0b815bae3a5b6c03b8b3dba5b68f8827c4794eb 100644 (file)
@@ -409,8 +409,10 @@ int dmfe_reg_board(struct device *dev)
                dev = 0;        /* NULL device */
        }
 
+#ifdef MODULE
        if (!dm9102_count)
                printk(KERN_WARNING "dmfe: Can't find DM910X board\n");
+#endif         
        return dm9102_count ? 0 : -ENODEV;
 }
 
@@ -1221,7 +1223,7 @@ static void parser_ctrl_info(struct dmfe_board_info *db)
        }
 
        if (i >= count) {
-               printk("Can't found Control Block\n");
+               printk("Can't find Control Block\n");
                db->phy_addr = 1;
        }
 }
index fee24be8eaa55039472c830c44ca0c8fa4b86908..6d888aad2f283e27984605e30d9464cc2b6e19ad 100644 (file)
@@ -645,7 +645,7 @@ typedef struct {
  * but possibly multiple TPLs for one frame) the length of the TPLs has to be
  * initialized in the OPL. (OPEN parameter list)
  */
-#define TPL_NUM                3       /* Number of Transmit Parameter Lists.
+#define TPL_NUM                9       /* Number of Transmit Parameter Lists.
                                 * !! MUST BE >= 3 !!
                                 */
 
index 24f5f7ccd9bb03da83cca71db4957ecdd9f2ca64..0cebfc35b544d5951b580e13ce059c5e4ec49b70 100644 (file)
@@ -1080,7 +1080,7 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
        struct inode *old_inode = old_dentry->d_inode;
        struct inode *new_inode = new_dentry->d_inode;
        struct dentry *dentry = NULL;
-       int error, rehash = 0, update = 1;
+       int error, rehash = 0;
 
        dfprintk(VFS, "NFS: rename(%s/%s -> %s/%s, ct=%d)\n",
                old_dentry->d_parent->d_name.name, old_dentry->d_name.name,
@@ -1126,13 +1126,6 @@ new_dentry->d_parent->d_name.name,new_dentry->d_name.name,new_dentry->d_count);
        }
 
        /*
-        * Check for within-directory rename ... no complications.
-        */
-       if (new_dir == old_dir)
-               goto do_rename;
-       /*
-        * Cross-directory move ...
-        *
         * ... prune child dentries and writebacks if needed.
         */
        if (old_dentry->d_count > 1) {
@@ -1140,17 +1133,6 @@ new_dentry->d_parent->d_name.name,new_dentry->d_name.name,new_dentry->d_count);
                shrink_dcache_parent(old_dentry);
        }
 
-       /*
-        * Now check the use counts ... we can't safely do the
-        * rename unless we can drop the dentries first.
-        */
-       if (old_dentry->d_count > 1) {
-#ifdef NFS_PARANOIA
-printk("nfs_rename: old dentry %s/%s busy, d_count=%d\n",
-old_dentry->d_parent->d_name.name,old_dentry->d_name.name,old_dentry->d_count);
-#endif
-               goto out;
-       }
        if (new_dentry->d_count > 1 && new_inode) {
 #ifdef NFS_PARANOIA
 printk("nfs_rename: new dentry %s/%s busy, d_count=%d\n",
@@ -1159,41 +1141,28 @@ new_dentry->d_parent->d_name.name,new_dentry->d_name.name,new_dentry->d_count);
                goto out;
        }
 
-       d_drop(old_dentry);
-       update = 0;
-
-do_rename:
        /*
         * To prevent any new references to the target during the rename,
         * we unhash the dentry and free the inode in advance.
         */
-#ifdef NFS_PARANOIA
-if (new_inode && 
-    new_inode->i_count > (S_ISDIR(new_inode->i_mode) ? 1 : new_inode->i_nlink))
-printk("nfs_rename: %s/%s inode busy?? i_count=%d, i_nlink=%d\n",
-new_dentry->d_parent->d_name.name, new_dentry->d_name.name,
-new_inode->i_count, new_inode->i_nlink);
-#endif
        if (!list_empty(&new_dentry->d_hash)) {
                d_drop(new_dentry);
-               rehash = update;
+               rehash = 1;
        }
-       if (new_inode) {
+       if (new_inode)
                d_delete(new_dentry);
-       }
 
        nfs_invalidate_dircache(new_dir);
        nfs_invalidate_dircache(old_dir);
        error = nfs_proc_rename(NFS_DSERVER(old_dentry),
                        NFS_FH(old_dentry->d_parent), old_dentry->d_name.name,
                        NFS_FH(new_dentry->d_parent), new_dentry->d_name.name);
-       if (!error && !S_ISDIR(old_inode->i_mode)) {
-               /* Update the dcache if needed */
-               if (rehash)
-                       d_add(new_dentry, NULL);
-               if (update)
-                       d_move(old_dentry, new_dentry);
-       }
+
+       /* Update the dcache if needed */
+       if (rehash)
+               d_add(new_dentry, NULL);
+       if (!error && !S_ISDIR(old_inode->i_mode))
+               d_move(old_dentry, new_dentry);
 
 out:
        /* new dentry created? */
index ba5737144e172f6e741d8dc7b0120d17429f37d5..bbd41f2c94fdd2a3ae32d727046e4c1bd1c8eb68 100644 (file)
@@ -247,7 +247,7 @@ int do_adjtimex(struct timex *txc)
                if (txc->tick < 900000/HZ || txc->tick > 1100000/HZ)
                        return -EINVAL;
 
-       write_lock(&xtime_lock);
+       write_lock_irq(&xtime_lock);
        result = time_state;    /* mostly `TIME_OK' */
 
        /* Save for later - semantics of adjtime is to return old value */
index c2c7836598a08f16c41f34677d6db1e5c8035d2a..b158ccf8e97d8b126a0a5b656adb2bcee9cb26f0 100644 (file)
@@ -525,7 +525,8 @@ gotit:
 
 static inline __u32 tcp_v4_init_sequence(struct sock *sk, struct sk_buff *skb)
 {
-       return secure_tcp_sequence_number(sk->saddr, sk->daddr,
+       return secure_tcp_sequence_number(skb->nh.iph->daddr,
+                                         skb->nh.iph->saddr,
                                          skb->h.th->dest,
                                          skb->h.th->source);
 }