Merge branch 'stable/bug-fixes-rc1' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / fs / cifs / cifsfs.c
index 8e21e0f..99d777a 100644 (file)
@@ -77,7 +77,11 @@ unsigned int cifs_max_pending = CIFS_MAX_REQ;
 module_param(cifs_max_pending, int, 0);
 MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server. "
                                   "Default: 50 Range: 2 to 256");
-
+unsigned short echo_retries = 5;
+module_param(echo_retries, ushort, 0644);
+MODULE_PARM_DESC(echo_retries, "Number of echo attempts before giving up and "
+                              "reconnecting server. Default: 5. 0 means "
+                              "never reconnect.");
 extern mempool_t *cifs_sm_req_poolp;
 extern mempool_t *cifs_req_poolp;
 extern mempool_t *cifs_mid_poolp;
@@ -174,6 +178,12 @@ cifs_read_super(struct super_block *sb, void *data,
                goto out_no_root;
        }
 
+       /* do that *after* d_alloc_root() - we want NULL ->d_op for root here */
+       if (cifs_sb_master_tcon(cifs_sb)->nocase)
+               sb->s_d_op = &cifs_ci_dentry_ops;
+       else
+               sb->s_d_op = &cifs_dentry_ops;
+
 #ifdef CONFIG_CIFS_EXPERIMENTAL
        if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
                cFYI(1, "export ops supported");
@@ -329,6 +339,8 @@ cifs_alloc_inode(struct super_block *sb)
        cifs_inode->invalid_mapping = false;
        cifs_inode->vfs_inode.i_blkbits = 14;  /* 2**14 = CIFS_MAX_MSGSIZE */
        cifs_inode->server_eof = 0;
+       cifs_inode->uniqueid = 0;
+       cifs_inode->createtime = 0;
 
        /* Can not set i_flags here - they get immediately overwritten
           to zero by the VFS */
@@ -361,18 +373,19 @@ cifs_evict_inode(struct inode *inode)
 static void
 cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
 {
+       struct sockaddr_in *sa = (struct sockaddr_in *) &server->dstaddr;
+       struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &server->dstaddr;
+
        seq_printf(s, ",addr=");
 
-       switch (server->addr.sockAddr.sin_family) {
+       switch (server->dstaddr.ss_family) {
        case AF_INET:
-               seq_printf(s, "%pI4", &server->addr.sockAddr.sin_addr.s_addr);
+               seq_printf(s, "%pI4", &sa->sin_addr.s_addr);
                break;
        case AF_INET6:
-               seq_printf(s, "%pI6",
-                          &server->addr.sockAddr6.sin6_addr.s6_addr);
-               if (server->addr.sockAddr6.sin6_scope_id)
-                       seq_printf(s, "%%%u",
-                                  server->addr.sockAddr6.sin6_scope_id);
+               seq_printf(s, "%pI6", &sa6->sin6_addr.s6_addr);
+               if (sa6->sin6_scope_id)
+                       seq_printf(s, "%%%u", sa6->sin6_scope_id);
                break;
        default:
                seq_printf(s, "(unknown)");