Revert "ext4: use old interface for ext4_readdir()"
[linux-3.10.git] / fs / cifs / cifssmb.c
index f27b13e..d17c5d7 100644 (file)
@@ -139,8 +139,8 @@ cifs_reconnect_tcon(struct cifs_tcon *tcon, int smb_command)
                if (smb_command != SMB_COM_WRITE_ANDX &&
                    smb_command != SMB_COM_OPEN_ANDX &&
                    smb_command != SMB_COM_TREE_DISCONNECT) {
-                       cFYI(1, "can not send cmd %d while umounting",
-                               smb_command);
+                       cifs_dbg(FYI, "can not send cmd %d while umounting\n",
+                                smb_command);
                        return -ENODEV;
                }
        }
@@ -163,7 +163,7 @@ cifs_reconnect_tcon(struct cifs_tcon *tcon, int smb_command)
                 * back on-line
                 */
                if (!tcon->retry) {
-                       cFYI(1, "gave up waiting on reconnect in smb_init");
+                       cifs_dbg(FYI, "gave up waiting on reconnect in smb_init\n");
                        return -EHOSTDOWN;
                }
        }
@@ -191,7 +191,7 @@ cifs_reconnect_tcon(struct cifs_tcon *tcon, int smb_command)
        cifs_mark_open_files_invalid(tcon);
        rc = CIFSTCon(0, ses, tcon->treeName, tcon, nls_codepage);
        mutex_unlock(&ses->session_mutex);
-       cFYI(1, "reconnect tcon rc = %d", rc);
+       cifs_dbg(FYI, "reconnect tcon rc = %d\n", rc);
 
        if (rc)
                goto out;
@@ -396,7 +396,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
        else /* if override flags set only sign/seal OR them with global auth */
                secFlags = global_secflags | ses->overrideSecFlg;
 
-       cFYI(1, "secFlags 0x%x", secFlags);
+       cifs_dbg(FYI, "secFlags 0x%x\n", secFlags);
 
        pSMB->hdr.Mid = get_next_mid(server);
        pSMB->hdr.Flags2 |= (SMBFLG2_UNICODE | SMBFLG2_ERR_STATUS);
@@ -404,12 +404,12 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
        if ((secFlags & CIFSSEC_MUST_KRB5) == CIFSSEC_MUST_KRB5)
                pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
        else if ((secFlags & CIFSSEC_AUTH_MASK) == CIFSSEC_MAY_KRB5) {
-               cFYI(1, "Kerberos only mechanism, enable extended security");
+               cifs_dbg(FYI, "Kerberos only mechanism, enable extended security\n");
                pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
        } else if ((secFlags & CIFSSEC_MUST_NTLMSSP) == CIFSSEC_MUST_NTLMSSP)
                pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
        else if ((secFlags & CIFSSEC_AUTH_MASK) == CIFSSEC_MAY_NTLMSSP) {
-               cFYI(1, "NTLMSSP only mechanism, enable extended security");
+               cifs_dbg(FYI, "NTLMSSP only mechanism, enable extended security\n");
                pSMB->hdr.Flags2 |= SMBFLG2_EXT_SEC;
        }
 
@@ -428,7 +428,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                goto neg_err_exit;
 
        server->dialect = le16_to_cpu(pSMBr->DialectIndex);
-       cFYI(1, "Dialect: %d", server->dialect);
+       cifs_dbg(FYI, "Dialect: %d\n", server->dialect);
        /* Check wct = 1 error case */
        if ((pSMBr->hdr.WordCount < 13) || (server->dialect == BAD_PROT)) {
                /* core returns wct = 1, but we do not ask for core - otherwise
@@ -447,8 +447,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                        (secFlags & CIFSSEC_MAY_PLNTXT))
                        server->secType = LANMAN;
                else {
-                       cERROR(1, "mount failed weak security disabled"
-                                  " in /proc/fs/cifs/SecurityFlags");
+                       cifs_dbg(VFS, "mount failed weak security disabled in /proc/fs/cifs/SecurityFlags\n");
                        rc = -EOPNOTSUPP;
                        goto neg_err_exit;
                }
@@ -482,9 +481,9 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                        utc = CURRENT_TIME;
                        ts = cnvrtDosUnixTm(rsp->SrvTime.Date,
                                            rsp->SrvTime.Time, 0);
-                       cFYI(1, "SrvTime %d sec since 1970 (utc: %d) diff: %d",
-                               (int)ts.tv_sec, (int)utc.tv_sec,
-                               (int)(utc.tv_sec - ts.tv_sec));
+                       cifs_dbg(FYI, "SrvTime %d sec since 1970 (utc: %d) diff: %d\n",
+                                (int)ts.tv_sec, (int)utc.tv_sec,
+                                (int)(utc.tv_sec - ts.tv_sec));
                        val = (int)(utc.tv_sec - ts.tv_sec);
                        seconds = abs(val);
                        result = (seconds / MIN_TZ_ADJ) * MIN_TZ_ADJ;
@@ -498,7 +497,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                        server->timeAdj = (int)tmp;
                        server->timeAdj *= 60; /* also in seconds */
                }
-               cFYI(1, "server->timeAdj: %d seconds", server->timeAdj);
+               cifs_dbg(FYI, "server->timeAdj: %d seconds\n", server->timeAdj);
 
 
                /* BB get server time for time conversions and add
@@ -513,14 +512,13 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                        goto neg_err_exit;
                }
 
-               cFYI(1, "LANMAN negotiated");
+               cifs_dbg(FYI, "LANMAN negotiated\n");
                /* we will not end up setting signing flags - as no signing
                was in LANMAN and server did not return the flags on */
                goto signing_check;
 #else /* weak security disabled */
        } else if (pSMBr->hdr.WordCount == 13) {
-               cERROR(1, "mount failed, cifs module not built "
-                         "with CIFS_WEAK_PW_HASH support");
+               cifs_dbg(VFS, "mount failed, cifs module not built with CIFS_WEAK_PW_HASH support\n");
                rc = -EOPNOTSUPP;
 #endif /* WEAK_PW_HASH */
                goto neg_err_exit;
@@ -532,14 +530,13 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
        /* else wct == 17 NTLM */
        server->sec_mode = pSMBr->SecurityMode;
        if ((server->sec_mode & SECMODE_USER) == 0)
-               cFYI(1, "share mode security");
+               cifs_dbg(FYI, "share mode security\n");
 
        if ((server->sec_mode & SECMODE_PW_ENCRYPT) == 0)
 #ifdef CONFIG_CIFS_WEAK_PW_HASH
                if ((secFlags & CIFSSEC_MAY_PLNTXT) == 0)
 #endif /* CIFS_WEAK_PW_HASH */
-                       cERROR(1, "Server requests plain text password"
-                                 " but client support disabled");
+                       cifs_dbg(VFS, "Server requests plain text password but client support disabled\n");
 
        if ((secFlags & CIFSSEC_MUST_NTLMV2) == CIFSSEC_MUST_NTLMV2)
                server->secType = NTLMv2;
@@ -555,7 +552,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                server->secType = LANMAN;
        else {
                rc = -EOPNOTSUPP;
-               cERROR(1, "Invalid security type");
+               cifs_dbg(VFS, "Invalid security type\n");
                goto neg_err_exit;
        }
        /* else ... any others ...? */
@@ -568,7 +565,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
        /* probably no need to store and check maxvcs */
        server->maxBuf = le32_to_cpu(pSMBr->MaxBufferSize);
        server->max_rw = le32_to_cpu(pSMBr->MaxRawSize);
-       cFYI(DBG2, "Max buf = %d", ses->server->maxBuf);
+       cifs_dbg(NOISY, "Max buf = %d\n", ses->server->maxBuf);
        server->capabilities = le32_to_cpu(pSMBr->Capabilities);
        server->timeAdj = (int)(__s16)le16_to_cpu(pSMBr->ServerTimeZone);
        server->timeAdj *= 60;
@@ -590,7 +587,7 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses)
                        if (memcmp(server->server_GUID,
                                   pSMBr->u.extended_response.
                                   GUID, 16) != 0) {
-                               cFYI(1, "server UID changed");
+                               cifs_dbg(FYI, "server UID changed\n");
                                memcpy(server->server_GUID,
                                        pSMBr->u.extended_response.GUID,
                                        16);
@@ -633,21 +630,19 @@ signing_check:
        if ((secFlags & CIFSSEC_MAY_SIGN) == 0) {
                /* MUST_SIGN already includes the MAY_SIGN FLAG
                   so if this is zero it means that signing is disabled */
-               cFYI(1, "Signing disabled");
+               cifs_dbg(FYI, "Signing disabled\n");
                if (server->sec_mode & SECMODE_SIGN_REQUIRED) {
-                       cERROR(1, "Server requires "
-                                  "packet signing to be enabled in "
-                                  "/proc/fs/cifs/SecurityFlags.");
+                       cifs_dbg(VFS, "Server requires packet signing to be enabled in /proc/fs/cifs/SecurityFlags\n");
                        rc = -EOPNOTSUPP;
                }
                server->sec_mode &=
                        ~(SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED);
        } else if ((secFlags & CIFSSEC_MUST_SIGN) == CIFSSEC_MUST_SIGN) {
                /* signing required */
-               cFYI(1, "Must sign - secFlags 0x%x", secFlags);
+               cifs_dbg(FYI, "Must sign - secFlags 0x%x\n", secFlags);
                if ((server->sec_mode &
                        (SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED)) == 0) {
-                       cERROR(1, "signing required but server lacks support");
+                       cifs_dbg(VFS, "signing required but server lacks support\n");
                        rc = -EOPNOTSUPP;
                } else
                        server->sec_mode |= SECMODE_SIGN_REQUIRED;
@@ -661,7 +656,7 @@ signing_check:
 neg_err_exit:
        cifs_buf_release(pSMB);
 
-       cFYI(1, "negprot rc %d", rc);
+       cifs_dbg(FYI, "negprot rc %d\n", rc);
        return rc;
 }
 
@@ -671,7 +666,7 @@ CIFSSMBTDis(const unsigned int xid, struct cifs_tcon *tcon)
        struct smb_hdr *smb_buffer;
        int rc = 0;
 
-       cFYI(1, "In tree disconnect");
+       cifs_dbg(FYI, "In tree disconnect\n");
 
        /* BB: do we need to check this? These should never be NULL. */
        if ((tcon->ses == NULL) || (tcon->ses->server == NULL))
@@ -693,7 +688,7 @@ CIFSSMBTDis(const unsigned int xid, struct cifs_tcon *tcon)
 
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *)smb_buffer, 0);
        if (rc)
-               cFYI(1, "Tree disconnect failed %d", rc);
+               cifs_dbg(FYI, "Tree disconnect failed %d\n", rc);
 
        /* No need to return error on this operation if tid invalidated and
           closed on server already e.g. due to tcp session crashing */
@@ -725,8 +720,10 @@ CIFSSMBEcho(struct TCP_Server_Info *server)
        ECHO_REQ *smb;
        int rc = 0;
        struct kvec iov;
+       struct smb_rqst rqst = { .rq_iov = &iov,
+                                .rq_nvec = 1 };
 
-       cFYI(1, "In echo request");
+       cifs_dbg(FYI, "In echo request\n");
 
        rc = small_smb_init(SMB_COM_ECHO, 0, NULL, (void **)&smb);
        if (rc)
@@ -742,10 +739,10 @@ CIFSSMBEcho(struct TCP_Server_Info *server)
        iov.iov_base = smb;
        iov.iov_len = be32_to_cpu(smb->hdr.smb_buf_length) + 4;
 
-       rc = cifs_call_async(server, &iov, 1, NULL, cifs_echo_callback,
+       rc = cifs_call_async(server, &rqst, NULL, cifs_echo_callback,
                             server, CIFS_ASYNC_OP | CIFS_ECHO_OP);
        if (rc)
-               cFYI(1, "Echo request failed: %d", rc);
+               cifs_dbg(FYI, "Echo request failed: %d\n", rc);
 
        cifs_small_buf_release(smb);
 
@@ -758,7 +755,7 @@ CIFSSMBLogoff(const unsigned int xid, struct cifs_ses *ses)
        LOGOFF_ANDX_REQ *pSMB;
        int rc = 0;
 
-       cFYI(1, "In SMBLogoff for session disconnect");
+       cifs_dbg(FYI, "In SMBLogoff for session disconnect\n");
 
        /*
         * BB: do we need to check validity of ses and server? They should
@@ -812,7 +809,7 @@ CIFSPOSIXDelFile(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, param_offset, offset, byte_count;
 
-       cFYI(1, "In POSIX delete");
+       cifs_dbg(FYI, "In POSIX delete\n");
 PsxDelete:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -864,7 +861,7 @@ PsxDelete:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "Posix delete returned %d", rc);
+               cifs_dbg(FYI, "Posix delete returned %d\n", rc);
        cifs_buf_release(pSMB);
 
        cifs_stats_inc(&tcon->stats.cifs_stats.num_deletes);
@@ -912,7 +909,7 @@ DelFileRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_deletes);
        if (rc)
-               cFYI(1, "Error in RMFile = %d", rc);
+               cifs_dbg(FYI, "Error in RMFile = %d\n", rc);
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -932,7 +929,7 @@ CIFSSMBRmDir(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
        int name_len;
        int remap = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR;
 
-       cFYI(1, "In CIFSSMBRmDir");
+       cifs_dbg(FYI, "In CIFSSMBRmDir\n");
 RmDirRetry:
        rc = smb_init(SMB_COM_DELETE_DIRECTORY, 0, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -958,7 +955,7 @@ RmDirRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_rmdirs);
        if (rc)
-               cFYI(1, "Error in RMDir = %d", rc);
+               cifs_dbg(FYI, "Error in RMDir = %d\n", rc);
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -977,7 +974,7 @@ CIFSSMBMkDir(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
        int name_len;
        int remap = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR;
 
-       cFYI(1, "In CIFSSMBMkDir");
+       cifs_dbg(FYI, "In CIFSSMBMkDir\n");
 MkDirRetry:
        rc = smb_init(SMB_COM_CREATE_DIRECTORY, 0, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -1003,7 +1000,7 @@ MkDirRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_mkdirs);
        if (rc)
-               cFYI(1, "Error in Mkdir = %d", rc);
+               cifs_dbg(FYI, "Error in Mkdir = %d\n", rc);
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -1027,7 +1024,7 @@ CIFSPOSIXCreate(const unsigned int xid, struct cifs_tcon *tcon,
        OPEN_PSX_REQ *pdata;
        OPEN_PSX_RSP *psx_rsp;
 
-       cFYI(1, "In POSIX Create");
+       cifs_dbg(FYI, "In POSIX Create\n");
 PsxCreat:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -1081,11 +1078,11 @@ PsxCreat:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Posix create returned %d", rc);
+               cifs_dbg(FYI, "Posix create returned %d\n", rc);
                goto psx_create_err;
        }
 
-       cFYI(1, "copying inode info");
+       cifs_dbg(FYI, "copying inode info\n");
        rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
        if (rc || get_bcc(&pSMBr->hdr) < sizeof(OPEN_PSX_RSP)) {
@@ -1107,11 +1104,11 @@ PsxCreat:
        /* check to make sure response data is there */
        if (psx_rsp->ReturnedLevel != cpu_to_le16(SMB_QUERY_FILE_UNIX_BASIC)) {
                pRetData->Type = cpu_to_le32(-1); /* unknown */
-               cFYI(DBG2, "unknown type");
+               cifs_dbg(NOISY, "unknown type\n");
        } else {
                if (get_bcc(&pSMBr->hdr) < sizeof(OPEN_PSX_RSP)
                                        + sizeof(FILE_UNIX_BASIC_INFO)) {
-                       cERROR(1, "Open response data too small");
+                       cifs_dbg(VFS, "Open response data too small\n");
                        pRetData->Type = cpu_to_le32(-1);
                        goto psx_create_err;
                }
@@ -1158,7 +1155,7 @@ static __u16 convert_disposition(int disposition)
                        ofun = SMBOPEN_OCREATE | SMBOPEN_OTRUNC;
                        break;
                default:
-                       cFYI(1, "unknown disposition %d", disposition);
+                       cifs_dbg(FYI, "unknown disposition %d\n", disposition);
                        ofun =  SMBOPEN_OAPPEND; /* regular open */
        }
        return ofun;
@@ -1249,7 +1246,7 @@ OldOpenRetry:
                        (struct smb_hdr *)pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_opens);
        if (rc) {
-               cFYI(1, "Error in Open = %d", rc);
+               cifs_dbg(FYI, "Error in Open = %d\n", rc);
        } else {
        /* BB verify if wct == 15 */
 
@@ -1362,7 +1359,7 @@ openRetry:
                        (struct smb_hdr *)pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_opens);
        if (rc) {
-               cFYI(1, "Error in Open = %d", rc);
+               cifs_dbg(FYI, "Error in Open = %d\n", rc);
        } else {
                *pOplock = pSMBr->OplockLevel; /* 1 byte no need to le_to_cpu */
                *netfid = pSMBr->Fid;   /* cifs fid stays in le */
@@ -1423,8 +1420,8 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
        char *buf = server->smallbuf;
        unsigned int buflen = get_rfc1002_length(buf) + 4;
 
-       cFYI(1, "%s: mid=%llu offset=%llu bytes=%u", __func__,
-               mid->mid, rdata->offset, rdata->bytes);
+       cifs_dbg(FYI, "%s: mid=%llu offset=%llu bytes=%u\n",
+                __func__, mid->mid, rdata->offset, rdata->bytes);
 
        /*
         * read the rest of READ_RSP header (sans Data array), or whatever we
@@ -1434,10 +1431,10 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
        len = min_t(unsigned int, buflen, server->vals->read_rsp_size) -
                                                        HEADER_SIZE(server) + 1;
 
-       rdata->iov[0].iov_base = buf + HEADER_SIZE(server) - 1;
-       rdata->iov[0].iov_len = len;
+       rdata->iov.iov_base = buf + HEADER_SIZE(server) - 1;
+       rdata->iov.iov_len = len;
 
-       length = cifs_readv_from_socket(server, rdata->iov, 1, len);
+       length = cifs_readv_from_socket(server, &rdata->iov, 1, len);
        if (length < 0)
                return length;
        server->total_read += length;
@@ -1445,16 +1442,16 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
        /* Was the SMB read successful? */
        rdata->result = server->ops->map_error(buf, false);
        if (rdata->result != 0) {
-               cFYI(1, "%s: server returned error %d", __func__,
-                       rdata->result);
+               cifs_dbg(FYI, "%s: server returned error %d\n",
+                        __func__, rdata->result);
                return cifs_readv_discard(server, mid);
        }
 
        /* Is there enough to get to the rest of the READ_RSP header? */
        if (server->total_read < server->vals->read_rsp_size) {
-               cFYI(1, "%s: server returned short header. got=%u expected=%zu",
-                       __func__, server->total_read,
-                       server->vals->read_rsp_size);
+               cifs_dbg(FYI, "%s: server returned short header. got=%u expected=%zu\n",
+                        __func__, server->total_read,
+                        server->vals->read_rsp_size);
                rdata->result = -EIO;
                return cifs_readv_discard(server, mid);
        }
@@ -1466,36 +1463,36 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
                 * is beyond the EOF. Treat it as if the data starts just after
                 * the header.
                 */
-               cFYI(1, "%s: data offset (%u) inside read response header",
-                       __func__, data_offset);
+               cifs_dbg(FYI, "%s: data offset (%u) inside read response header\n",
+                        __func__, data_offset);
                data_offset = server->total_read;
        } else if (data_offset > MAX_CIFS_SMALL_BUFFER_SIZE) {
                /* data_offset is beyond the end of smallbuf */
-               cFYI(1, "%s: data offset (%u) beyond end of smallbuf",
-                       __func__, data_offset);
+               cifs_dbg(FYI, "%s: data offset (%u) beyond end of smallbuf\n",
+                        __func__, data_offset);
                rdata->result = -EIO;
                return cifs_readv_discard(server, mid);
        }
 
-       cFYI(1, "%s: total_read=%u data_offset=%u", __func__,
-               server->total_read, data_offset);
+       cifs_dbg(FYI, "%s: total_read=%u data_offset=%u\n",
+                __func__, server->total_read, data_offset);
 
        len = data_offset - server->total_read;
        if (len > 0) {
                /* read any junk before data into the rest of smallbuf */
-               rdata->iov[0].iov_base = buf + server->total_read;
-               rdata->iov[0].iov_len = len;
-               length = cifs_readv_from_socket(server, rdata->iov, 1, len);
+               rdata->iov.iov_base = buf + server->total_read;
+               rdata->iov.iov_len = len;
+               length = cifs_readv_from_socket(server, &rdata->iov, 1, len);
                if (length < 0)
                        return length;
                server->total_read += length;
        }
 
        /* set up first iov for signature check */
-       rdata->iov[0].iov_base = buf;
-       rdata->iov[0].iov_len = server->total_read;
-       cFYI(1, "0: iov_base=%p iov_len=%zu",
-               rdata->iov[0].iov_base, rdata->iov[0].iov_len);
+       rdata->iov.iov_base = buf;
+       rdata->iov.iov_len = server->total_read;
+       cifs_dbg(FYI, "0: iov_base=%p iov_len=%zu\n",
+                rdata->iov.iov_base, rdata->iov.iov_len);
 
        /* how much data is in the response? */
        data_len = server->ops->read_data_length(buf);
@@ -1505,27 +1502,15 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
                return cifs_readv_discard(server, mid);
        }
 
-       /* marshal up the page array */
-       cifs_kmap_lock();
-       len = rdata->marshal_iov(rdata, data_len);
-       cifs_kmap_unlock();
-       data_len -= len;
-
-       /* issue the read if we have any iovecs left to fill */
-       if (rdata->nr_iov > 1) {
-               length = cifs_readv_from_socket(server, &rdata->iov[1],
-                                               rdata->nr_iov - 1, len);
-               if (length < 0)
-                       return length;
-               server->total_read += length;
-       } else {
-               length = 0;
-       }
+       length = rdata->read_into_pages(server, rdata, data_len);
+       if (length < 0)
+               return length;
 
+       server->total_read += length;
        rdata->bytes = length;
 
-       cFYI(1, "total_read=%u buflen=%u remaining=%u", server->total_read,
-               buflen, data_len);
+       cifs_dbg(FYI, "total_read=%u buflen=%u remaining=%u\n",
+                server->total_read, buflen, data_len);
 
        /* discard anything left over */
        if (server->total_read < buflen)
@@ -1541,9 +1526,16 @@ cifs_readv_callback(struct mid_q_entry *mid)
        struct cifs_readdata *rdata = mid->callback_data;
        struct cifs_tcon *tcon = tlink_tcon(rdata->cfile->tlink);
        struct TCP_Server_Info *server = tcon->ses->server;
+       struct smb_rqst rqst = { .rq_iov = &rdata->iov,
+                                .rq_nvec = 1,
+                                .rq_pages = rdata->pages,
+                                .rq_npages = rdata->nr_pages,
+                                .rq_pagesz = rdata->pagesz,
+                                .rq_tailsz = rdata->tailsz };
 
-       cFYI(1, "%s: mid=%llu state=%d result=%d bytes=%u", __func__,
-               mid->mid, mid->mid_state, rdata->result, rdata->bytes);
+       cifs_dbg(FYI, "%s: mid=%llu state=%d result=%d bytes=%u\n",
+                __func__, mid->mid, mid->mid_state, rdata->result,
+                rdata->bytes);
 
        switch (mid->mid_state) {
        case MID_RESPONSE_RECEIVED:
@@ -1552,12 +1544,11 @@ cifs_readv_callback(struct mid_q_entry *mid)
                    (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {
                        int rc = 0;
 
-                       rc = cifs_verify_signature(rdata->iov, rdata->nr_iov,
-                                                  server,
-                                                  mid->sequence_number + 1);
+                       rc = cifs_verify_signature(&rqst, server,
+                                                 mid->sequence_number);
                        if (rc)
-                               cERROR(1, "SMB signature verification returned "
-                                      "error = %d", rc);
+                               cifs_dbg(VFS, "SMB signature verification returned error = %d\n",
+                                        rc);
                }
                /* FIXME: should this be counted toward the initiating task? */
                task_io_account_read(rdata->bytes);
@@ -1584,9 +1575,11 @@ cifs_async_readv(struct cifs_readdata *rdata)
        READ_REQ *smb = NULL;
        int wct;
        struct cifs_tcon *tcon = tlink_tcon(rdata->cfile->tlink);
+       struct smb_rqst rqst = { .rq_iov = &rdata->iov,
+                                .rq_nvec = 1 };
 
-       cFYI(1, "%s: offset=%llu bytes=%u", __func__,
-               rdata->offset, rdata->bytes);
+       cifs_dbg(FYI, "%s: offset=%llu bytes=%u\n",
+                __func__, rdata->offset, rdata->bytes);
 
        if (tcon->ses->capabilities & CAP_LARGE_FILES)
                wct = 12;
@@ -1623,13 +1616,12 @@ cifs_async_readv(struct cifs_readdata *rdata)
        }
 
        /* 4 for RFC1001 length + 1 for BCC */
-       rdata->iov[0].iov_base = smb;
-       rdata->iov[0].iov_len = be32_to_cpu(smb->hdr.smb_buf_length) + 4;
+       rdata->iov.iov_base = smb;
+       rdata->iov.iov_len = be32_to_cpu(smb->hdr.smb_buf_length) + 4;
 
        kref_get(&rdata->refcount);
-       rc = cifs_call_async(tcon->ses->server, rdata->iov, 1,
-                            cifs_readv_receive, cifs_readv_callback,
-                            rdata, 0);
+       rc = cifs_call_async(tcon->ses->server, &rqst, cifs_readv_receive,
+                            cifs_readv_callback, rdata, 0);
 
        if (rc == 0)
                cifs_stats_inc(&tcon->stats.cifs_stats.num_reads);
@@ -1657,7 +1649,7 @@ CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
        struct cifs_tcon *tcon = io_parms->tcon;
        unsigned int count = io_parms->length;
 
-       cFYI(1, "Reading %d bytes on fid %d", count, netfid);
+       cifs_dbg(FYI, "Reading %d bytes on fid %d\n", count, netfid);
        if (tcon->ses->capabilities & CAP_LARGE_FILES)
                wct = 12;
        else {
@@ -1705,7 +1697,7 @@ CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
        cifs_stats_inc(&tcon->stats.cifs_stats.num_reads);
        pSMBr = (READ_RSP *)iov[0].iov_base;
        if (rc) {
-               cERROR(1, "Send error in read = %d", rc);
+               cifs_dbg(VFS, "Send error in read = %d\n", rc);
        } else {
                int data_length = le16_to_cpu(pSMBr->DataLengthHigh);
                data_length = data_length << 16;
@@ -1715,7 +1707,7 @@ CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
                /*check that DataLength would not go beyond end of SMB */
                if ((data_length > CIFSMaxBufSize)
                                || (data_length > count)) {
-                       cFYI(1, "bad length %d for count %d",
+                       cifs_dbg(FYI, "bad length %d for count %d\n",
                                 data_length, count);
                        rc = -EIO;
                        *nbytes = 0;
@@ -1723,7 +1715,7 @@ CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
                        pReadData = (char *) (&pSMBr->hdr.Protocol) +
                                        le16_to_cpu(pSMBr->DataOffset);
 /*                     if (rc = copy_to_user(buf, pReadData, data_length)) {
-                               cERROR(1, "Faulting on read rc = %d",rc);
+                               cifs_dbg(VFS, "Faulting on read rc = %d\n",rc);
                                rc = -EFAULT;
                        }*/ /* can not use copy_to_user when using page cache*/
                        if (*buf)
@@ -1771,7 +1763,7 @@ CIFSSMBWrite(const unsigned int xid, struct cifs_io_parms *io_parms,
 
        *nbytes = 0;
 
-       /* cFYI(1, "write at %lld %d bytes", offset, count);*/
+       /* cifs_dbg(FYI, "write at %lld %d bytes\n", offset, count);*/
        if (tcon->ses == NULL)
                return -ECONNABORTED;
 
@@ -1856,7 +1848,7 @@ CIFSSMBWrite(const unsigned int xid, struct cifs_io_parms *io_parms,
                         (struct smb_hdr *) pSMBr, &bytes_returned, long_op);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
        if (rc) {
-               cFYI(1, "Send error in write = %d", rc);
+               cifs_dbg(FYI, "Send error in write = %d\n", rc);
        } else {
                *nbytes = le16_to_cpu(pSMBr->CountHigh);
                *nbytes = (*nbytes) << 16;
@@ -1913,9 +1905,12 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
        } while (rc == -EAGAIN);
 
        for (i = 0; i < wdata->nr_pages; i++) {
-               if (rc != 0)
-                       SetPageError(wdata->pages[i]);
                unlock_page(wdata->pages[i]);
+               if (rc != 0) {
+                       SetPageError(wdata->pages[i]);
+                       end_page_writeback(wdata->pages[i]);
+                       page_cache_release(wdata->pages[i]);
+               }
        }
 
        mapping_set_error(inode->i_mapping, rc);
@@ -1960,7 +1955,7 @@ cifs_writedata_alloc(unsigned int nr_pages, work_func_t complete)
 
        /* this would overflow */
        if (nr_pages == 0) {
-               cERROR(1, "%s: called with nr_pages == 0!", __func__);
+               cifs_dbg(VFS, "%s: called with nr_pages == 0!\n", __func__);
                return NULL;
        }
 
@@ -2029,11 +2024,12 @@ cifs_writev_callback(struct mid_q_entry *mid)
 int
 cifs_async_writev(struct cifs_writedata *wdata)
 {
-       int i, rc = -EACCES;
+       int rc = -EACCES;
        WRITE_REQ *smb = NULL;
        int wct;
        struct cifs_tcon *tcon = tlink_tcon(wdata->cfile->tlink);
-       struct kvec *iov = NULL;
+       struct kvec iov;
+       struct smb_rqst rqst = { };
 
        if (tcon->ses->capabilities & CAP_LARGE_FILES) {
                wct = 14;
@@ -2049,13 +2045,6 @@ cifs_async_writev(struct cifs_writedata *wdata)
        if (rc)
                goto async_writev_out;
 
-       /* 1 iov per page + 1 for header */
-       iov = kzalloc((wdata->nr_pages + 1) * sizeof(*iov), GFP_NOFS);
-       if (iov == NULL) {
-               rc = -ENOMEM;
-               goto async_writev_out;
-       }
-
        smb->hdr.Pid = cpu_to_le16((__u16)wdata->pid);
        smb->hdr.PidHigh = cpu_to_le16((__u16)(wdata->pid >> 16));
 
@@ -2072,20 +2061,18 @@ cifs_async_writev(struct cifs_writedata *wdata)
            cpu_to_le16(offsetof(struct smb_com_write_req, Data) - 4);
 
        /* 4 for RFC1001 length + 1 for BCC */
-       iov[0].iov_len = be32_to_cpu(smb->hdr.smb_buf_length) + 4 + 1;
-       iov[0].iov_base = smb;
+       iov.iov_len = be32_to_cpu(smb->hdr.smb_buf_length) + 4 + 1;
+       iov.iov_base = smb;
 
-       /*
-        * This function should marshal up the page array into the kvec
-        * array, reserving [0] for the header. It should kmap the pages
-        * and set the iov_len properly for each one. It may also set
-        * wdata->bytes too.
-        */
-       cifs_kmap_lock();
-       wdata->marshal_iov(iov, wdata);
-       cifs_kmap_unlock();
+       rqst.rq_iov = &iov;
+       rqst.rq_nvec = 1;
+       rqst.rq_pages = wdata->pages;
+       rqst.rq_npages = wdata->nr_pages;
+       rqst.rq_pagesz = wdata->pagesz;
+       rqst.rq_tailsz = wdata->tailsz;
 
-       cFYI(1, "async write at %llu %u bytes", wdata->offset, wdata->bytes);
+       cifs_dbg(FYI, "async write at %llu %u bytes\n",
+                wdata->offset, wdata->bytes);
 
        smb->DataLengthLow = cpu_to_le16(wdata->bytes & 0xFFFF);
        smb->DataLengthHigh = cpu_to_le16(wdata->bytes >> 16);
@@ -2099,32 +2086,26 @@ cifs_async_writev(struct cifs_writedata *wdata)
                                (struct smb_com_writex_req *)smb;
                inc_rfc1001_len(&smbw->hdr, wdata->bytes + 5);
                put_bcc(wdata->bytes + 5, &smbw->hdr);
-               iov[0].iov_len += 4; /* pad bigger by four bytes */
+               iov.iov_len += 4; /* pad bigger by four bytes */
        }
 
        kref_get(&wdata->refcount);
-       rc = cifs_call_async(tcon->ses->server, iov, wdata->nr_pages + 1,
-                            NULL, cifs_writev_callback, wdata, 0);
+       rc = cifs_call_async(tcon->ses->server, &rqst, NULL,
+                               cifs_writev_callback, wdata, 0);
 
        if (rc == 0)
                cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
        else
                kref_put(&wdata->refcount, cifs_writedata_release);
 
-       /* send is done, unmap pages */
-       for (i = 0; i < wdata->nr_pages; i++)
-               kunmap(wdata->pages[i]);
-
 async_writev_out:
        cifs_small_buf_release(smb);
-       kfree(iov);
        return rc;
 }
 
 int
 CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms,
-             unsigned int *nbytes, struct kvec *iov, int n_vec,
-             const int long_op)
+             unsigned int *nbytes, struct kvec *iov, int n_vec)
 {
        int rc = -EACCES;
        WRITE_REQ *pSMB = NULL;
@@ -2139,7 +2120,7 @@ CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms,
 
        *nbytes = 0;
 
-       cFYI(1, "write2 at %lld %d bytes", (long long)offset, count);
+       cifs_dbg(FYI, "write2 at %lld %d bytes\n", (long long)offset, count);
 
        if (tcon->ses->capabilities & CAP_LARGE_FILES) {
                wct = 14;
@@ -2195,11 +2176,10 @@ CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms,
                iov[0].iov_len = smb_hdr_len + 8;
 
 
-       rc = SendReceive2(xid, tcon->ses, iov, n_vec + 1, &resp_buf_type,
-                         long_op);
+       rc = SendReceive2(xid, tcon->ses, iov, n_vec + 1, &resp_buf_type, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_writes);
        if (rc) {
-               cFYI(1, "Send error Write2 = %d", rc);
+               cifs_dbg(FYI, "Send error Write2 = %d\n", rc);
        } else if (resp_buf_type == 0) {
                /* presumably this can not happen, but best to be safe */
                rc = -EIO;
@@ -2240,7 +2220,8 @@ int cifs_lockv(const unsigned int xid, struct cifs_tcon *tcon,
        int resp_buf_type;
        __u16 count;
 
-       cFYI(1, "cifs_lockv num lock %d num unlock %d", num_lock, num_unlock);
+       cifs_dbg(FYI, "cifs_lockv num lock %d num unlock %d\n",
+                num_lock, num_unlock);
 
        rc = small_smb_init(SMB_COM_LOCKING_ANDX, 8, tcon, (void **) &pSMB);
        if (rc)
@@ -2266,7 +2247,7 @@ int cifs_lockv(const unsigned int xid, struct cifs_tcon *tcon,
        cifs_stats_inc(&tcon->stats.cifs_stats.num_locks);
        rc = SendReceive2(xid, tcon->ses, iov, 2, &resp_buf_type, CIFS_NO_RESP);
        if (rc)
-               cFYI(1, "Send error in cifs_lockv = %d", rc);
+               cifs_dbg(FYI, "Send error in cifs_lockv = %d\n", rc);
 
        return rc;
 }
@@ -2285,7 +2266,8 @@ CIFSSMBLock(const unsigned int xid, struct cifs_tcon *tcon,
        int flags = 0;
        __u16 count;
 
-       cFYI(1, "CIFSSMBLock timeout %d numLock %d", (int)waitFlag, numLock);
+       cifs_dbg(FYI, "CIFSSMBLock timeout %d numLock %d\n",
+                (int)waitFlag, numLock);
        rc = small_smb_init(SMB_COM_LOCKING_ANDX, 8, tcon, (void **) &pSMB);
 
        if (rc)
@@ -2334,7 +2316,7 @@ CIFSSMBLock(const unsigned int xid, struct cifs_tcon *tcon,
        }
        cifs_stats_inc(&tcon->stats.cifs_stats.num_locks);
        if (rc)
-               cFYI(1, "Send error in Lock = %d", rc);
+               cifs_dbg(FYI, "Send error in Lock = %d\n", rc);
 
        /* Note: On -EAGAIN error only caller can retry on handle based calls
        since file handle passed in no longer valid */
@@ -2358,7 +2340,7 @@ CIFSSMBPosixLock(const unsigned int xid, struct cifs_tcon *tcon,
        __u16 params, param_offset, offset, byte_count, count;
        struct kvec iov[1];
 
-       cFYI(1, "Posix Lock");
+       cifs_dbg(FYI, "Posix Lock\n");
 
        rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);
 
@@ -2425,7 +2407,7 @@ CIFSSMBPosixLock(const unsigned int xid, struct cifs_tcon *tcon,
        }
 
        if (rc) {
-               cFYI(1, "Send error in Posix Lock = %d", rc);
+               cifs_dbg(FYI, "Send error in Posix Lock = %d\n", rc);
        } else if (pLockData) {
                /* lock structure can be returned on get */
                __u16 data_offset;
@@ -2482,7 +2464,7 @@ CIFSSMBClose(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id)
 {
        int rc = 0;
        CLOSE_REQ *pSMB = NULL;
-       cFYI(1, "In CIFSSMBClose");
+       cifs_dbg(FYI, "In CIFSSMBClose\n");
 
 /* do not retry on dead session on close */
        rc = small_smb_init(SMB_COM_CLOSE, 3, tcon, (void **) &pSMB);
@@ -2499,7 +2481,7 @@ CIFSSMBClose(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id)
        if (rc) {
                if (rc != -EINTR) {
                        /* EINTR is expected when user ctl-c to kill app */
-                       cERROR(1, "Send error in Close = %d", rc);
+                       cifs_dbg(VFS, "Send error in Close = %d\n", rc);
                }
        }
 
@@ -2515,7 +2497,7 @@ CIFSSMBFlush(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id)
 {
        int rc = 0;
        FLUSH_REQ *pSMB = NULL;
-       cFYI(1, "In CIFSSMBFlush");
+       cifs_dbg(FYI, "In CIFSSMBFlush\n");
 
        rc = small_smb_init(SMB_COM_FLUSH, 1, tcon, (void **) &pSMB);
        if (rc)
@@ -2526,15 +2508,15 @@ CIFSSMBFlush(const unsigned int xid, struct cifs_tcon *tcon, int smb_file_id)
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_flushes);
        if (rc)
-               cERROR(1, "Send error in Flush = %d", rc);
+               cifs_dbg(VFS, "Send error in Flush = %d\n", rc);
 
        return rc;
 }
 
 int
 CIFSSMBRename(const unsigned int xid, struct cifs_tcon *tcon,
-             const char *fromName, const char *toName,
-             const struct nls_table *nls_codepage, int remap)
+             const char *from_name, const char *to_name,
+             struct cifs_sb_info *cifs_sb)
 {
        int rc = 0;
        RENAME_REQ *pSMB = NULL;
@@ -2542,8 +2524,9 @@ CIFSSMBRename(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned;
        int name_len, name_len2;
        __u16 count;
+       int remap = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR;
 
-       cFYI(1, "In CIFSSMBRename");
+       cifs_dbg(FYI, "In CIFSSMBRename\n");
 renameRetry:
        rc = smb_init(SMB_COM_RENAME, 1, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -2556,9 +2539,9 @@ renameRetry:
                        ATTR_DIRECTORY);
 
        if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
-               name_len =
-                   cifsConvertToUTF16((__le16 *) pSMB->OldFileName, fromName,
-                                      PATH_MAX, nls_codepage, remap);
+               name_len = cifsConvertToUTF16((__le16 *) pSMB->OldFileName,
+                                             from_name, PATH_MAX,
+                                             cifs_sb->local_nls, remap);
                name_len++;     /* trailing null */
                name_len *= 2;
                pSMB->OldFileName[name_len] = 0x04;     /* pad */
@@ -2566,17 +2549,18 @@ renameRetry:
                pSMB->OldFileName[name_len + 1] = 0x00;
                name_len2 =
                    cifsConvertToUTF16((__le16 *)&pSMB->OldFileName[name_len+2],
-                                      toName, PATH_MAX, nls_codepage, remap);
+                                      to_name, PATH_MAX, cifs_sb->local_nls,
+                                      remap);
                name_len2 += 1 /* trailing null */  + 1 /* Signature word */ ;
                name_len2 *= 2; /* convert to bytes */
        } else {        /* BB improve the check for buffer overruns BB */
-               name_len = strnlen(fromName, PATH_MAX);
+               name_len = strnlen(from_name, PATH_MAX);
                name_len++;     /* trailing null */
-               strncpy(pSMB->OldFileName, fromName, name_len);
-               name_len2 = strnlen(toName, PATH_MAX);
+               strncpy(pSMB->OldFileName, from_name, name_len);
+               name_len2 = strnlen(to_name, PATH_MAX);
                name_len2++;    /* trailing null */
                pSMB->OldFileName[name_len] = 0x04;  /* 2nd buffer format */
-               strncpy(&pSMB->OldFileName[name_len + 1], toName, name_len2);
+               strncpy(&pSMB->OldFileName[name_len + 1], to_name, name_len2);
                name_len2++;    /* trailing null */
                name_len2++;    /* signature byte */
        }
@@ -2589,7 +2573,7 @@ renameRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_renames);
        if (rc)
-               cFYI(1, "Send error in rename = %d", rc);
+               cifs_dbg(FYI, "Send error in rename = %d\n", rc);
 
        cifs_buf_release(pSMB);
 
@@ -2613,7 +2597,7 @@ int CIFSSMBRenameOpenFile(const unsigned int xid, struct cifs_tcon *pTcon,
        int len_of_str;
        __u16 params, param_offset, offset, count, byte_count;
 
-       cFYI(1, "Rename to File by handle");
+       cifs_dbg(FYI, "Rename to File by handle\n");
        rc = smb_init(SMB_COM_TRANSACTION2, 15, pTcon, (void **) &pSMB,
                        (void **) &pSMBr);
        if (rc)
@@ -2670,7 +2654,8 @@ int CIFSSMBRenameOpenFile(const unsigned int xid, struct cifs_tcon *pTcon,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&pTcon->stats.cifs_stats.num_t2renames);
        if (rc)
-               cFYI(1, "Send error in Rename (by file handle) = %d", rc);
+               cifs_dbg(FYI, "Send error in Rename (by file handle) = %d\n",
+                        rc);
 
        cifs_buf_release(pSMB);
 
@@ -2692,7 +2677,7 @@ CIFSSMBCopy(const unsigned int xid, struct cifs_tcon *tcon,
        int name_len, name_len2;
        __u16 count;
 
-       cFYI(1, "In CIFSSMBCopy");
+       cifs_dbg(FYI, "In CIFSSMBCopy\n");
 copyRetry:
        rc = smb_init(SMB_COM_COPY, 1, tcon, (void **) &pSMB,
                        (void **) &pSMBr);
@@ -2737,8 +2722,8 @@ copyRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in copy = %d with %d files copied",
-                       rc, le16_to_cpu(pSMBr->CopyCount));
+               cifs_dbg(FYI, "Send error in copy = %d with %d files copied\n",
+                        rc, le16_to_cpu(pSMBr->CopyCount));
        }
        cifs_buf_release(pSMB);
 
@@ -2762,7 +2747,7 @@ CIFSUnixCreateSymLink(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, param_offset, offset, byte_count;
 
-       cFYI(1, "In Symlink Unix style");
+       cifs_dbg(FYI, "In Symlink Unix style\n");
 createSymLinkRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -2827,7 +2812,8 @@ createSymLinkRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_symlinks);
        if (rc)
-               cFYI(1, "Send error in SetPathInfo create symlink = %d", rc);
+               cifs_dbg(FYI, "Send error in SetPathInfo create symlink = %d\n",
+                        rc);
 
        cifs_buf_release(pSMB);
 
@@ -2851,7 +2837,7 @@ CIFSUnixCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, param_offset, offset, byte_count;
 
-       cFYI(1, "In Create Hard link Unix style");
+       cifs_dbg(FYI, "In Create Hard link Unix style\n");
 createHardLinkRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -2913,7 +2899,8 @@ createHardLinkRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_hardlinks);
        if (rc)
-               cFYI(1, "Send error in SetPathInfo (hard link) = %d", rc);
+               cifs_dbg(FYI, "Send error in SetPathInfo (hard link) = %d\n",
+                        rc);
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -2924,8 +2911,8 @@ createHardLinkRetry:
 
 int
 CIFSCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
-                  const char *fromName, const char *toName,
-                  const struct nls_table *nls_codepage, int remap)
+                  const char *from_name, const char *to_name,
+                  struct cifs_sb_info *cifs_sb)
 {
        int rc = 0;
        NT_RENAME_REQ *pSMB = NULL;
@@ -2933,8 +2920,9 @@ CIFSCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned;
        int name_len, name_len2;
        __u16 count;
+       int remap = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR;
 
-       cFYI(1, "In CIFSCreateHardLink");
+       cifs_dbg(FYI, "In CIFSCreateHardLink\n");
 winCreateHardLinkRetry:
 
        rc = smb_init(SMB_COM_NT_RENAME, 4, tcon, (void **) &pSMB,
@@ -2952,8 +2940,8 @@ winCreateHardLinkRetry:
 
        if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
                name_len =
-                   cifsConvertToUTF16((__le16 *) pSMB->OldFileName, fromName,
-                                      PATH_MAX, nls_codepage, remap);
+                   cifsConvertToUTF16((__le16 *) pSMB->OldFileName, from_name,
+                                      PATH_MAX, cifs_sb->local_nls, remap);
                name_len++;     /* trailing null */
                name_len *= 2;
 
@@ -2962,17 +2950,18 @@ winCreateHardLinkRetry:
                pSMB->OldFileName[name_len + 1] = 0x00; /* pad */
                name_len2 =
                    cifsConvertToUTF16((__le16 *)&pSMB->OldFileName[name_len+2],
-                                      toName, PATH_MAX, nls_codepage, remap);
+                                      to_name, PATH_MAX, cifs_sb->local_nls,
+                                      remap);
                name_len2 += 1 /* trailing null */  + 1 /* Signature word */ ;
                name_len2 *= 2; /* convert to bytes */
        } else {        /* BB improve the check for buffer overruns BB */
-               name_len = strnlen(fromName, PATH_MAX);
+               name_len = strnlen(from_name, PATH_MAX);
                name_len++;     /* trailing null */
-               strncpy(pSMB->OldFileName, fromName, name_len);
-               name_len2 = strnlen(toName, PATH_MAX);
+               strncpy(pSMB->OldFileName, from_name, name_len);
+               name_len2 = strnlen(to_name, PATH_MAX);
                name_len2++;    /* trailing null */
                pSMB->OldFileName[name_len] = 0x04;     /* 2nd buffer format */
-               strncpy(&pSMB->OldFileName[name_len + 1], toName, name_len2);
+               strncpy(&pSMB->OldFileName[name_len + 1], to_name, name_len2);
                name_len2++;    /* trailing null */
                name_len2++;    /* signature byte */
        }
@@ -2985,7 +2974,7 @@ winCreateHardLinkRetry:
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_hardlinks);
        if (rc)
-               cFYI(1, "Send error in hard link (NT rename) = %d", rc);
+               cifs_dbg(FYI, "Send error in hard link (NT rename) = %d\n", rc);
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -3008,7 +2997,7 @@ CIFSSMBUnixQuerySymLink(const unsigned int xid, struct cifs_tcon *tcon,
        __u16 params, byte_count;
        char *data_start;
 
-       cFYI(1, "In QPathSymLinkInfo (Unix) for path %s", searchName);
+       cifs_dbg(FYI, "In QPathSymLinkInfo (Unix) for path %s\n", searchName);
 
 querySymLinkRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
@@ -3055,7 +3044,7 @@ querySymLinkRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QuerySymLinkInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QuerySymLinkInfo = %d\n", rc);
        } else {
                /* decode response */
 
@@ -3110,7 +3099,8 @@ CIFSSMBQueryReparseLinkInfo(const unsigned int xid, struct cifs_tcon *tcon,
        struct smb_com_transaction_ioctl_req *pSMB;
        struct smb_com_transaction_ioctl_rsp *pSMBr;
 
-       cFYI(1, "In Windows reparse style QueryLink for path %s", searchName);
+       cifs_dbg(FYI, "In Windows reparse style QueryLink for path %s\n",
+                searchName);
        rc = smb_init(SMB_COM_NT_TRANSACT, 23, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
        if (rc)
@@ -3138,7 +3128,7 @@ CIFSSMBQueryReparseLinkInfo(const unsigned int xid, struct cifs_tcon *tcon,
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QueryReparseLinkInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QueryReparseLinkInfo = %d\n", rc);
        } else {                /* decode response */
                __u32 data_offset = le32_to_cpu(pSMBr->DataOffset);
                __u32 data_count = le32_to_cpu(pSMBr->DataCount);
@@ -3162,7 +3152,7 @@ CIFSSMBQueryReparseLinkInfo(const unsigned int xid, struct cifs_tcon *tcon,
                        if ((reparse_buf->LinkNamesBuf +
                                reparse_buf->TargetNameOffset +
                                reparse_buf->TargetNameLen) > end_of_smb) {
-                               cFYI(1, "reparse buf beyond SMB");
+                               cifs_dbg(FYI, "reparse buf beyond SMB\n");
                                rc = -EIO;
                                goto qreparse_out;
                        }
@@ -3183,12 +3173,11 @@ CIFSSMBQueryReparseLinkInfo(const unsigned int xid, struct cifs_tcon *tcon,
                        }
                } else {
                        rc = -EIO;
-                       cFYI(1, "Invalid return data count on "
-                                "get reparse info ioctl");
+                       cifs_dbg(FYI, "Invalid return data count on get reparse info ioctl\n");
                }
                symlinkinfo[buflen] = 0; /* just in case so the caller
                                        does not go off the end of the buffer */
-               cFYI(1, "readlink result - %s", symlinkinfo);
+               cifs_dbg(FYI, "readlink result - %s\n", symlinkinfo);
        }
 
 qreparse_out:
@@ -3211,7 +3200,10 @@ static void cifs_convert_ace(posix_acl_xattr_entry *ace,
        ace->e_perm = cpu_to_le16(cifs_ace->cifs_e_perm);
        ace->e_tag  = cpu_to_le16(cifs_ace->cifs_e_tag);
        ace->e_id   = cpu_to_le32(le64_to_cpu(cifs_ace->cifs_uid));
-       /* cFYI(1, "perm %d tag %d id %d",ace->e_perm,ace->e_tag,ace->e_id); */
+/*
+       cifs_dbg(FYI, "perm %d tag %d id %d\n",
+                ace->e_perm, ace->e_tag, ace->e_id);
+*/
 
        return;
 }
@@ -3237,8 +3229,8 @@ static int cifs_copy_posix_acl(char *trgt, char *src, const int buflen,
                size += sizeof(struct cifs_posix_ace) * count;
                /* check if we would go beyond end of SMB */
                if (size_of_data_area < size) {
-                       cFYI(1, "bad CIFS POSIX ACL size %d vs. %d",
-                               size_of_data_area, size);
+                       cifs_dbg(FYI, "bad CIFS POSIX ACL size %d vs. %d\n",
+                                size_of_data_area, size);
                        return -EINVAL;
                }
        } else if (acl_type & ACL_TYPE_DEFAULT) {
@@ -3285,7 +3277,10 @@ static __u16 convert_ace_to_cifs_ace(struct cifs_posix_ace *cifs_ace,
                cifs_ace->cifs_uid = cpu_to_le64(-1);
        } else
                cifs_ace->cifs_uid = cpu_to_le64(le32_to_cpu(local_ace->e_id));
-       /*cFYI(1, "perm %d tag %d id %d",ace->e_perm,ace->e_tag,ace->e_id);*/
+/*
+       cifs_dbg(FYI, "perm %d tag %d id %d\n",
+                ace->e_perm, ace->e_tag, ace->e_id);
+*/
        return rc;
 }
 
@@ -3303,21 +3298,22 @@ static __u16 ACL_to_cifs_posix(char *parm_data, const char *pACL,
                return 0;
 
        count = posix_acl_xattr_count((size_t)buflen);
-       cFYI(1, "setting acl with %d entries from buf of length %d and "
-               "version of %d",
-               count, buflen, le32_to_cpu(local_acl->a_version));
+       cifs_dbg(FYI, "setting acl with %d entries from buf of length %d and version of %d\n",
+                count, buflen, le32_to_cpu(local_acl->a_version));
        if (le32_to_cpu(local_acl->a_version) != 2) {
-               cFYI(1, "unknown POSIX ACL version %d",
-                    le32_to_cpu(local_acl->a_version));
+               cifs_dbg(FYI, "unknown POSIX ACL version %d\n",
+                        le32_to_cpu(local_acl->a_version));
                return 0;
        }
        cifs_acl->version = cpu_to_le16(1);
-       if (acl_type == ACL_TYPE_ACCESS)
+       if (acl_type == ACL_TYPE_ACCESS) {
                cifs_acl->access_entry_count = cpu_to_le16(count);
-       else if (acl_type == ACL_TYPE_DEFAULT)
+               cifs_acl->default_entry_count = __constant_cpu_to_le16(0xFFFF);
+       } else if (acl_type == ACL_TYPE_DEFAULT) {
                cifs_acl->default_entry_count = cpu_to_le16(count);
-       else {
-               cFYI(1, "unknown ACL type %d", acl_type);
+               cifs_acl->access_entry_count = __constant_cpu_to_le16(0xFFFF);
+       } else {
+               cifs_dbg(FYI, "unknown ACL type %d\n", acl_type);
                return 0;
        }
        for (i = 0; i < count; i++) {
@@ -3350,7 +3346,7 @@ CIFSSMBGetPosixACL(const unsigned int xid, struct cifs_tcon *tcon,
        int name_len;
        __u16 params, byte_count;
 
-       cFYI(1, "In GetPosixACL (Unix) for path %s", searchName);
+       cifs_dbg(FYI, "In GetPosixACL (Unix) for path %s\n", searchName);
 
 queryAclRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
@@ -3403,7 +3399,7 @@ queryAclRetry:
                (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_acl_get);
        if (rc) {
-               cFYI(1, "Send error in Query POSIX ACL = %d", rc);
+               cifs_dbg(FYI, "Send error in Query POSIX ACL = %d\n", rc);
        } else {
                /* decode response */
 
@@ -3440,7 +3436,7 @@ CIFSSMBSetPosixACL(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, byte_count, data_count, param_offset, offset;
 
-       cFYI(1, "In SetPosixACL (Unix) for path %s", fileName);
+       cifs_dbg(FYI, "In SetPosixACL (Unix) for path %s\n", fileName);
 setAclRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -3495,7 +3491,7 @@ setAclRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "Set POSIX ACL returned %d", rc);
+               cifs_dbg(FYI, "Set POSIX ACL returned %d\n", rc);
 
 setACLerrorExit:
        cifs_buf_release(pSMB);
@@ -3515,7 +3511,7 @@ CIFSGetExtAttr(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned;
        __u16 params, byte_count;
 
-       cFYI(1, "In GetExtAttr");
+       cifs_dbg(FYI, "In GetExtAttr\n");
        if (tcon == NULL)
                return -ENODEV;
 
@@ -3554,7 +3550,7 @@ GetExtAttrRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "error %d in GetExtAttr", rc);
+               cifs_dbg(FYI, "error %d in GetExtAttr\n", rc);
        } else {
                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
@@ -3569,7 +3565,7 @@ GetExtAttrRetry:
                        struct file_chattr_info *pfinfo;
                        /* BB Do we need a cast or hash here ? */
                        if (count != 16) {
-                               cFYI(1, "Illegal size ret in GetExtAttr");
+                               cifs_dbg(FYI, "Illegal size ret in GetExtAttr\n");
                                rc = -EIO;
                                goto GetExtAttrOut;
                        }
@@ -3657,21 +3653,21 @@ validate_ntransact(char *buf, char **ppparm, char **ppdata,
 
        /* should we also check that parm and data areas do not overlap? */
        if (*ppparm > end_of_smb) {
-               cFYI(1, "parms start after end of smb");
+               cifs_dbg(FYI, "parms start after end of smb\n");
                return -EINVAL;
        } else if (parm_count + *ppparm > end_of_smb) {
-               cFYI(1, "parm end after end of smb");
+               cifs_dbg(FYI, "parm end after end of smb\n");
                return -EINVAL;
        } else if (*ppdata > end_of_smb) {
-               cFYI(1, "data starts after end of smb");
+               cifs_dbg(FYI, "data starts after end of smb\n");
                return -EINVAL;
        } else if (data_count + *ppdata > end_of_smb) {
-               cFYI(1, "data %p + count %d (%p) past smb end %p start %p",
-                       *ppdata, data_count, (data_count + *ppdata),
-                       end_of_smb, pSMBr);
+               cifs_dbg(FYI, "data %p + count %d (%p) past smb end %p start %p\n",
+                        *ppdata, data_count, (data_count + *ppdata),
+                        end_of_smb, pSMBr);
                return -EINVAL;
        } else if (parm_count + data_count > bcc) {
-               cFYI(1, "parm count and data count larger than SMB");
+               cifs_dbg(FYI, "parm count and data count larger than SMB\n");
                return -EINVAL;
        }
        *pdatalen = data_count;
@@ -3689,7 +3685,7 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid,
        QUERY_SEC_DESC_REQ *pSMB;
        struct kvec iov[1];
 
-       cFYI(1, "GetCifsACL");
+       cifs_dbg(FYI, "GetCifsACL\n");
 
        *pbuflen = 0;
        *acl_inf = NULL;
@@ -3714,7 +3710,7 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid,
                         0);
        cifs_stats_inc(&tcon->stats.cifs_stats.num_acl_get);
        if (rc) {
-               cFYI(1, "Send error in QuerySecDesc = %d", rc);
+               cifs_dbg(FYI, "Send error in QuerySecDesc = %d\n", rc);
        } else {                /* decode response */
                __le32 *parm;
                __u32 parm_len;
@@ -3729,7 +3725,8 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid,
                        goto qsec_out;
                pSMBr = (struct smb_com_ntransact_rsp *)iov[0].iov_base;
 
-               cFYI(1, "smb %p parm %p data %p", pSMBr, parm, *acl_inf);
+               cifs_dbg(FYI, "smb %p parm %p data %p\n",
+                        pSMBr, parm, *acl_inf);
 
                if (le32_to_cpu(pSMBr->ParameterCount) != 4) {
                        rc = -EIO;      /* bad smb */
@@ -3741,8 +3738,8 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid,
 
                acl_len = le32_to_cpu(*parm);
                if (acl_len != *pbuflen) {
-                       cERROR(1, "acl length %d does not match %d",
-                                  acl_len, *pbuflen);
+                       cifs_dbg(VFS, "acl length %d does not match %d\n",
+                                acl_len, *pbuflen);
                        if (*pbuflen > acl_len)
                                *pbuflen = acl_len;
                }
@@ -3751,16 +3748,15 @@ CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon, __u16 fid,
                   header followed by the smallest SID */
                if ((*pbuflen < sizeof(struct cifs_ntsd) + 8) ||
                    (*pbuflen >= 64 * 1024)) {
-                       cERROR(1, "bad acl length %d", *pbuflen);
+                       cifs_dbg(VFS, "bad acl length %d\n", *pbuflen);
                        rc = -EINVAL;
                        *pbuflen = 0;
                } else {
-                       *acl_inf = kmalloc(*pbuflen, GFP_KERNEL);
+                       *acl_inf = kmemdup(pdata, *pbuflen, GFP_KERNEL);
                        if (*acl_inf == NULL) {
                                *pbuflen = 0;
                                rc = -ENOMEM;
                        }
-                       memcpy(*acl_inf, pdata, *pbuflen);
                }
        }
 qsec_out:
@@ -3822,9 +3818,10 @@ setCifsAclRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                (struct smb_hdr *) pSMBr, &bytes_returned, 0);
 
-       cFYI(1, "SetCIFSACL bytes_returned: %d, rc: %d", bytes_returned, rc);
+       cifs_dbg(FYI, "SetCIFSACL bytes_returned: %d, rc: %d\n",
+                bytes_returned, rc);
        if (rc)
-               cFYI(1, "Set CIFS ACL returned %d", rc);
+               cifs_dbg(FYI, "Set CIFS ACL returned %d\n", rc);
        cifs_buf_release(pSMB);
 
        if (rc == -EAGAIN)
@@ -3848,7 +3845,7 @@ SMBQueryInformation(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned;
        int name_len;
 
-       cFYI(1, "In SMBQPath path %s", search_name);
+       cifs_dbg(FYI, "In SMBQPath path %s\n", search_name);
 QInfRetry:
        rc = smb_init(SMB_COM_QUERY_INFORMATION, 0, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -3875,7 +3872,7 @@ QInfRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QueryInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QueryInfo = %d\n", rc);
        } else if (data) {
                struct timespec ts;
                __u32 time = le32_to_cpu(pSMBr->last_write_time);
@@ -3949,7 +3946,7 @@ QFileInfoRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QPathInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QPathInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -3986,7 +3983,7 @@ CIFSSMBQPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int name_len;
        __u16 params, byte_count;
 
-       /* cFYI(1, "In QPathInfo path %s", search_name); */
+       /* cifs_dbg(FYI, "In QPathInfo path %s\n", search_name); */
 QPathInfoRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -4036,7 +4033,7 @@ QPathInfoRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QPathInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QPathInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -4117,14 +4114,12 @@ UnixQFileInfoRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QPathInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QPathInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
                if (rc || get_bcc(&pSMBr->hdr) < sizeof(FILE_UNIX_BASIC_INFO)) {
-                       cERROR(1, "Malformed FILE_UNIX_BASIC_INFO response. "
-                                  "Unix Extensions can be disabled on mount "
-                                  "by specifying the nosfu mount option.");
+                       cifs_dbg(VFS, "Malformed FILE_UNIX_BASIC_INFO response. Unix Extensions can be disabled on mount by specifying the nosfu mount option.\n");
                        rc = -EIO;      /* bad smb */
                } else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
@@ -4156,7 +4151,7 @@ CIFSSMBUnixQPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int name_len;
        __u16 params, byte_count;
 
-       cFYI(1, "In QPathInfo (Unix) the path %s", searchName);
+       cifs_dbg(FYI, "In QPathInfo (Unix) the path %s\n", searchName);
 UnixQPathInfoRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -4203,14 +4198,12 @@ UnixQPathInfoRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QPathInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QPathInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
                if (rc || get_bcc(&pSMBr->hdr) < sizeof(FILE_UNIX_BASIC_INFO)) {
-                       cERROR(1, "Malformed FILE_UNIX_BASIC_INFO response. "
-                                  "Unix Extensions can be disabled on mount "
-                                  "by specifying the nosfu mount option.");
+                       cifs_dbg(VFS, "Malformed FILE_UNIX_BASIC_INFO response. Unix Extensions can be disabled on mount by specifying the nosfu mount option.\n");
                        rc = -EIO;      /* bad smb */
                } else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
@@ -4230,10 +4223,9 @@ UnixQPathInfoRetry:
 /* xid, tcon, searchName and codepage are input parms, rest are returned */
 int
 CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon,
-             const char *searchName,
-             const struct nls_table *nls_codepage,
+             const char *searchName, struct cifs_sb_info *cifs_sb,
              __u16 *pnetfid, __u16 search_flags,
-             struct cifs_search_info *psrch_inf, int remap, const char dirsep)
+             struct cifs_search_info *psrch_inf, bool msearch)
 {
 /* level 257 SMB_ */
        TRANSACTION2_FFIRST_REQ *pSMB = NULL;
@@ -4241,10 +4233,11 @@ CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon,
        T2_FFIRST_RSP_PARMS *parms;
        int rc = 0;
        int bytes_returned = 0;
-       int name_len;
+       int name_len, remap;
        __u16 params, byte_count;
+       struct nls_table *nls_codepage;
 
-       cFYI(1, "In FindFirst for %s", searchName);
+       cifs_dbg(FYI, "In FindFirst for %s\n", searchName);
 
 findFirstRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
@@ -4252,6 +4245,9 @@ findFirstRetry:
        if (rc)
                return rc;
 
+       nls_codepage = cifs_sb->local_nls;
+       remap = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR;
+
        if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
                name_len =
                    cifsConvertToUTF16((__le16 *) pSMB->FileName, searchName,
@@ -4260,24 +4256,29 @@ findFirstRetry:
                it got remapped to 0xF03A as if it were part of the
                directory name instead of a wildcard */
                name_len *= 2;
-               pSMB->FileName[name_len] = dirsep;
-               pSMB->FileName[name_len+1] = 0;
-               pSMB->FileName[name_len+2] = '*';
-               pSMB->FileName[name_len+3] = 0;
-               name_len += 4; /* now the trailing null */
-               pSMB->FileName[name_len] = 0; /* null terminate just in case */
-               pSMB->FileName[name_len+1] = 0;
-               name_len += 2;
+               if (msearch) {
+                       pSMB->FileName[name_len] = CIFS_DIR_SEP(cifs_sb);
+                       pSMB->FileName[name_len+1] = 0;
+                       pSMB->FileName[name_len+2] = '*';
+                       pSMB->FileName[name_len+3] = 0;
+                       name_len += 4; /* now the trailing null */
+                       /* null terminate just in case */
+                       pSMB->FileName[name_len] = 0;
+                       pSMB->FileName[name_len+1] = 0;
+                       name_len += 2;
+               }
        } else {        /* BB add check for overrun of SMB buf BB */
                name_len = strnlen(searchName, PATH_MAX);
 /* BB fix here and in unicode clause above ie
                if (name_len > buffersize-header)
                        free buffer exit; BB */
                strncpy(pSMB->FileName, searchName, name_len);
-               pSMB->FileName[name_len] = dirsep;
-               pSMB->FileName[name_len+1] = '*';
-               pSMB->FileName[name_len+2] = 0;
-               name_len += 3;
+               if (msearch) {
+                       pSMB->FileName[name_len] = CIFS_DIR_SEP(cifs_sb);
+                       pSMB->FileName[name_len+1] = '*';
+                       pSMB->FileName[name_len+2] = 0;
+                       name_len += 3;
+               }
        }
 
        params = 12 + name_len /* includes null */ ;
@@ -4319,7 +4320,7 @@ findFirstRetry:
        if (rc) {/* BB add logic to retry regular search if Unix search
                        rejected unexpectedly by server */
                /* BB Add code to handle unsupported level rc */
-               cFYI(1, "Error in FindFirst = %d", rc);
+               cifs_dbg(FYI, "Error in FindFirst = %d\n", rc);
 
                cifs_buf_release(pSMB);
 
@@ -4357,7 +4358,7 @@ findFirstRetry:
                                psrch_inf->entries_in_buffer;
                        lnoff = le16_to_cpu(parms->LastNameOffset);
                        if (CIFSMaxBufSize < lnoff) {
-                               cERROR(1, "ignoring corrupt resume name");
+                               cifs_dbg(VFS, "ignoring corrupt resume name\n");
                                psrch_inf->last_entry = NULL;
                                return rc;
                        }
@@ -4365,7 +4366,8 @@ findFirstRetry:
                        psrch_inf->last_entry = psrch_inf->srch_entries_start +
                                                        lnoff;
 
-                       *pnetfid = parms->SearchHandle;
+                       if (pnetfid)
+                               *pnetfid = parms->SearchHandle;
                } else {
                        cifs_buf_release(pSMB);
                }
@@ -4387,7 +4389,7 @@ int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon,
        unsigned int name_len;
        __u16 params, byte_count;
 
-       cFYI(1, "In FindNext");
+       cifs_dbg(FYI, "In FindNext\n");
 
        if (psrch_inf->endOfSearch)
                return -ENOENT;
@@ -4448,7 +4450,7 @@ int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon,
                        cifs_buf_release(pSMB);
                        rc = 0; /* search probably was closed at end of search*/
                } else
-                       cFYI(1, "FindNext returned = %d", rc);
+                       cifs_dbg(FYI, "FindNext returned = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -4483,15 +4485,15 @@ int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon,
                                psrch_inf->entries_in_buffer;
                        lnoff = le16_to_cpu(parms->LastNameOffset);
                        if (CIFSMaxBufSize < lnoff) {
-                               cERROR(1, "ignoring corrupt resume name");
+                               cifs_dbg(VFS, "ignoring corrupt resume name\n");
                                psrch_inf->last_entry = NULL;
                                return rc;
                        } else
                                psrch_inf->last_entry =
                                        psrch_inf->srch_entries_start + lnoff;
 
-/*  cFYI(1, "fnxt2 entries in buf %d index_of_last %d",
-           psrch_inf->entries_in_buffer, psrch_inf->index_of_last_entry); */
+/*  cifs_dbg(FYI, "fnxt2 entries in buf %d index_of_last %d\n",
+    psrch_inf->entries_in_buffer, psrch_inf->index_of_last_entry); */
 
                        /* BB fixme add unlock here */
                }
@@ -4516,7 +4518,7 @@ CIFSFindClose(const unsigned int xid, struct cifs_tcon *tcon,
        int rc = 0;
        FINDCLOSE_REQ *pSMB = NULL;
 
-       cFYI(1, "In CIFSSMBFindClose");
+       cifs_dbg(FYI, "In CIFSSMBFindClose\n");
        rc = small_smb_init(SMB_COM_FIND_CLOSE2, 1, tcon, (void **)&pSMB);
 
        /* no sense returning error if session restarted
@@ -4530,7 +4532,7 @@ CIFSFindClose(const unsigned int xid, struct cifs_tcon *tcon,
        pSMB->ByteCount = 0;
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
        if (rc)
-               cERROR(1, "Send error in FindClose = %d", rc);
+               cifs_dbg(VFS, "Send error in FindClose = %d\n", rc);
 
        cifs_stats_inc(&tcon->stats.cifs_stats.num_fclose);
 
@@ -4552,7 +4554,7 @@ CIFSGetSrvInodeNumber(const unsigned int xid, struct cifs_tcon *tcon,
        int name_len, bytes_returned;
        __u16 params, byte_count;
 
-       cFYI(1, "In GetSrvInodeNum for %s", search_name);
+       cifs_dbg(FYI, "In GetSrvInodeNum for %s\n", search_name);
        if (tcon == NULL)
                return -ENODEV;
 
@@ -4603,7 +4605,7 @@ GetInodeNumberRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "error %d in QueryInternalInfo", rc);
+               cifs_dbg(FYI, "error %d in QueryInternalInfo\n", rc);
        } else {
                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
@@ -4618,7 +4620,7 @@ GetInodeNumberRetry:
                        struct file_internal_info *pfinfo;
                        /* BB Do we need a cast or hash here ? */
                        if (count < 8) {
-                               cFYI(1, "Illegal size ret in QryIntrnlInf");
+                               cifs_dbg(FYI, "Illegal size ret in QryIntrnlInf\n");
                                rc = -EIO;
                                goto GetInodeNumOut;
                        }
@@ -4659,16 +4661,16 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
        *num_of_nodes = le16_to_cpu(pSMBr->NumberOfReferrals);
 
        if (*num_of_nodes < 1) {
-               cERROR(1, "num_referrals: must be at least > 0,"
-                       "but we get num_referrals = %d", *num_of_nodes);
+               cifs_dbg(VFS, "num_referrals: must be at least > 0, but we get num_referrals = %d\n",
+                        *num_of_nodes);
                rc = -EINVAL;
                goto parse_DFS_referrals_exit;
        }
 
        ref = (struct dfs_referral_level_3 *) &(pSMBr->referrals);
        if (ref->VersionNumber != cpu_to_le16(3)) {
-               cERROR(1, "Referrals of V%d version are not supported,"
-                       "should be V3", le16_to_cpu(ref->VersionNumber));
+               cifs_dbg(VFS, "Referrals of V%d version are not supported, should be V3\n",
+                        le16_to_cpu(ref->VersionNumber));
                rc = -EINVAL;
                goto parse_DFS_referrals_exit;
        }
@@ -4677,14 +4679,12 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
        data_end = (char *)(&(pSMBr->PathConsumed)) +
                                le16_to_cpu(pSMBr->t2.DataCount);
 
-       cFYI(1, "num_referrals: %d dfs flags: 0x%x ...",
-                       *num_of_nodes,
-                       le32_to_cpu(pSMBr->DFSFlags));
+       cifs_dbg(FYI, "num_referrals: %d dfs flags: 0x%x ...\n",
+                *num_of_nodes, le32_to_cpu(pSMBr->DFSFlags));
 
-       *target_nodes = kzalloc(sizeof(struct dfs_info3_param) *
-                       *num_of_nodes, GFP_KERNEL);
+       *target_nodes = kcalloc(*num_of_nodes, sizeof(struct dfs_info3_param),
+                               GFP_KERNEL);
        if (*target_nodes == NULL) {
-               cERROR(1, "Failed to allocate buffer for target_nodes");
                rc = -ENOMEM;
                goto parse_DFS_referrals_exit;
        }
@@ -4763,7 +4763,7 @@ CIFSGetDFSRefer(const unsigned int xid, struct cifs_ses *ses,
        *num_of_nodes = 0;
        *target_nodes = NULL;
 
-       cFYI(1, "In GetDFSRefer the path %s", search_name);
+       cifs_dbg(FYI, "In GetDFSRefer the path %s\n", search_name);
        if (ses == NULL)
                return -ENODEV;
 getDFSRetry:
@@ -4831,7 +4831,7 @@ getDFSRetry:
        rc = SendReceive(xid, ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in GetDFSRefer = %d", rc);
+               cifs_dbg(FYI, "Send error in GetDFSRefer = %d\n", rc);
                goto GetDFSRefExit;
        }
        rc = validate_t2((struct smb_t2_rsp *)pSMBr);
@@ -4842,9 +4842,8 @@ getDFSRetry:
                goto GetDFSRefExit;
        }
 
-       cFYI(1, "Decoding GetDFSRefer response BCC: %d  Offset %d",
-                               get_bcc(&pSMBr->hdr),
-                               le16_to_cpu(pSMBr->t2.DataOffset));
+       cifs_dbg(FYI, "Decoding GetDFSRefer response BCC: %d  Offset %d\n",
+                get_bcc(&pSMBr->hdr), le16_to_cpu(pSMBr->t2.DataOffset));
 
        /* parse returned result into more usable form */
        rc = parse_DFS_referrals(pSMBr, num_of_nodes,
@@ -4873,7 +4872,7 @@ SMBOldQFSInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, byte_count;
 
-       cFYI(1, "OldQFSInfo");
+       cifs_dbg(FYI, "OldQFSInfo\n");
 oldQFSInfoRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                (void **) &pSMBr);
@@ -4906,7 +4905,7 @@ oldQFSInfoRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QFSInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QFSInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -4914,7 +4913,7 @@ oldQFSInfoRetry:
                        rc = -EIO;      /* bad smb */
                else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
-                       cFYI(1, "qfsinf resp BCC: %d  Offset %d",
+                       cifs_dbg(FYI, "qfsinf resp BCC: %d  Offset %d\n",
                                 get_bcc(&pSMBr->hdr), data_offset);
 
                        response_data = (FILE_SYSTEM_ALLOC_INFO *)
@@ -4927,10 +4926,10 @@ oldQFSInfoRetry:
                               le32_to_cpu(response_data->TotalAllocationUnits);
                        FSData->f_bfree = FSData->f_bavail =
                                le32_to_cpu(response_data->FreeAllocationUnits);
-                       cFYI(1, "Blocks: %lld  Free: %lld Block size %ld",
-                            (unsigned long long)FSData->f_blocks,
-                            (unsigned long long)FSData->f_bfree,
-                            FSData->f_bsize);
+                       cifs_dbg(FYI, "Blocks: %lld  Free: %lld Block size %ld\n",
+                                (unsigned long long)FSData->f_blocks,
+                                (unsigned long long)FSData->f_bfree,
+                                FSData->f_bsize);
                }
        }
        cifs_buf_release(pSMB);
@@ -4953,7 +4952,7 @@ CIFSSMBQFSInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, byte_count;
 
-       cFYI(1, "In QFSInfo");
+       cifs_dbg(FYI, "In QFSInfo\n");
 QFSInfoRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -4986,7 +4985,7 @@ QFSInfoRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QFSInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QFSInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -5007,10 +5006,10 @@ QFSInfoRetry:
                            le64_to_cpu(response_data->TotalAllocationUnits);
                        FSData->f_bfree = FSData->f_bavail =
                            le64_to_cpu(response_data->FreeAllocationUnits);
-                       cFYI(1, "Blocks: %lld  Free: %lld Block size %ld",
-                            (unsigned long long)FSData->f_blocks,
-                            (unsigned long long)FSData->f_bfree,
-                            FSData->f_bsize);
+                       cifs_dbg(FYI, "Blocks: %lld  Free: %lld Block size %ld\n",
+                                (unsigned long long)FSData->f_blocks,
+                                (unsigned long long)FSData->f_bfree,
+                                FSData->f_bsize);
                }
        }
        cifs_buf_release(pSMB);
@@ -5032,7 +5031,7 @@ CIFSSMBQFSAttributeInfo(const unsigned int xid, struct cifs_tcon *tcon)
        int bytes_returned = 0;
        __u16 params, byte_count;
 
-       cFYI(1, "In QFSAttributeInfo");
+       cifs_dbg(FYI, "In QFSAttributeInfo\n");
 QFSAttributeRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -5066,7 +5065,7 @@ QFSAttributeRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cERROR(1, "Send error in QFSAttributeInfo = %d", rc);
+               cifs_dbg(VFS, "Send error in QFSAttributeInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -5102,7 +5101,7 @@ CIFSSMBQFSDeviceInfo(const unsigned int xid, struct cifs_tcon *tcon)
        int bytes_returned = 0;
        __u16 params, byte_count;
 
-       cFYI(1, "In QFSDeviceInfo");
+       cifs_dbg(FYI, "In QFSDeviceInfo\n");
 QFSDeviceRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -5137,7 +5136,7 @@ QFSDeviceRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QFSDeviceInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QFSDeviceInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -5173,7 +5172,7 @@ CIFSSMBQFSUnixInfo(const unsigned int xid, struct cifs_tcon *tcon)
        int bytes_returned = 0;
        __u16 params, byte_count;
 
-       cFYI(1, "In QFSUnixInfo");
+       cifs_dbg(FYI, "In QFSUnixInfo\n");
 QFSUnixRetry:
        rc = smb_init_no_reconnect(SMB_COM_TRANSACTION2, 15, tcon,
                                   (void **) &pSMB, (void **) &pSMBr);
@@ -5207,7 +5206,7 @@ QFSUnixRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cERROR(1, "Send error in QFSUnixInfo = %d", rc);
+               cifs_dbg(VFS, "Send error in QFSUnixInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -5242,7 +5241,7 @@ CIFSSMBSetFSUnixInfo(const unsigned int xid, struct cifs_tcon *tcon, __u64 cap)
        int bytes_returned = 0;
        __u16 params, param_offset, offset, byte_count;
 
-       cFYI(1, "In SETFSUnixInfo");
+       cifs_dbg(FYI, "In SETFSUnixInfo\n");
 SETFSUnixRetry:
        /* BB switch to small buf init to save memory */
        rc = smb_init_no_reconnect(SMB_COM_TRANSACTION2, 15, tcon,
@@ -5290,7 +5289,7 @@ SETFSUnixRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cERROR(1, "Send error in SETFSUnixInfo = %d", rc);
+               cifs_dbg(VFS, "Send error in SETFSUnixInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
                if (rc)
@@ -5318,7 +5317,7 @@ CIFSSMBQFSPosixInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, byte_count;
 
-       cFYI(1, "In QFSPosixInfo");
+       cifs_dbg(FYI, "In QFSPosixInfo\n");
 QFSPosixRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -5352,7 +5351,7 @@ QFSPosixRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QFSUnixInfo = %d", rc);
+               cifs_dbg(FYI, "Send error in QFSUnixInfo = %d\n", rc);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
@@ -5393,16 +5392,16 @@ QFSPosixRetry:
 }
 
 
-/* We can not use write of zero bytes trick to
-   set file size due to need for large file support.  Also note that
-   this SetPathInfo is preferred to SetFileInfo based method in next
-   routine which is only needed to work around a sharing violation bug
-   in Samba which this routine can run into */
-
+/*
+ * We can not use write of zero bytes trick to set file size due to need for
+ * large file support. Also note that this SetPathInfo is preferred to
+ * SetFileInfo based method in next routine which is only needed to work around
+ * a sharing violation bugin Samba which this routine can run into.
+ */
 int
 CIFSSMBSetEOF(const unsigned int xid, struct cifs_tcon *tcon,
-             const char *fileName, __u64 size, bool SetAllocation,
-             const struct nls_table *nls_codepage, int remap)
+             const char *file_name, __u64 size, struct cifs_sb_info *cifs_sb,
+             bool set_allocation)
 {
        struct smb_com_transaction2_spi_req *pSMB = NULL;
        struct smb_com_transaction2_spi_rsp *pSMBr = NULL;
@@ -5410,9 +5409,11 @@ CIFSSMBSetEOF(const unsigned int xid, struct cifs_tcon *tcon,
        int name_len;
        int rc = 0;
        int bytes_returned = 0;
+       int remap = cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR;
+
        __u16 params, byte_count, data_count, param_offset, offset;
 
-       cFYI(1, "In SetEOF");
+       cifs_dbg(FYI, "In SetEOF\n");
 SetEOFRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -5421,14 +5422,14 @@ SetEOFRetry:
 
        if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
                name_len =
-                   cifsConvertToUTF16((__le16 *) pSMB->FileName, fileName,
-                                      PATH_MAX, nls_codepage, remap);
+                   cifsConvertToUTF16((__le16 *) pSMB->FileName, file_name,
+                                      PATH_MAX, cifs_sb->local_nls, remap);
                name_len++;     /* trailing null */
                name_len *= 2;
        } else {        /* BB improve the check for buffer overruns BB */
-               name_len = strnlen(fileName, PATH_MAX);
+               name_len = strnlen(file_name, PATH_MAX);
                name_len++;     /* trailing null */
-               strncpy(pSMB->FileName, fileName, name_len);
+               strncpy(pSMB->FileName, file_name, name_len);
        }
        params = 6 + name_len;
        data_count = sizeof(struct file_end_of_file_info);
@@ -5442,7 +5443,7 @@ SetEOFRetry:
        param_offset = offsetof(struct smb_com_transaction2_spi_req,
                                InformationLevel) - 4;
        offset = param_offset + params;
-       if (SetAllocation) {
+       if (set_allocation) {
                if (tcon->ses->capabilities & CAP_INFOLEVEL_PASSTHRU)
                        pSMB->InformationLevel =
                                cpu_to_le16(SMB_SET_FILE_ALLOCATION_INFO2);
@@ -5478,7 +5479,7 @@ SetEOFRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "SetPathInfo (file size) returned %d", rc);
+               cifs_dbg(FYI, "SetPathInfo (file size) returned %d\n", rc);
 
        cifs_buf_release(pSMB);
 
@@ -5489,23 +5490,23 @@ SetEOFRetry:
 }
 
 int
-CIFSSMBSetFileSize(const unsigned int xid, struct cifs_tcon *tcon, __u64 size,
-                  __u16 fid, __u32 pid_of_opener, bool SetAllocation)
+CIFSSMBSetFileSize(const unsigned int xid, struct cifs_tcon *tcon,
+                  struct cifsFileInfo *cfile, __u64 size, bool set_allocation)
 {
        struct smb_com_transaction2_sfi_req *pSMB  = NULL;
        struct file_end_of_file_info *parm_data;
        int rc = 0;
        __u16 params, param_offset, offset, byte_count, count;
 
-       cFYI(1, "SetFileSize (via SetFileInfo) %lld",
-                       (long long)size);
+       cifs_dbg(FYI, "SetFileSize (via SetFileInfo) %lld\n",
+                (long long)size);
        rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);
 
        if (rc)
                return rc;
 
-       pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener);
-       pSMB->hdr.PidHigh = cpu_to_le16((__u16)(pid_of_opener >> 16));
+       pSMB->hdr.Pid = cpu_to_le16((__u16)cfile->pid);
+       pSMB->hdr.PidHigh = cpu_to_le16((__u16)(cfile->pid >> 16));
 
        params = 6;
        pSMB->MaxSetupCount = 0;
@@ -5534,8 +5535,8 @@ CIFSSMBSetFileSize(const unsigned int xid, struct cifs_tcon *tcon, __u64 size,
                                + offset);
        pSMB->DataOffset = cpu_to_le16(offset);
        parm_data->FileSize = cpu_to_le64(size);
-       pSMB->Fid = fid;
-       if (SetAllocation) {
+       pSMB->Fid = cfile->fid.netfid;
+       if (set_allocation) {
                if (tcon->ses->capabilities & CAP_INFOLEVEL_PASSTHRU)
                        pSMB->InformationLevel =
                                cpu_to_le16(SMB_SET_FILE_ALLOCATION_INFO2);
@@ -5555,7 +5556,8 @@ CIFSSMBSetFileSize(const unsigned int xid, struct cifs_tcon *tcon, __u64 size,
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
        if (rc) {
-               cFYI(1, "Send error in SetFileInfo (SetFileSize) = %d", rc);
+               cifs_dbg(FYI, "Send error in SetFileInfo (SetFileSize) = %d\n",
+                        rc);
        }
 
        /* Note: On -EAGAIN error only caller can retry on handle based calls
@@ -5579,7 +5581,7 @@ CIFSSMBSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int rc = 0;
        __u16 params, param_offset, offset, byte_count, count;
 
-       cFYI(1, "Set Times (via SetFileInfo)");
+       cifs_dbg(FYI, "Set Times (via SetFileInfo)\n");
        rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);
 
        if (rc)
@@ -5625,7 +5627,8 @@ CIFSSMBSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
        memcpy(data_offset, data, sizeof(FILE_BASIC_INFO));
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
        if (rc)
-               cFYI(1, "Send error in Set Time (SetFileInfo) = %d", rc);
+               cifs_dbg(FYI, "Send error in Set Time (SetFileInfo) = %d\n",
+                        rc);
 
        /* Note: On -EAGAIN error only caller can retry on handle based calls
                since file handle passed in no longer valid */
@@ -5642,7 +5645,7 @@ CIFSSMBSetFileDisposition(const unsigned int xid, struct cifs_tcon *tcon,
        int rc = 0;
        __u16 params, param_offset, offset, byte_count, count;
 
-       cFYI(1, "Set File Disposition (via SetFileInfo)");
+       cifs_dbg(FYI, "Set File Disposition (via SetFileInfo)\n");
        rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);
 
        if (rc)
@@ -5684,7 +5687,7 @@ CIFSSMBSetFileDisposition(const unsigned int xid, struct cifs_tcon *tcon,
        *data_offset = delete_file ? 1 : 0;
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
        if (rc)
-               cFYI(1, "Send error in SetFileDisposition = %d", rc);
+               cifs_dbg(FYI, "Send error in SetFileDisposition = %d\n", rc);
 
        return rc;
 }
@@ -5702,7 +5705,7 @@ CIFSSMBSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
        char *data_offset;
        __u16 params, param_offset, offset, byte_count, count;
 
-       cFYI(1, "In SetTimes");
+       cifs_dbg(FYI, "In SetTimes\n");
 
 SetTimesRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
@@ -5758,7 +5761,7 @@ SetTimesRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "SetPathInfo (times) returned %d", rc);
+               cifs_dbg(FYI, "SetPathInfo (times) returned %d\n", rc);
 
        cifs_buf_release(pSMB);
 
@@ -5783,7 +5786,7 @@ CIFSSMBSetAttrLegacy(unsigned int xid, struct cifs_tcon *tcon, char *fileName,
        int bytes_returned;
        int name_len;
 
-       cFYI(1, "In SetAttrLegacy");
+       cifs_dbg(FYI, "In SetAttrLegacy\n");
 
 SetAttrLgcyRetry:
        rc = smb_init(SMB_COM_SETATTR, 8, tcon, (void **) &pSMB,
@@ -5809,7 +5812,7 @@ SetAttrLgcyRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "Error in LegacySetAttr = %d", rc);
+               cifs_dbg(FYI, "Error in LegacySetAttr = %d\n", rc);
 
        cifs_buf_release(pSMB);
 
@@ -5824,8 +5827,14 @@ static void
 cifs_fill_unix_set_info(FILE_UNIX_BASIC_INFO *data_offset,
                        const struct cifs_unix_set_info_args *args)
 {
+       u64 uid = NO_CHANGE_64, gid = NO_CHANGE_64;
        u64 mode = args->mode;
 
+       if (uid_valid(args->uid))
+               uid = from_kuid(&init_user_ns, args->uid);
+       if (gid_valid(args->gid))
+               gid = from_kgid(&init_user_ns, args->gid);
+
        /*
         * Samba server ignores set of file size to zero due to bugs in some
         * older clients, but we should be precise - we use SetFileSize to
@@ -5838,8 +5847,8 @@ cifs_fill_unix_set_info(FILE_UNIX_BASIC_INFO *data_offset,
        data_offset->LastStatusChange = cpu_to_le64(args->ctime);
        data_offset->LastAccessTime = cpu_to_le64(args->atime);
        data_offset->LastModificationTime = cpu_to_le64(args->mtime);
-       data_offset->Uid = cpu_to_le64(args->uid);
-       data_offset->Gid = cpu_to_le64(args->gid);
+       data_offset->Uid = cpu_to_le64(uid);
+       data_offset->Gid = cpu_to_le64(gid);
        /* better to leave device as zero when it is  */
        data_offset->DevMajor = cpu_to_le64(MAJOR(args->device));
        data_offset->DevMinor = cpu_to_le64(MINOR(args->device));
@@ -5871,7 +5880,7 @@ CIFSSMBUnixSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
        int rc = 0;
        u16 params, param_offset, offset, byte_count, count;
 
-       cFYI(1, "Set Unix Info (via SetFileInfo)");
+       cifs_dbg(FYI, "Set Unix Info (via SetFileInfo)\n");
        rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);
 
        if (rc)
@@ -5917,7 +5926,8 @@ CIFSSMBUnixSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
 
        rc = SendReceiveNoRsp(xid, tcon->ses, (char *) pSMB, 0);
        if (rc)
-               cFYI(1, "Send error in Set Time (SetFileInfo) = %d", rc);
+               cifs_dbg(FYI, "Send error in Set Time (SetFileInfo) = %d\n",
+                        rc);
 
        /* Note: On -EAGAIN error only caller can retry on handle based calls
                since file handle passed in no longer valid */
@@ -5939,7 +5949,7 @@ CIFSSMBUnixSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
        FILE_UNIX_BASIC_INFO *data_offset;
        __u16 params, param_offset, offset, count, byte_count;
 
-       cFYI(1, "In SetUID/GID/Mode");
+       cifs_dbg(FYI, "In SetUID/GID/Mode\n");
 setPermsRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -5995,7 +6005,7 @@ setPermsRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "SetPathInfo (perms) returned %d", rc);
+               cifs_dbg(FYI, "SetPathInfo (perms) returned %d\n", rc);
 
        cifs_buf_release(pSMB);
        if (rc == -EAGAIN)
@@ -6032,7 +6042,7 @@ CIFSSMBQAllEAs(const unsigned int xid, struct cifs_tcon *tcon,
        __u16 params, byte_count, data_offset;
        unsigned int ea_name_len = ea_name ? strlen(ea_name) : 0;
 
-       cFYI(1, "In Query All EAs path %s", searchName);
+       cifs_dbg(FYI, "In Query All EAs path %s\n", searchName);
 QAllEAsRetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -6079,7 +6089,7 @@ QAllEAsRetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc) {
-               cFYI(1, "Send error in QueryAllEAs = %d", rc);
+               cifs_dbg(FYI, "Send error in QueryAllEAs = %d\n", rc);
                goto QAllEAsOut;
        }
 
@@ -6107,16 +6117,16 @@ QAllEAsRetry:
                                (((char *) &pSMBr->hdr.Protocol) + data_offset);
 
        list_len = le32_to_cpu(ea_response_data->list_len);
-       cFYI(1, "ea length %d", list_len);
+       cifs_dbg(FYI, "ea length %d\n", list_len);
        if (list_len <= 8) {
-               cFYI(1, "empty EA list returned from server");
+               cifs_dbg(FYI, "empty EA list returned from server\n");
                goto QAllEAsOut;
        }
 
        /* make sure list_len doesn't go past end of SMB */
        end_of_smb = (char *)pByteArea(&pSMBr->hdr) + get_bcc(&pSMBr->hdr);
        if ((char *)ea_response_data + list_len > end_of_smb) {
-               cFYI(1, "EA list appears to go beyond SMB");
+               cifs_dbg(FYI, "EA list appears to go beyond SMB\n");
                rc = -EIO;
                goto QAllEAsOut;
        }
@@ -6133,7 +6143,7 @@ QAllEAsRetry:
                temp_ptr += 4;
                /* make sure we can read name_len and value_len */
                if (list_len < 0) {
-                       cFYI(1, "EA entry goes beyond length of list");
+                       cifs_dbg(FYI, "EA entry goes beyond length of list\n");
                        rc = -EIO;
                        goto QAllEAsOut;
                }
@@ -6142,7 +6152,7 @@ QAllEAsRetry:
                value_len = le16_to_cpu(temp_fea->value_len);
                list_len -= name_len + 1 + value_len;
                if (list_len < 0) {
-                       cFYI(1, "EA entry goes beyond length of list");
+                       cifs_dbg(FYI, "EA entry goes beyond length of list\n");
                        rc = -EIO;
                        goto QAllEAsOut;
                }
@@ -6210,7 +6220,7 @@ CIFSSMBSetEA(const unsigned int xid, struct cifs_tcon *tcon,
        int bytes_returned = 0;
        __u16 params, param_offset, byte_count, offset, count;
 
-       cFYI(1, "In SetEA");
+       cifs_dbg(FYI, "In SetEA\n");
 SetEARetry:
        rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
@@ -6292,7 +6302,7 @@ SetEARetry:
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        if (rc)
-               cFYI(1, "SetPathInfo (EA) returned %d", rc);
+               cifs_dbg(FYI, "SetPathInfo (EA) returned %d\n", rc);
 
        cifs_buf_release(pSMB);
 
@@ -6335,7 +6345,7 @@ int CIFSSMBNotify(const unsigned int xid, struct cifs_tcon *tcon,
        struct dir_notify_req *dnotify_req;
        int bytes_returned;
 
-       cFYI(1, "In CIFSSMBNotify for file handle %d", (int)netfid);
+       cifs_dbg(FYI, "In CIFSSMBNotify for file handle %d\n", (int)netfid);
        rc = smb_init(SMB_COM_NT_TRANSACT, 23, tcon, (void **) &pSMB,
                      (void **) &pSMBr);
        if (rc)
@@ -6364,7 +6374,7 @@ int CIFSSMBNotify(const unsigned int xid, struct cifs_tcon *tcon,
                         (struct smb_hdr *)pSMBr, &bytes_returned,
                         CIFS_ASYNC_OP);
        if (rc) {
-               cFYI(1, "Error in Notify = %d", rc);
+               cifs_dbg(FYI, "Error in Notify = %d\n", rc);
        } else {
                /* Add file to outstanding requests */
                /* BB change to kmem cache alloc */