/* slarp reply, send own ip/netmask; if values are nonsense remote
         * should think we are unable to provide it with an address via SLARP */
 -      p += put_u32(p, CISCO_SLARP_REPLY);
 -      *(__be32 *)p = addr;    // address
 -      p += 4;
 -      *(__be32 *)p = mask;    // netmask
 -      p += 4;
 -      p += put_u16(p, 0);     // unused
 +      *(__be32 *)(p +  4) = cpu_to_be32(CISCO_SLARP_REPLY);
-       *(__be32 *)(p +  8) = cpu_to_be32(addr); // address
-       *(__be32 *)(p + 12) = cpu_to_be32(mask); // netmask
++      *(__be32 *)(p +  8) = addr; // address
++      *(__be32 *)(p + 12) = mask; // netmask
 +      *(__be16 *)(p + 16) = cpu_to_be16(0); // unused
 +      p += 18;
  
        isdn_net_write_super(lp, skb);
  }
 
        } else if (!rc) {
                cFYI(1, ("Existing smb sess not found"));
                pSesInfo = sesInfoAlloc();
-               if (pSesInfo == NULL)
+               if (pSesInfo == NULL) {
                        rc = -ENOMEM;
-               else {
-                       pSesInfo->server = srvTcp;
-                       sprintf(pSesInfo->serverName, "%pI4",
-                               &sin_server.sin_addr.s_addr);
-               }
+                       goto mount_fail_check;
+               }
+ 
+               /* new SMB session uses our srvTcp ref */
+               pSesInfo->server = srvTcp;
 -              sprintf(pSesInfo->serverName, "%u.%u.%u.%u",
 -                      NIPQUAD(sin_server->sin_addr.s_addr));
++              sprintf(pSesInfo->serverName, "%pI4",
++                      &sin_server->sin_addr.s_addr);
+ 
+               write_lock(&cifs_tcp_ses_lock);
+               list_add(&pSesInfo->smb_ses_list, &srvTcp->smb_ses_list);
+               write_unlock(&cifs_tcp_ses_lock);
+ 
+               /* volume_info.password freed at unmount */
+               if (volume_info.password) {
+                       pSesInfo->password = volume_info.password;
+                       /* set to NULL to prevent freeing on exit */
+                       volume_info.password = NULL;
+               }
+               if (volume_info.username)
+                       strncpy(pSesInfo->userName, volume_info.username,
+                               MAX_USERNAME_SIZE);
+               if (volume_info.domainname) {
+                       int len = strlen(volume_info.domainname);
+                       pSesInfo->domainName = kmalloc(len + 1, GFP_KERNEL);
+                       if (pSesInfo->domainName)
+                               strcpy(pSesInfo->domainName,
+                                       volume_info.domainname);
+               }
+               pSesInfo->linux_uid = volume_info.linux_uid;
+               pSesInfo->overrideSecFlg = volume_info.secFlg;
+               down(&pSesInfo->sesSem);
  
-               if (!rc) {
-                       /* volume_info.password freed at unmount */
-                       if (volume_info.password) {
-                               pSesInfo->password = volume_info.password;
-                               /* set to NULL to prevent freeing on exit */
-                               volume_info.password = NULL;
-                       }
-                       if (volume_info.username)
-                               strncpy(pSesInfo->userName,
-                                       volume_info.username,
-                                       MAX_USERNAME_SIZE);
-                       if (volume_info.domainname) {
-                               int len = strlen(volume_info.domainname);
-                               pSesInfo->domainName =
-                                       kmalloc(len + 1, GFP_KERNEL);
-                               if (pSesInfo->domainName)
-                                       strcpy(pSesInfo->domainName,
-                                               volume_info.domainname);
-                       }
-                       pSesInfo->linux_uid = volume_info.linux_uid;
-                       pSesInfo->overrideSecFlg = volume_info.secFlg;
-                       down(&pSesInfo->sesSem);
-                       /* BB FIXME need to pass vol->secFlgs BB */
-                       rc = cifs_setup_session(xid, pSesInfo,
-                                               cifs_sb->local_nls);
-                       up(&pSesInfo->sesSem);
-                       if (!rc)
-                               atomic_inc(&srvTcp->socketUseCount);
-               }
+               /* BB FIXME need to pass vol->secFlgs BB */
+               rc = cifs_setup_session(xid, pSesInfo,
+                                       cifs_sb->local_nls);
+               up(&pSesInfo->sesSem);
        }
  
        /* search for existing tcon to this server share */