2019-05-27 14:55:05 +08:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2005-04-17 06:20:36 +08:00
|
|
|
/*
|
|
|
|
*
|
2005-04-29 13:41:07 +08:00
|
|
|
* Copyright (C) International Business Machines Corp., 2000,2005
|
2005-04-17 06:20:36 +08:00
|
|
|
*
|
|
|
|
* Modified by Steve French (sfrench@us.ibm.com)
|
|
|
|
*/
|
|
|
|
#include <linux/fs.h>
|
|
|
|
#include <linux/string.h>
|
|
|
|
#include <linux/ctype.h>
|
2023-01-14 16:58:15 +08:00
|
|
|
#include <linux/kstrtox.h>
|
2005-04-17 06:20:36 +08:00
|
|
|
#include <linux/module.h>
|
|
|
|
#include <linux/proc_fs.h>
|
2016-12-25 03:46:01 +08:00
|
|
|
#include <linux/uaccess.h>
|
2005-04-17 06:20:36 +08:00
|
|
|
#include "cifspdu.h"
|
|
|
|
#include "cifsglob.h"
|
|
|
|
#include "cifsproto.h"
|
|
|
|
#include "cifs_debug.h"
|
2005-04-29 13:41:06 +08:00
|
|
|
#include "cifsfs.h"
|
2021-03-18 20:52:59 +08:00
|
|
|
#include "fs_context.h"
|
2018-11-15 02:01:21 +08:00
|
|
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
|
|
|
#include "dfs_cache.h"
|
|
|
|
#endif
|
2017-11-07 16:54:58 +08:00
|
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
|
|
#include "smbdirect.h"
|
|
|
|
#endif
|
2020-12-01 02:02:53 +08:00
|
|
|
#include "cifs_swn.h"
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
void
|
|
|
|
cifs_dump_mem(char *label, void *data, int length)
|
|
|
|
{
|
2014-08-27 21:49:44 +08:00
|
|
|
pr_debug("%s: dump of %d bytes of data at 0x%p\n", label, length, data);
|
2014-08-27 21:49:43 +08:00
|
|
|
print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 16, 4,
|
|
|
|
data, length, true);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
|
|
|
|
2018-04-23 04:45:53 +08:00
|
|
|
void cifs_dump_detail(void *buf, struct TCP_Server_Info *server)
|
2006-06-01 06:40:51 +08:00
|
|
|
{
|
2012-05-17 17:25:35 +08:00
|
|
|
#ifdef CONFIG_CIFS_DEBUG2
|
2022-06-14 16:54:49 +08:00
|
|
|
struct smb_hdr *smb = buf;
|
2012-03-24 02:28:02 +08:00
|
|
|
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(VFS, "Cmd: %d Err: 0x%x Flags: 0x%x Flgs2: 0x%x Mid: %d Pid: %d\n",
|
|
|
|
smb->Command, smb->Status.CifsError,
|
|
|
|
smb->Flags, smb->Flags2, smb->Mid, smb->Pid);
|
2018-04-23 04:45:53 +08:00
|
|
|
cifs_dbg(VFS, "smb buf %p len %u\n", smb,
|
2022-08-18 01:14:02 +08:00
|
|
|
server->ops->calc_smb_size(smb));
|
2012-05-17 17:25:35 +08:00
|
|
|
#endif /* CONFIG_CIFS_DEBUG2 */
|
2006-06-01 06:40:51 +08:00
|
|
|
}
|
|
|
|
|
2007-06-25 05:15:44 +08:00
|
|
|
void cifs_dump_mids(struct TCP_Server_Info *server)
|
2006-06-01 06:40:51 +08:00
|
|
|
{
|
2012-05-17 17:25:35 +08:00
|
|
|
#ifdef CONFIG_CIFS_DEBUG2
|
2007-06-25 05:15:44 +08:00
|
|
|
struct mid_q_entry *mid_entry;
|
2006-06-01 06:40:51 +08:00
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
if (server == NULL)
|
2006-06-01 06:40:51 +08:00
|
|
|
return;
|
|
|
|
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(VFS, "Dump pending requests:\n");
|
2022-07-28 03:49:56 +08:00
|
|
|
spin_lock(&server->mid_lock);
|
2021-06-17 19:36:40 +08:00
|
|
|
list_for_each_entry(mid_entry, &server->pending_mid_q, qhead) {
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(VFS, "State: %d Cmd: %d Pid: %d Cbdata: %p Mid %llu\n",
|
|
|
|
mid_entry->mid_state,
|
|
|
|
le16_to_cpu(mid_entry->command),
|
|
|
|
mid_entry->pid,
|
|
|
|
mid_entry->callback_data,
|
|
|
|
mid_entry->mid);
|
2006-06-01 06:40:51 +08:00
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(VFS, "IsLarge: %d buf: %p time rcv: %ld now: %ld\n",
|
|
|
|
mid_entry->large_buf,
|
|
|
|
mid_entry->resp_buf,
|
|
|
|
mid_entry->when_received,
|
|
|
|
jiffies);
|
2006-06-01 06:40:51 +08:00
|
|
|
#endif /* STATS2 */
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(VFS, "IsMult: %d IsEnd: %d\n",
|
|
|
|
mid_entry->multiRsp, mid_entry->multiEnd);
|
2008-08-09 05:10:16 +08:00
|
|
|
if (mid_entry->resp_buf) {
|
2018-05-07 04:58:51 +08:00
|
|
|
cifs_dump_detail(mid_entry->resp_buf, server);
|
2008-08-09 05:10:16 +08:00
|
|
|
cifs_dump_mem("existing buf: ",
|
|
|
|
mid_entry->resp_buf, 62);
|
2006-06-01 06:40:51 +08:00
|
|
|
}
|
|
|
|
}
|
2022-07-28 03:49:56 +08:00
|
|
|
spin_unlock(&server->mid_lock);
|
2006-06-01 06:40:51 +08:00
|
|
|
#endif /* CONFIG_CIFS_DEBUG2 */
|
2012-05-17 17:25:35 +08:00
|
|
|
}
|
2006-06-01 06:40:51 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
#ifdef CONFIG_PROC_FS
|
2018-01-24 20:46:12 +08:00
|
|
|
static void cifs_debug_tcon(struct seq_file *m, struct cifs_tcon *tcon)
|
|
|
|
{
|
|
|
|
__u32 dev_type = le32_to_cpu(tcon->fsDevInfo.DeviceType);
|
|
|
|
|
2022-09-22 03:05:53 +08:00
|
|
|
seq_printf(m, "%s Mounts: %d ", tcon->tree_name, tcon->tc_count);
|
2018-01-24 20:46:12 +08:00
|
|
|
if (tcon->nativeFileSystem)
|
|
|
|
seq_printf(m, "Type: %s ", tcon->nativeFileSystem);
|
|
|
|
seq_printf(m, "DevInfo: 0x%x Attributes: 0x%x\n\tPathComponentMax: %d Status: %d",
|
|
|
|
le32_to_cpu(tcon->fsDevInfo.DeviceCharacteristics),
|
|
|
|
le32_to_cpu(tcon->fsAttrInfo.Attributes),
|
|
|
|
le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength),
|
smb3: cleanup and clarify status of tree connections
Currently the way the tid (tree connection) status is tracked
is confusing. The same enum is used for structs cifs_tcon
and cifs_ses and TCP_Server_info, but each of these three has
different states that they transition among. The current
code also unnecessarily uses camelCase.
Convert from use of statusEnum to a new tid_status_enum for
tree connections. The valid states for a tid are:
TID_NEW = 0,
TID_GOOD,
TID_EXITING,
TID_NEED_RECON,
TID_NEED_TCON,
TID_IN_TCON,
TID_NEED_FILES_INVALIDATE, /* unused, considering removing in future */
TID_IN_FILES_INVALIDATE
It also removes CifsNeedTcon, CifsInTcon, CifsNeedFilesInvalidate and
CifsInFilesInvalidate from the statusEnum used for session and
TCP_Server_Info since they are not relevant for those.
A follow on patch will fix the places where we use the
tcon->need_reconnect flag to be more consistent with the tid->status.
Also fixes a bug that was:
Reported-by: kernel test robot <lkp@intel.com>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2022-03-28 05:07:30 +08:00
|
|
|
tcon->status);
|
2018-01-24 20:46:12 +08:00
|
|
|
if (dev_type == FILE_DEVICE_DISK)
|
|
|
|
seq_puts(m, " type: DISK ");
|
|
|
|
else if (dev_type == FILE_DEVICE_CD_ROM)
|
|
|
|
seq_puts(m, " type: CDROM ");
|
|
|
|
else
|
|
|
|
seq_printf(m, " type: %d ", dev_type);
|
2019-03-12 14:29:03 +08:00
|
|
|
|
|
|
|
seq_printf(m, "Serial Number: 0x%x", tcon->vol_serial_number);
|
|
|
|
|
2019-03-10 08:12:18 +08:00
|
|
|
if ((tcon->seal) ||
|
|
|
|
(tcon->ses->session_flags & SMB2_SESSION_FLAG_ENCRYPT_DATA) ||
|
|
|
|
(tcon->share_flags & SHI1005_FLAGS_ENCRYPT_DATA))
|
2018-02-01 04:34:37 +08:00
|
|
|
seq_printf(m, " Encrypted");
|
2018-05-31 06:11:55 +08:00
|
|
|
if (tcon->nocase)
|
|
|
|
seq_printf(m, " nocase");
|
2018-02-01 04:34:37 +08:00
|
|
|
if (tcon->unix_ext)
|
|
|
|
seq_printf(m, " POSIX Extensions");
|
2018-01-24 20:46:12 +08:00
|
|
|
if (tcon->ses->server->ops->dump_share_caps)
|
|
|
|
tcon->ses->server->ops->dump_share_caps(m, tcon);
|
2020-12-01 02:02:53 +08:00
|
|
|
if (tcon->use_witness)
|
|
|
|
seq_puts(m, " Witness");
|
2022-05-24 12:17:12 +08:00
|
|
|
if (tcon->broken_sparse_sup)
|
|
|
|
seq_puts(m, " nosparse");
|
2018-01-24 20:46:12 +08:00
|
|
|
if (tcon->need_reconnect)
|
|
|
|
seq_puts(m, "\tDISCONNECTED ");
|
|
|
|
seq_putc(m, '\n');
|
|
|
|
}
|
|
|
|
|
2019-11-21 00:15:58 +08:00
|
|
|
static void
|
|
|
|
cifs_dump_channel(struct seq_file *m, int i, struct cifs_chan *chan)
|
|
|
|
{
|
|
|
|
struct TCP_Server_Info *server = chan->server;
|
|
|
|
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "\n\n\t\tChannel: %d ConnectionId: 0x%llx"
|
|
|
|
"\n\t\tNumber of credits: %d Dialect 0x%x"
|
|
|
|
"\n\t\tTCP status: %d Instance: %d"
|
|
|
|
"\n\t\tLocal Users To Server: %d SecMode: 0x%x Req On Wire: %d"
|
|
|
|
"\n\t\tIn Send: %d In MaxReq Wait: %d",
|
|
|
|
i+1, server->conn_id,
|
2019-11-21 00:15:58 +08:00
|
|
|
server->credits,
|
|
|
|
server->dialect,
|
|
|
|
server->tcpStatus,
|
|
|
|
server->reconnect_instance,
|
|
|
|
server->srv_count,
|
|
|
|
server->sec_mode,
|
|
|
|
in_flight(server),
|
|
|
|
atomic_read(&server->in_send),
|
|
|
|
atomic_read(&server->num_waiters));
|
|
|
|
}
|
|
|
|
|
2018-06-14 21:43:20 +08:00
|
|
|
static void
|
|
|
|
cifs_dump_iface(struct seq_file *m, struct cifs_server_iface *iface)
|
|
|
|
{
|
|
|
|
struct sockaddr_in *ipv4 = (struct sockaddr_in *)&iface->sockaddr;
|
|
|
|
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)&iface->sockaddr;
|
|
|
|
|
2018-10-20 10:21:37 +08:00
|
|
|
seq_printf(m, "\tSpeed: %zu bps\n", iface->speed);
|
2018-06-14 21:43:20 +08:00
|
|
|
seq_puts(m, "\t\tCapabilities: ");
|
|
|
|
if (iface->rdma_capable)
|
|
|
|
seq_puts(m, "rdma ");
|
|
|
|
if (iface->rss_capable)
|
|
|
|
seq_puts(m, "rss ");
|
|
|
|
seq_putc(m, '\n');
|
|
|
|
if (iface->sockaddr.ss_family == AF_INET)
|
|
|
|
seq_printf(m, "\t\tIPv4: %pI4\n", &ipv4->sin_addr);
|
|
|
|
else if (iface->sockaddr.ss_family == AF_INET6)
|
|
|
|
seq_printf(m, "\t\tIPv6: %pI6\n", &ipv6->sin6_addr);
|
2022-01-01 20:50:21 +08:00
|
|
|
if (!iface->is_active)
|
|
|
|
seq_puts(m, "\t\t[for-cleanup]\n");
|
2018-06-14 21:43:20 +08:00
|
|
|
}
|
|
|
|
|
2018-10-31 08:50:31 +08:00
|
|
|
static int cifs_debug_files_proc_show(struct seq_file *m, void *v)
|
|
|
|
{
|
|
|
|
struct TCP_Server_Info *server;
|
|
|
|
struct cifs_ses *ses;
|
|
|
|
struct cifs_tcon *tcon;
|
|
|
|
struct cifsFileInfo *cfile;
|
|
|
|
|
|
|
|
seq_puts(m, "# Version:1\n");
|
|
|
|
seq_puts(m, "# Format:\n");
|
|
|
|
seq_puts(m, "# <tree id> <persistent fid> <flags> <count> <pid> <uid>");
|
|
|
|
#ifdef CONFIG_CIFS_DEBUG2
|
|
|
|
seq_printf(m, " <filename> <mid>\n");
|
|
|
|
#else
|
|
|
|
seq_printf(m, " <filename>\n");
|
|
|
|
#endif /* CIFS_DEBUG2 */
|
|
|
|
spin_lock(&cifs_tcp_ses_lock);
|
2021-06-17 19:36:40 +08:00
|
|
|
list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) {
|
|
|
|
list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
|
2018-10-31 08:50:31 +08:00
|
|
|
spin_lock(&tcon->open_file_lock);
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(cfile, &tcon->openFileList, tlist) {
|
2018-10-31 08:50:31 +08:00
|
|
|
seq_printf(m,
|
2021-01-07 10:53:52 +08:00
|
|
|
"0x%x 0x%llx 0x%x %d %d %d %pd",
|
2018-10-31 08:50:31 +08:00
|
|
|
tcon->tid,
|
|
|
|
cfile->fid.persistent_fid,
|
|
|
|
cfile->f_flags,
|
|
|
|
cfile->count,
|
|
|
|
cfile->pid,
|
|
|
|
from_kuid(&init_user_ns, cfile->uid),
|
2021-01-07 10:53:52 +08:00
|
|
|
cfile->dentry);
|
2018-10-31 08:50:31 +08:00
|
|
|
#ifdef CONFIG_CIFS_DEBUG2
|
2021-03-08 23:00:47 +08:00
|
|
|
seq_printf(m, " %llu\n", cfile->fid.mid);
|
2018-10-31 08:50:31 +08:00
|
|
|
#else
|
|
|
|
seq_printf(m, "\n");
|
|
|
|
#endif /* CIFS_DEBUG2 */
|
|
|
|
}
|
|
|
|
spin_unlock(&tcon->open_file_lock);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
|
|
|
seq_putc(m, '\n');
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2007-06-25 05:15:44 +08:00
|
|
|
struct mid_q_entry *mid_entry;
|
2008-11-15 02:53:46 +08:00
|
|
|
struct TCP_Server_Info *server;
|
2011-05-27 12:34:02 +08:00
|
|
|
struct cifs_ses *ses;
|
|
|
|
struct cifs_tcon *tcon;
|
2022-01-01 20:50:21 +08:00
|
|
|
struct cifs_server_iface *iface;
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
int c, i, j;
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_puts(m,
|
2005-04-17 06:20:36 +08:00
|
|
|
"Display Internal CIFS Data Structures for Debugging\n"
|
|
|
|
"---------------------------------------------------\n");
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "CIFS Version %s\n", CIFS_VERSION);
|
2011-01-08 00:30:29 +08:00
|
|
|
seq_printf(m, "Features:");
|
2010-07-30 20:55:56 +08:00
|
|
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, " DFS");
|
2010-07-30 20:55:56 +08:00
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_FSCACHE
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, ",FSCACHE");
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
|
|
seq_printf(m, ",SMB_DIRECT");
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
|
|
|
seq_printf(m, ",STATS2");
|
2018-08-02 11:34:04 +08:00
|
|
|
#else
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, ",STATS");
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_DEBUG2
|
|
|
|
seq_printf(m, ",DEBUG2");
|
|
|
|
#elif defined(CONFIG_CIFS_DEBUG)
|
|
|
|
seq_printf(m, ",DEBUG");
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
|
|
|
|
seq_printf(m, ",ALLOW_INSECURE_LEGACY");
|
2010-07-30 20:55:56 +08:00
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_POSIX
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, ",CIFS_POSIX");
|
2010-07-30 20:55:56 +08:00
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_UPCALL
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, ",UPCALL(SPNEGO)");
|
2010-07-30 20:55:56 +08:00
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_CIFS_XATTR
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, ",XATTR");
|
2011-01-08 00:30:29 +08:00
|
|
|
#endif
|
cifs: add missing debug entries for kconfig options
/proc/fs/cifs/DebugData displays the features (Kconfig options)
used to build cifs.ko but it was missing some, and needed comma
separator. These can be useful in debugging certain problems
so we know which optional features were enabled in the user's build.
Also clarify them, by making them more closely match the
corresponding CONFIG_CIFS_* parm.
Old format:
Features: dfs fscache posix spnego xattr acl
New format:
Features: DFS,FSCACHE,SMB_DIRECT,STATS,DEBUG2,ALLOW_INSECURE_LEGACY,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
CC: Stable <stable@vger.kernel.org>
2018-06-29 07:46:40 +08:00
|
|
|
seq_printf(m, ",ACL");
|
2020-12-01 02:02:53 +08:00
|
|
|
#ifdef CONFIG_CIFS_SWN_UPCALL
|
|
|
|
seq_puts(m, ",WITNESS");
|
|
|
|
#endif
|
2010-07-30 20:55:56 +08:00
|
|
|
seq_putc(m, '\n');
|
2019-01-24 14:19:31 +08:00
|
|
|
seq_printf(m, "CIFSMaxBufSize: %d\n", CIFSMaxBufSize);
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "Active VFS Requests: %d\n", GlobalTotalActiveXid);
|
2005-04-17 06:20:36 +08:00
|
|
|
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "\nServers: ");
|
|
|
|
|
|
|
|
c = 0;
|
2010-10-19 01:59:37 +08:00
|
|
|
spin_lock(&cifs_tcp_ses_lock);
|
2021-06-17 19:36:40 +08:00
|
|
|
list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
|
2021-07-19 19:26:24 +08:00
|
|
|
/* channel info will be printed as a part of sessions below */
|
|
|
|
if (CIFS_SERVER_IS_CHAN(server))
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
continue;
|
|
|
|
|
|
|
|
c++;
|
|
|
|
seq_printf(m, "\n%d) ConnectionId: 0x%llx ",
|
|
|
|
c, server->conn_id);
|
|
|
|
|
2021-02-22 13:00:46 +08:00
|
|
|
if (server->hostname)
|
|
|
|
seq_printf(m, "Hostname: %s ", server->hostname);
|
2017-11-23 08:38:48 +08:00
|
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
|
|
if (!server->rdma)
|
|
|
|
goto skip_rdma;
|
|
|
|
|
2019-10-17 04:51:50 +08:00
|
|
|
if (!server->smbd_conn) {
|
|
|
|
seq_printf(m, "\nSMBDirect transport not available");
|
|
|
|
goto skip_rdma;
|
|
|
|
}
|
|
|
|
|
2017-11-23 08:38:48 +08:00
|
|
|
seq_printf(m, "\nSMBDirect (in hex) protocol version: %x "
|
|
|
|
"transport status: %x",
|
|
|
|
server->smbd_conn->protocol,
|
|
|
|
server->smbd_conn->transport_status);
|
|
|
|
seq_printf(m, "\nConn receive_credit_max: %x "
|
|
|
|
"send_credit_target: %x max_send_size: %x",
|
|
|
|
server->smbd_conn->receive_credit_max,
|
|
|
|
server->smbd_conn->send_credit_target,
|
|
|
|
server->smbd_conn->max_send_size);
|
|
|
|
seq_printf(m, "\nConn max_fragmented_recv_size: %x "
|
|
|
|
"max_fragmented_send_size: %x max_receive_size:%x",
|
|
|
|
server->smbd_conn->max_fragmented_recv_size,
|
|
|
|
server->smbd_conn->max_fragmented_send_size,
|
|
|
|
server->smbd_conn->max_receive_size);
|
|
|
|
seq_printf(m, "\nConn keep_alive_interval: %x "
|
|
|
|
"max_readwrite_size: %x rdma_readwrite_threshold: %x",
|
|
|
|
server->smbd_conn->keep_alive_interval,
|
|
|
|
server->smbd_conn->max_readwrite_size,
|
|
|
|
server->smbd_conn->rdma_readwrite_threshold);
|
|
|
|
seq_printf(m, "\nDebug count_get_receive_buffer: %x "
|
|
|
|
"count_put_receive_buffer: %x count_send_empty: %x",
|
|
|
|
server->smbd_conn->count_get_receive_buffer,
|
|
|
|
server->smbd_conn->count_put_receive_buffer,
|
|
|
|
server->smbd_conn->count_send_empty);
|
|
|
|
seq_printf(m, "\nRead Queue count_reassembly_queue: %x "
|
|
|
|
"count_enqueue_reassembly_queue: %x "
|
|
|
|
"count_dequeue_reassembly_queue: %x "
|
|
|
|
"fragment_reassembly_remaining: %x "
|
|
|
|
"reassembly_data_length: %x "
|
|
|
|
"reassembly_queue_length: %x",
|
|
|
|
server->smbd_conn->count_reassembly_queue,
|
|
|
|
server->smbd_conn->count_enqueue_reassembly_queue,
|
|
|
|
server->smbd_conn->count_dequeue_reassembly_queue,
|
|
|
|
server->smbd_conn->fragment_reassembly_remaining,
|
|
|
|
server->smbd_conn->reassembly_data_length,
|
|
|
|
server->smbd_conn->reassembly_queue_length);
|
|
|
|
seq_printf(m, "\nCurrent Credits send_credits: %x "
|
|
|
|
"receive_credits: %x receive_credit_target: %x",
|
|
|
|
atomic_read(&server->smbd_conn->send_credits),
|
|
|
|
atomic_read(&server->smbd_conn->receive_credits),
|
|
|
|
server->smbd_conn->receive_credit_target);
|
2020-03-31 02:04:06 +08:00
|
|
|
seq_printf(m, "\nPending send_pending: %x ",
|
|
|
|
atomic_read(&server->smbd_conn->send_pending));
|
2017-11-23 08:38:48 +08:00
|
|
|
seq_printf(m, "\nReceive buffers count_receive_queue: %x "
|
|
|
|
"count_empty_packet_queue: %x",
|
|
|
|
server->smbd_conn->count_receive_queue,
|
|
|
|
server->smbd_conn->count_empty_packet_queue);
|
|
|
|
seq_printf(m, "\nMR responder_resources: %x "
|
|
|
|
"max_frmr_depth: %x mr_type: %x",
|
|
|
|
server->smbd_conn->responder_resources,
|
|
|
|
server->smbd_conn->max_frmr_depth,
|
|
|
|
server->smbd_conn->mr_type);
|
|
|
|
seq_printf(m, "\nMR mr_ready_count: %x mr_used_count: %x",
|
|
|
|
atomic_read(&server->smbd_conn->mr_ready_count),
|
|
|
|
atomic_read(&server->smbd_conn->mr_used_count));
|
|
|
|
skip_rdma:
|
|
|
|
#endif
|
2018-02-01 04:34:37 +08:00
|
|
|
seq_printf(m, "\nNumber of credits: %d Dialect 0x%x",
|
|
|
|
server->credits, server->dialect);
|
2019-04-27 11:36:08 +08:00
|
|
|
if (server->compress_algorithm == SMB3_COMPRESS_LZNT1)
|
|
|
|
seq_printf(m, " COMPRESS_LZNT1");
|
|
|
|
else if (server->compress_algorithm == SMB3_COMPRESS_LZ77)
|
|
|
|
seq_printf(m, " COMPRESS_LZ77");
|
|
|
|
else if (server->compress_algorithm == SMB3_COMPRESS_LZ77_HUFF)
|
|
|
|
seq_printf(m, " COMPRESS_LZ77_HUFF");
|
2018-02-01 04:34:37 +08:00
|
|
|
if (server->sign)
|
|
|
|
seq_printf(m, " signed");
|
2018-05-20 09:45:27 +08:00
|
|
|
if (server->posix_ext_supported)
|
|
|
|
seq_printf(m, " posix");
|
2021-11-06 19:31:53 +08:00
|
|
|
if (server->nosharesock)
|
|
|
|
seq_printf(m, " nosharesock");
|
2018-06-29 08:30:23 +08:00
|
|
|
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
if (server->rdma)
|
|
|
|
seq_printf(m, "\nRDMA ");
|
|
|
|
seq_printf(m, "\nTCP status: %d Instance: %d"
|
|
|
|
"\nLocal Users To Server: %d SecMode: 0x%x Req On Wire: %d",
|
|
|
|
server->tcpStatus,
|
|
|
|
server->reconnect_instance,
|
|
|
|
server->srv_count,
|
|
|
|
server->sec_mode, in_flight(server));
|
|
|
|
|
|
|
|
seq_printf(m, "\nIn Send: %d In MaxReq Wait: %d",
|
|
|
|
atomic_read(&server->in_send),
|
|
|
|
atomic_read(&server->num_waiters));
|
2022-11-18 00:23:49 +08:00
|
|
|
if (IS_ENABLED(CONFIG_CIFS_DFS_UPCALL)) {
|
|
|
|
if (server->origin_fullpath)
|
|
|
|
seq_printf(m, "\nDFS origin full path: %s",
|
|
|
|
server->origin_fullpath);
|
|
|
|
if (server->leaf_fullpath)
|
|
|
|
seq_printf(m, "\nDFS leaf full path: %s",
|
|
|
|
server->leaf_fullpath);
|
|
|
|
}
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
|
|
|
|
seq_printf(m, "\n\n\tSessions: ");
|
|
|
|
i = 0;
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) {
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
i++;
|
2008-11-15 02:53:46 +08:00
|
|
|
if ((ses->serverDomain == NULL) ||
|
|
|
|
(ses->serverOS == NULL) ||
|
|
|
|
(ses->serverNOS == NULL)) {
|
2021-02-22 13:00:46 +08:00
|
|
|
seq_printf(m, "\n\t%d) Address: %s Uses: %d Capability: 0x%x\tSession Status: %d ",
|
2021-02-21 09:24:11 +08:00
|
|
|
i, ses->ip_addr, ses->ses_count,
|
2022-04-07 21:15:49 +08:00
|
|
|
ses->capabilities, ses->ses_status);
|
2017-09-21 05:46:49 +08:00
|
|
|
if (ses->session_flags & SMB2_SESSION_FLAG_IS_GUEST)
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "Guest ");
|
2017-09-21 05:46:49 +08:00
|
|
|
else if (ses->session_flags & SMB2_SESSION_FLAG_IS_NULL)
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "Anonymous ");
|
2008-11-15 02:53:46 +08:00
|
|
|
} else {
|
|
|
|
seq_printf(m,
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
"\n\t%d) Name: %s Domain: %s Uses: %d OS: %s "
|
|
|
|
"\n\tNOS: %s\tCapability: 0x%x"
|
|
|
|
"\n\tSMB session status: %d ",
|
2021-02-21 09:24:11 +08:00
|
|
|
i, ses->ip_addr, ses->serverDomain,
|
2008-11-15 02:53:46 +08:00
|
|
|
ses->ses_count, ses->serverOS, ses->serverNOS,
|
2022-04-07 21:15:49 +08:00
|
|
|
ses->capabilities, ses->ses_status);
|
2008-11-15 02:53:46 +08:00
|
|
|
}
|
2020-06-04 23:44:41 +08:00
|
|
|
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "\n\tSecurity type: %s ",
|
2020-06-09 12:42:10 +08:00
|
|
|
get_security_type_str(server->ops->select_sectype(server, ses->sectype)));
|
2020-06-04 23:44:41 +08:00
|
|
|
|
2019-05-09 11:41:37 +08:00
|
|
|
/* dump session id helpful for use with network trace */
|
|
|
|
seq_printf(m, " SessionId: 0x%llx", ses->Suid);
|
2019-03-10 08:12:18 +08:00
|
|
|
if (ses->session_flags & SMB2_SESSION_FLAG_ENCRYPT_DATA)
|
|
|
|
seq_puts(m, " encrypted");
|
|
|
|
if (ses->sign)
|
|
|
|
seq_puts(m, " signed");
|
2005-10-08 00:51:05 +08:00
|
|
|
|
2020-06-27 03:58:04 +08:00
|
|
|
seq_printf(m, "\n\tUser: %d Cred User: %d",
|
|
|
|
from_kuid(&init_user_ns, ses->linux_uid),
|
|
|
|
from_kuid(&init_user_ns, ses->cred_uid));
|
|
|
|
|
2021-07-19 18:54:46 +08:00
|
|
|
spin_lock(&ses->chan_lock);
|
2021-07-19 22:01:32 +08:00
|
|
|
if (CIFS_CHAN_NEEDS_RECONNECT(ses, 0))
|
|
|
|
seq_puts(m, "\tPrimary channel: DISCONNECTED ");
|
2022-04-08 21:31:37 +08:00
|
|
|
if (CIFS_CHAN_IN_RECONNECT(ses, 0))
|
|
|
|
seq_puts(m, "\t[RECONNECTING] ");
|
2021-07-19 22:01:32 +08:00
|
|
|
|
2019-11-21 00:15:58 +08:00
|
|
|
if (ses->chan_count > 1) {
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "\n\n\tExtra Channels: %zu ",
|
2019-11-21 00:15:58 +08:00
|
|
|
ses->chan_count-1);
|
2021-07-19 22:01:32 +08:00
|
|
|
for (j = 1; j < ses->chan_count; j++) {
|
2019-11-21 00:15:58 +08:00
|
|
|
cifs_dump_channel(m, j, &ses->chans[j]);
|
2021-07-19 22:01:32 +08:00
|
|
|
if (CIFS_CHAN_NEEDS_RECONNECT(ses, j))
|
|
|
|
seq_puts(m, "\tDISCONNECTED ");
|
2022-04-08 21:31:37 +08:00
|
|
|
if (CIFS_CHAN_IN_RECONNECT(ses, j))
|
|
|
|
seq_puts(m, "\t[RECONNECTING] ");
|
2021-07-19 22:01:32 +08:00
|
|
|
}
|
2019-11-21 00:15:58 +08:00
|
|
|
}
|
2021-07-19 18:54:46 +08:00
|
|
|
spin_unlock(&ses->chan_lock);
|
2019-11-21 00:15:58 +08:00
|
|
|
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_puts(m, "\n\n\tShares: ");
|
2008-11-16 00:12:47 +08:00
|
|
|
j = 0;
|
2018-01-24 20:46:12 +08:00
|
|
|
|
|
|
|
seq_printf(m, "\n\t%d) IPC: ", j);
|
|
|
|
if (ses->tcon_ipc)
|
|
|
|
cifs_debug_tcon(m, ses->tcon_ipc);
|
|
|
|
else
|
|
|
|
seq_puts(m, "none\n");
|
|
|
|
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
|
2008-11-16 00:12:47 +08:00
|
|
|
++j;
|
2018-01-24 20:46:12 +08:00
|
|
|
seq_printf(m, "\n\t%d) ", j);
|
|
|
|
cifs_debug_tcon(m, tcon);
|
2008-11-16 00:12:47 +08:00
|
|
|
}
|
|
|
|
|
2018-06-14 21:43:20 +08:00
|
|
|
spin_lock(&ses->iface_lock);
|
2018-06-15 10:59:31 +08:00
|
|
|
if (ses->iface_count)
|
2022-12-23 18:41:25 +08:00
|
|
|
seq_printf(m, "\n\n\tServer interfaces: %zu"
|
|
|
|
"\tLast updated: %lu seconds ago",
|
|
|
|
ses->iface_count,
|
|
|
|
(jiffies - ses->iface_last_update) / HZ);
|
2022-01-01 20:50:21 +08:00
|
|
|
j = 0;
|
|
|
|
list_for_each_entry(iface, &ses->iface_list,
|
|
|
|
iface_head) {
|
|
|
|
seq_printf(m, "\n\t%d)", ++j);
|
2019-11-21 00:15:58 +08:00
|
|
|
cifs_dump_iface(m, iface);
|
|
|
|
if (is_ses_using_iface(ses, iface))
|
|
|
|
seq_puts(m, "\t\t[CONNECTED]\n");
|
2018-06-14 21:43:20 +08:00
|
|
|
}
|
|
|
|
spin_unlock(&ses->iface_lock);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
if (i == 0)
|
|
|
|
seq_printf(m, "\n\t\t[NONE]");
|
|
|
|
|
|
|
|
seq_puts(m, "\n\n\tMIDs: ");
|
2022-07-28 03:49:56 +08:00
|
|
|
spin_lock(&server->mid_lock);
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(mid_entry, &server->pending_mid_q, qhead) {
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "\n\tState: %d com: %d pid:"
|
|
|
|
" %d cbdata: %p mid %llu\n",
|
|
|
|
mid_entry->mid_state,
|
|
|
|
le16_to_cpu(mid_entry->command),
|
|
|
|
mid_entry->pid,
|
|
|
|
mid_entry->callback_data,
|
|
|
|
mid_entry->mid);
|
|
|
|
}
|
2022-07-28 03:49:56 +08:00
|
|
|
spin_unlock(&server->mid_lock);
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
seq_printf(m, "\n--\n");
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
cifs: Reformat DebugData and index connections by conn_id.
Reformat the output of /proc/fs/cifs/DebugData to print the
conn_id for each connection. Also reordered and numbered the data
into a more reader-friendly format.
This is what the new format looks like:
$ cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.30
Features: DFS,FSCACHE,STATS,DEBUG,ALLOW_INSECURE_LEGACY,WEAK_PW_HASH,CIFS_POSIX,UPCALL(SPNEGO),XATTR,ACL
CIFSMaxBufSize: 16384
Active VFS Requests: 0
Servers:
1) ConnectionId: 0x1
Number of credits: 371 Dialect 0x300
TCP status: 1 Instance: 1
Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0 In Send: 0 In MaxReq Wait: 0
Sessions:
1) Name: 10.10.10.10 Uses: 1 Capability: 0x300077 Session Status: 1
Security type: RawNTLMSSP SessionId: 0x785560000019
User: 1000 Cred User: 0
Shares:
0) IPC: \\10.10.10.10\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
PathComponentMax: 0 Status: 1 type: 0 Serial Number: 0x0
Share Capabilities: None Share Flags: 0x30
tid: 0x1 Maximal Access: 0x11f01ff
1) \\10.10.10.10\shyam_test2 Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
PathComponentMax: 255 Status: 1 type: DISK Serial Number: 0xd4723975
Share Capabilities: None Aligned, Partition Aligned, Share Flags: 0x0
tid: 0x5 Optimal sector size: 0x1000 Maximal Access: 0x1f01ff
MIDs:
Server interfaces: 3
1) Speed: 10000000000 bps
Capabilities: rss
IPv4: 10.10.10.1
2) Speed: 10000000000 bps
Capabilities: rss
IPv6: fe80:0000:0000:0000:18b4:0000:0000:0000
3) Speed: 1000000000 bps
Capabilities: rss
IPv4: 10.10.10.10
[CONNECTED]
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2021-02-04 15:27:52 +08:00
|
|
|
if (c == 0)
|
|
|
|
seq_printf(m, "\n\t[NONE]");
|
|
|
|
|
2010-10-19 01:59:37 +08:00
|
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_putc(m, '\n');
|
2020-12-01 02:02:53 +08:00
|
|
|
cifs_swn_dump(m);
|
2021-04-09 22:31:37 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
/* BB add code to dump additional info such as TCP session info now */
|
2008-07-24 10:34:24 +08:00
|
|
|
return 0;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static ssize_t cifs_stats_proc_write(struct file *file,
|
|
|
|
const char __user *buffer, size_t count, loff_t *ppos)
|
2005-10-12 10:58:06 +08:00
|
|
|
{
|
2014-08-27 21:49:42 +08:00
|
|
|
bool bv;
|
2007-06-06 04:35:06 +08:00
|
|
|
int rc;
|
2008-11-16 00:12:47 +08:00
|
|
|
struct TCP_Server_Info *server;
|
2011-05-27 12:34:02 +08:00
|
|
|
struct cifs_ses *ses;
|
|
|
|
struct cifs_tcon *tcon;
|
2005-10-12 10:58:06 +08:00
|
|
|
|
2016-03-18 05:22:54 +08:00
|
|
|
rc = kstrtobool_from_user(buffer, count, &bv);
|
|
|
|
if (rc == 0) {
|
2005-12-04 05:58:57 +08:00
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
2018-08-04 18:24:34 +08:00
|
|
|
int i;
|
|
|
|
|
2022-07-16 12:45:45 +08:00
|
|
|
atomic_set(&total_buf_alloc_count, 0);
|
|
|
|
atomic_set(&total_small_buf_alloc_count, 0);
|
2005-12-04 05:58:57 +08:00
|
|
|
#endif /* CONFIG_CIFS_STATS2 */
|
2018-09-16 12:04:41 +08:00
|
|
|
atomic_set(&tcpSesReconnectCount, 0);
|
|
|
|
atomic_set(&tconInfoReconnectCount, 0);
|
|
|
|
|
2018-08-01 13:56:12 +08:00
|
|
|
spin_lock(&GlobalMid_Lock);
|
|
|
|
GlobalMaxActiveXid = 0;
|
|
|
|
GlobalCurrentXid = 0;
|
|
|
|
spin_unlock(&GlobalMid_Lock);
|
2010-10-19 01:59:37 +08:00
|
|
|
spin_lock(&cifs_tcp_ses_lock);
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
|
2019-09-10 11:57:11 +08:00
|
|
|
server->max_in_flight = 0;
|
2018-08-04 18:24:34 +08:00
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
2019-03-27 02:53:21 +08:00
|
|
|
for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) {
|
|
|
|
atomic_set(&server->num_cmds[i], 0);
|
2018-08-04 18:24:34 +08:00
|
|
|
atomic_set(&server->smb2slowcmd[i], 0);
|
2019-03-27 02:53:21 +08:00
|
|
|
server->time_per_cmd[i] = 0;
|
|
|
|
server->slowest_cmd[i] = 0;
|
|
|
|
server->fastest_cmd[0] = 0;
|
|
|
|
}
|
2018-08-04 18:24:34 +08:00
|
|
|
#endif /* CONFIG_CIFS_STATS2 */
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) {
|
|
|
|
list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
|
2008-11-16 00:12:47 +08:00
|
|
|
atomic_set(&tcon->num_smbs_sent, 0);
|
2018-08-01 13:56:12 +08:00
|
|
|
spin_lock(&tcon->stat_lock);
|
|
|
|
tcon->bytes_read = 0;
|
|
|
|
tcon->bytes_written = 0;
|
|
|
|
spin_unlock(&tcon->stat_lock);
|
2012-05-28 18:16:31 +08:00
|
|
|
if (server->ops->clear_stats)
|
|
|
|
server->ops->clear_stats(tcon);
|
2008-11-16 00:12:47 +08:00
|
|
|
}
|
|
|
|
}
|
2005-10-12 10:58:06 +08:00
|
|
|
}
|
2010-10-19 01:59:37 +08:00
|
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
2016-03-18 05:22:54 +08:00
|
|
|
} else {
|
|
|
|
return rc;
|
2005-10-12 10:58:06 +08:00
|
|
|
}
|
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
return count;
|
2005-10-12 10:58:06 +08:00
|
|
|
}
|
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_stats_proc_show(struct seq_file *m, void *v)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2008-07-24 10:34:24 +08:00
|
|
|
int i;
|
2018-08-04 18:24:34 +08:00
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
|
|
|
int j;
|
|
|
|
#endif /* STATS2 */
|
2008-11-16 00:12:47 +08:00
|
|
|
struct TCP_Server_Info *server;
|
2011-05-27 12:34:02 +08:00
|
|
|
struct cifs_ses *ses;
|
|
|
|
struct cifs_tcon *tcon;
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2018-08-04 18:24:34 +08:00
|
|
|
seq_printf(m, "Resources in use\nCIFS Session: %d\n",
|
2005-04-17 06:20:36 +08:00
|
|
|
sesInfoAllocCount.counter);
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "Share (unique mount targets): %d\n",
|
2005-04-17 06:20:36 +08:00
|
|
|
tconInfoAllocCount.counter);
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "SMB Request/Response Buffer: %d Pool size: %d\n",
|
2022-07-16 12:45:45 +08:00
|
|
|
buf_alloc_count.counter,
|
2005-04-29 13:41:07 +08:00
|
|
|
cifs_min_rcv + tcpSesAllocCount.counter);
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "SMB Small Req/Resp Buffer: %d Pool size: %d\n",
|
2022-07-16 12:45:45 +08:00
|
|
|
small_buf_alloc_count.counter, cifs_min_small);
|
2005-12-04 06:11:37 +08:00
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "Total Large %d Small %d Allocations\n",
|
2022-07-16 12:45:45 +08:00
|
|
|
atomic_read(&total_buf_alloc_count),
|
|
|
|
atomic_read(&total_small_buf_alloc_count));
|
2005-12-04 06:11:37 +08:00
|
|
|
#endif /* CONFIG_CIFS_STATS2 */
|
|
|
|
|
2022-07-16 12:45:45 +08:00
|
|
|
seq_printf(m, "Operations (MIDs): %d\n", atomic_read(&mid_count));
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m,
|
2005-04-17 06:20:36 +08:00
|
|
|
"\n%d session %d share reconnects\n",
|
2007-06-06 04:35:06 +08:00
|
|
|
tcpSesReconnectCount.counter, tconInfoReconnectCount.counter);
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m,
|
2005-04-17 06:20:36 +08:00
|
|
|
"Total vfs operations: %d maximum at one time: %d\n",
|
2007-06-06 04:35:06 +08:00
|
|
|
GlobalCurrentXid, GlobalMaxActiveXid);
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
i = 0;
|
2010-10-19 01:59:37 +08:00
|
|
|
spin_lock(&cifs_tcp_ses_lock);
|
2021-06-17 19:36:40 +08:00
|
|
|
list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
|
2019-09-10 11:57:11 +08:00
|
|
|
seq_printf(m, "\nMax requests in flight: %d", server->max_in_flight);
|
2018-08-04 18:24:34 +08:00
|
|
|
#ifdef CONFIG_CIFS_STATS2
|
2019-03-27 02:53:21 +08:00
|
|
|
seq_puts(m, "\nTotal time spent processing by command. Time ");
|
|
|
|
seq_printf(m, "units are jiffies (%d per second)\n", HZ);
|
|
|
|
seq_puts(m, " SMB3 CMD\tNumber\tTotal Time\tFastest\tSlowest\n");
|
|
|
|
seq_puts(m, " --------\t------\t----------\t-------\t-------\n");
|
|
|
|
for (j = 0; j < NUMBER_OF_SMB2_COMMANDS; j++)
|
|
|
|
seq_printf(m, " %d\t\t%d\t%llu\t\t%u\t%u\n", j,
|
|
|
|
atomic_read(&server->num_cmds[j]),
|
|
|
|
server->time_per_cmd[j],
|
|
|
|
server->fastest_cmd[j],
|
|
|
|
server->slowest_cmd[j]);
|
2018-08-04 18:24:34 +08:00
|
|
|
for (j = 0; j < NUMBER_OF_SMB2_COMMANDS; j++)
|
|
|
|
if (atomic_read(&server->smb2slowcmd[j]))
|
2019-03-27 02:53:21 +08:00
|
|
|
seq_printf(m, " %d slow responses from %s for command %d\n",
|
2018-08-04 18:24:34 +08:00
|
|
|
atomic_read(&server->smb2slowcmd[j]),
|
|
|
|
server->hostname, j);
|
|
|
|
#endif /* STATS2 */
|
2022-07-23 01:02:59 +08:00
|
|
|
list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) {
|
|
|
|
list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
|
2008-11-16 00:12:47 +08:00
|
|
|
i++;
|
2022-09-22 03:05:53 +08:00
|
|
|
seq_printf(m, "\n%d) %s", i, tcon->tree_name);
|
2008-11-16 00:12:47 +08:00
|
|
|
if (tcon->need_reconnect)
|
|
|
|
seq_puts(m, "\tDISCONNECTED ");
|
2012-05-28 18:16:31 +08:00
|
|
|
seq_printf(m, "\nSMBs: %d",
|
|
|
|
atomic_read(&tcon->num_smbs_sent));
|
|
|
|
if (server->ops->print_stats)
|
|
|
|
server->ops->print_stats(m, tcon);
|
2008-11-16 00:12:47 +08:00
|
|
|
}
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2010-10-19 01:59:37 +08:00
|
|
|
spin_unlock(&cifs_tcp_ses_lock);
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_putc(m, '\n');
|
|
|
|
return 0;
|
|
|
|
}
|
2007-06-06 04:35:06 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_stats_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, cifs_stats_proc_show, NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifs_stats_proc_ops = {
|
|
|
|
.proc_open = cifs_stats_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
.proc_write = cifs_stats_proc_write,
|
2008-07-24 10:34:24 +08:00
|
|
|
};
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2017-11-07 16:54:58 +08:00
|
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
|
|
#define PROC_FILE_DEFINE(name) \
|
|
|
|
static ssize_t name##_write(struct file *file, const char __user *buffer, \
|
|
|
|
size_t count, loff_t *ppos) \
|
|
|
|
{ \
|
|
|
|
int rc; \
|
|
|
|
rc = kstrtoint_from_user(buffer, count, 10, & name); \
|
|
|
|
if (rc) \
|
|
|
|
return rc; \
|
|
|
|
return count; \
|
|
|
|
} \
|
|
|
|
static int name##_proc_show(struct seq_file *m, void *v) \
|
|
|
|
{ \
|
|
|
|
seq_printf(m, "%d\n", name ); \
|
|
|
|
return 0; \
|
|
|
|
} \
|
|
|
|
static int name##_open(struct inode *inode, struct file *file) \
|
|
|
|
{ \
|
|
|
|
return single_open(file, name##_proc_show, NULL); \
|
|
|
|
} \
|
|
|
|
\
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifs_##name##_proc_fops = { \
|
|
|
|
.proc_open = name##_open, \
|
|
|
|
.proc_read = seq_read, \
|
|
|
|
.proc_lseek = seq_lseek, \
|
|
|
|
.proc_release = single_release, \
|
|
|
|
.proc_write = name##_write, \
|
2017-11-07 16:54:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
PROC_FILE_DEFINE(rdma_readwrite_threshold);
|
|
|
|
PROC_FILE_DEFINE(smbd_max_frmr_depth);
|
|
|
|
PROC_FILE_DEFINE(smbd_keep_alive_interval);
|
|
|
|
PROC_FILE_DEFINE(smbd_max_receive_size);
|
|
|
|
PROC_FILE_DEFINE(smbd_max_fragmented_recv_size);
|
|
|
|
PROC_FILE_DEFINE(smbd_max_send_size);
|
|
|
|
PROC_FILE_DEFINE(smbd_send_credit_target);
|
|
|
|
PROC_FILE_DEFINE(smbd_receive_credit_max);
|
|
|
|
#endif
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
static struct proc_dir_entry *proc_fs_cifs;
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifsFYI_proc_ops;
|
|
|
|
static const struct proc_ops cifs_lookup_cache_proc_ops;
|
|
|
|
static const struct proc_ops traceSMB_proc_ops;
|
|
|
|
static const struct proc_ops cifs_security_flags_proc_ops;
|
|
|
|
static const struct proc_ops cifs_linux_ext_proc_ops;
|
2021-03-18 20:52:59 +08:00
|
|
|
static const struct proc_ops cifs_mount_params_proc_ops;
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
void
|
|
|
|
cifs_proc_init(void)
|
|
|
|
{
|
2008-04-29 16:01:42 +08:00
|
|
|
proc_fs_cifs = proc_mkdir("fs/cifs", NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
if (proc_fs_cifs == NULL)
|
|
|
|
return;
|
|
|
|
|
2018-05-15 21:57:23 +08:00
|
|
|
proc_create_single("DebugData", 0, proc_fs_cifs,
|
|
|
|
cifs_debug_data_proc_show);
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2018-10-31 08:50:31 +08:00
|
|
|
proc_create_single("open_files", 0400, proc_fs_cifs,
|
|
|
|
cifs_debug_files_proc_show);
|
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
proc_create("Stats", 0644, proc_fs_cifs, &cifs_stats_proc_ops);
|
|
|
|
proc_create("cifsFYI", 0644, proc_fs_cifs, &cifsFYI_proc_ops);
|
|
|
|
proc_create("traceSMB", 0644, proc_fs_cifs, &traceSMB_proc_ops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("LinuxExtensionsEnabled", 0644, proc_fs_cifs,
|
2020-02-04 09:37:17 +08:00
|
|
|
&cifs_linux_ext_proc_ops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("SecurityFlags", 0644, proc_fs_cifs,
|
2020-02-04 09:37:17 +08:00
|
|
|
&cifs_security_flags_proc_ops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("LookupCacheEnabled", 0644, proc_fs_cifs,
|
2020-02-04 09:37:17 +08:00
|
|
|
&cifs_lookup_cache_proc_ops);
|
2018-11-15 02:01:21 +08:00
|
|
|
|
2021-03-18 20:52:59 +08:00
|
|
|
proc_create("mount_params", 0444, proc_fs_cifs, &cifs_mount_params_proc_ops);
|
|
|
|
|
2018-11-15 02:01:21 +08:00
|
|
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
2020-02-04 09:37:17 +08:00
|
|
|
proc_create("dfscache", 0644, proc_fs_cifs, &dfscache_proc_ops);
|
2018-11-15 02:01:21 +08:00
|
|
|
#endif
|
|
|
|
|
2017-11-07 16:54:58 +08:00
|
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("rdma_readwrite_threshold", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_rdma_readwrite_threshold_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_max_frmr_depth", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_max_frmr_depth_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_keep_alive_interval", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_keep_alive_interval_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_max_receive_size", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_max_receive_size_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_max_fragmented_recv_size", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_max_fragmented_recv_size_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_max_send_size", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_max_send_size_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_send_credit_target", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_send_credit_target_proc_fops);
|
2018-05-24 12:18:05 +08:00
|
|
|
proc_create("smbd_receive_credit_max", 0644, proc_fs_cifs,
|
2017-11-07 16:54:58 +08:00
|
|
|
&cifs_smbd_receive_credit_max_proc_fops);
|
|
|
|
#endif
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
cifs_proc_clean(void)
|
|
|
|
{
|
|
|
|
if (proc_fs_cifs == NULL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
remove_proc_entry("DebugData", proc_fs_cifs);
|
2018-10-31 08:50:31 +08:00
|
|
|
remove_proc_entry("open_files", proc_fs_cifs);
|
2005-04-17 06:20:36 +08:00
|
|
|
remove_proc_entry("cifsFYI", proc_fs_cifs);
|
|
|
|
remove_proc_entry("traceSMB", proc_fs_cifs);
|
|
|
|
remove_proc_entry("Stats", proc_fs_cifs);
|
2007-06-06 04:35:06 +08:00
|
|
|
remove_proc_entry("SecurityFlags", proc_fs_cifs);
|
|
|
|
remove_proc_entry("LinuxExtensionsEnabled", proc_fs_cifs);
|
|
|
|
remove_proc_entry("LookupCacheEnabled", proc_fs_cifs);
|
2021-03-18 20:52:59 +08:00
|
|
|
remove_proc_entry("mount_params", proc_fs_cifs);
|
2018-11-15 02:01:21 +08:00
|
|
|
|
|
|
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
|
|
|
remove_proc_entry("dfscache", proc_fs_cifs);
|
|
|
|
#endif
|
2017-11-07 16:54:58 +08:00
|
|
|
#ifdef CONFIG_CIFS_SMB_DIRECT
|
|
|
|
remove_proc_entry("rdma_readwrite_threshold", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_max_frmr_depth", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_keep_alive_interval", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_max_receive_size", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_max_fragmented_recv_size", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_max_send_size", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_send_credit_target", proc_fs_cifs);
|
|
|
|
remove_proc_entry("smbd_receive_credit_max", proc_fs_cifs);
|
|
|
|
#endif
|
2008-04-29 16:01:42 +08:00
|
|
|
remove_proc_entry("fs/cifs", NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifsFYI_proc_show(struct seq_file *m, void *v)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "%d\n", cifsFYI);
|
|
|
|
return 0;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifsFYI_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, cifsFYI_proc_show, NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
|
|
|
static ssize_t cifsFYI_proc_write(struct file *file, const char __user *buffer,
|
|
|
|
size_t count, loff_t *ppos)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2016-03-18 05:22:54 +08:00
|
|
|
char c[2] = { '\0' };
|
2014-08-27 21:49:42 +08:00
|
|
|
bool bv;
|
2005-04-17 06:20:36 +08:00
|
|
|
int rc;
|
|
|
|
|
2016-03-18 05:22:54 +08:00
|
|
|
rc = get_user(c[0], buffer);
|
2005-04-17 06:20:36 +08:00
|
|
|
if (rc)
|
|
|
|
return rc;
|
2023-01-14 16:58:15 +08:00
|
|
|
if (kstrtobool(c, &bv) == 0)
|
2014-08-27 21:49:42 +08:00
|
|
|
cifsFYI = bv;
|
2016-03-18 05:22:54 +08:00
|
|
|
else if ((c[0] > '1') && (c[0] <= '9'))
|
|
|
|
cifsFYI = (int) (c[0] - '0'); /* see cifs_debug.h for meanings */
|
2018-05-24 07:53:39 +08:00
|
|
|
else
|
|
|
|
return -EINVAL;
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifsFYI_proc_ops = {
|
|
|
|
.proc_open = cifsFYI_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
.proc_write = cifsFYI_proc_write,
|
2008-07-24 10:34:24 +08:00
|
|
|
};
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_linux_ext_proc_show(struct seq_file *m, void *v)
|
|
|
|
{
|
|
|
|
seq_printf(m, "%d\n", linuxExtEnabled);
|
|
|
|
return 0;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_linux_ext_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, cifs_linux_ext_proc_show, NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
|
|
|
static ssize_t cifs_linux_ext_proc_write(struct file *file,
|
|
|
|
const char __user *buffer, size_t count, loff_t *ppos)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2007-06-06 04:35:06 +08:00
|
|
|
int rc;
|
|
|
|
|
2016-03-18 05:22:54 +08:00
|
|
|
rc = kstrtobool_from_user(buffer, count, &linuxExtEnabled);
|
2007-06-06 04:35:06 +08:00
|
|
|
if (rc)
|
|
|
|
return rc;
|
2014-08-27 21:49:42 +08:00
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
return count;
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifs_linux_ext_proc_ops = {
|
|
|
|
.proc_open = cifs_linux_ext_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
.proc_write = cifs_linux_ext_proc_write,
|
2008-07-24 10:34:24 +08:00
|
|
|
};
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_lookup_cache_proc_show(struct seq_file *m, void *v)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2008-07-24 10:34:24 +08:00
|
|
|
seq_printf(m, "%d\n", lookupCacheEnabled);
|
|
|
|
return 0;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_lookup_cache_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, cifs_lookup_cache_proc_show, NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
|
|
|
static ssize_t cifs_lookup_cache_proc_write(struct file *file,
|
|
|
|
const char __user *buffer, size_t count, loff_t *ppos)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
|
2016-03-18 05:22:54 +08:00
|
|
|
rc = kstrtobool_from_user(buffer, count, &lookupCacheEnabled);
|
2005-04-17 06:20:36 +08:00
|
|
|
if (rc)
|
|
|
|
return rc;
|
2014-08-27 21:49:42 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifs_lookup_cache_proc_ops = {
|
|
|
|
.proc_open = cifs_lookup_cache_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
.proc_write = cifs_lookup_cache_proc_write,
|
2008-07-24 10:34:24 +08:00
|
|
|
};
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int traceSMB_proc_show(struct seq_file *m, void *v)
|
|
|
|
{
|
|
|
|
seq_printf(m, "%d\n", traceSMB);
|
|
|
|
return 0;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int traceSMB_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, traceSMB_proc_show, NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
|
|
|
static ssize_t traceSMB_proc_write(struct file *file, const char __user *buffer,
|
|
|
|
size_t count, loff_t *ppos)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
|
2016-03-18 05:22:54 +08:00
|
|
|
rc = kstrtobool_from_user(buffer, count, &traceSMB);
|
2005-04-17 06:20:36 +08:00
|
|
|
if (rc)
|
|
|
|
return rc;
|
2014-08-27 21:49:42 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops traceSMB_proc_ops = {
|
|
|
|
.proc_open = traceSMB_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
.proc_write = traceSMB_proc_write,
|
2008-07-24 10:34:24 +08:00
|
|
|
};
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_security_flags_proc_show(struct seq_file *m, void *v)
|
|
|
|
{
|
2010-04-24 19:57:45 +08:00
|
|
|
seq_printf(m, "0x%x\n", global_secflags);
|
2008-07-24 10:34:24 +08:00
|
|
|
return 0;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static int cifs_security_flags_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, cifs_security_flags_proc_show, NULL);
|
2005-04-17 06:20:36 +08:00
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
2013-05-26 19:01:02 +08:00
|
|
|
/*
|
|
|
|
* Ensure that if someone sets a MUST flag, that we disable all other MAY
|
|
|
|
* flags except for the ones corresponding to the given MUST flag. If there are
|
|
|
|
* multiple MUST flags, then try to prefer more secure ones.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
cifs_security_flags_handle_must_flags(unsigned int *flags)
|
|
|
|
{
|
|
|
|
unsigned int signflags = *flags & CIFSSEC_MUST_SIGN;
|
|
|
|
|
|
|
|
if ((*flags & CIFSSEC_MUST_KRB5) == CIFSSEC_MUST_KRB5)
|
|
|
|
*flags = CIFSSEC_MUST_KRB5;
|
|
|
|
else if ((*flags & CIFSSEC_MUST_NTLMSSP) == CIFSSEC_MUST_NTLMSSP)
|
|
|
|
*flags = CIFSSEC_MUST_NTLMSSP;
|
|
|
|
else if ((*flags & CIFSSEC_MUST_NTLMV2) == CIFSSEC_MUST_NTLMV2)
|
|
|
|
*flags = CIFSSEC_MUST_NTLMV2;
|
|
|
|
|
|
|
|
*flags |= signflags;
|
|
|
|
}
|
|
|
|
|
2008-07-24 10:34:24 +08:00
|
|
|
static ssize_t cifs_security_flags_proc_write(struct file *file,
|
|
|
|
const char __user *buffer, size_t count, loff_t *ppos)
|
2005-04-17 06:20:36 +08:00
|
|
|
{
|
2013-05-26 19:01:01 +08:00
|
|
|
int rc;
|
2006-06-03 06:57:13 +08:00
|
|
|
unsigned int flags;
|
|
|
|
char flags_string[12];
|
2014-08-27 21:49:42 +08:00
|
|
|
bool bv;
|
2006-06-03 06:57:13 +08:00
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
if ((count < 1) || (count > 11))
|
2006-06-01 06:40:51 +08:00
|
|
|
return -EINVAL;
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2006-06-03 06:57:13 +08:00
|
|
|
memset(flags_string, 0, 12);
|
2006-06-01 06:40:51 +08:00
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
if (copy_from_user(flags_string, buffer, count))
|
2006-06-03 06:57:13 +08:00
|
|
|
return -EFAULT;
|
2006-06-01 06:40:51 +08:00
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
if (count < 3) {
|
2006-06-03 06:57:13 +08:00
|
|
|
/* single char or single char followed by null */
|
2023-01-14 16:58:15 +08:00
|
|
|
if (kstrtobool(flags_string, &bv) == 0) {
|
2014-08-27 21:49:42 +08:00
|
|
|
global_secflags = bv ? CIFSSEC_MAX : CIFSSEC_DEF;
|
2007-10-05 04:05:09 +08:00
|
|
|
return count;
|
2016-03-18 05:22:54 +08:00
|
|
|
} else if (!isdigit(flags_string[0])) {
|
2013-05-26 19:01:01 +08:00
|
|
|
cifs_dbg(VFS, "Invalid SecurityFlags: %s\n",
|
|
|
|
flags_string);
|
2007-10-05 04:05:09 +08:00
|
|
|
return -EINVAL;
|
|
|
|
}
|
2006-06-03 06:57:13 +08:00
|
|
|
}
|
|
|
|
|
2013-05-26 19:01:01 +08:00
|
|
|
/* else we have a number */
|
|
|
|
rc = kstrtouint(flags_string, 0, &flags);
|
|
|
|
if (rc) {
|
|
|
|
cifs_dbg(VFS, "Invalid SecurityFlags: %s\n",
|
|
|
|
flags_string);
|
|
|
|
return rc;
|
|
|
|
}
|
2006-06-03 06:57:13 +08:00
|
|
|
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(FYI, "sec flags 0x%x\n", flags);
|
2006-06-03 06:57:13 +08:00
|
|
|
|
2013-05-26 19:01:01 +08:00
|
|
|
if (flags == 0) {
|
|
|
|
cifs_dbg(VFS, "Invalid SecurityFlags: %s\n", flags_string);
|
2006-06-03 06:57:13 +08:00
|
|
|
return -EINVAL;
|
|
|
|
}
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2007-06-06 04:35:06 +08:00
|
|
|
if (flags & ~CIFSSEC_MASK) {
|
2013-05-26 19:01:01 +08:00
|
|
|
cifs_dbg(VFS, "Unsupported security flags: 0x%x\n",
|
2013-05-05 11:12:25 +08:00
|
|
|
flags & ~CIFSSEC_MASK);
|
2006-06-03 06:57:13 +08:00
|
|
|
return -EINVAL;
|
|
|
|
}
|
2013-05-26 19:01:01 +08:00
|
|
|
|
2013-05-26 19:01:02 +08:00
|
|
|
cifs_security_flags_handle_must_flags(&flags);
|
|
|
|
|
2006-06-03 06:57:13 +08:00
|
|
|
/* flags look ok - update the global security flags for cifs module */
|
2010-04-24 19:57:45 +08:00
|
|
|
global_secflags = flags;
|
|
|
|
if (global_secflags & CIFSSEC_MUST_SIGN) {
|
2007-06-29 02:41:42 +08:00
|
|
|
/* requiring signing implies signing is allowed */
|
2010-04-24 19:57:45 +08:00
|
|
|
global_secflags |= CIFSSEC_MAY_SIGN;
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(FYI, "packet signing now required\n");
|
2010-04-24 19:57:45 +08:00
|
|
|
} else if ((global_secflags & CIFSSEC_MAY_SIGN) == 0) {
|
2013-05-05 11:12:25 +08:00
|
|
|
cifs_dbg(FYI, "packet signing disabled\n");
|
2007-06-29 02:41:42 +08:00
|
|
|
}
|
|
|
|
/* BB should we turn on MAY flags for other MUST options? */
|
2005-04-17 06:20:36 +08:00
|
|
|
return count;
|
|
|
|
}
|
2008-07-24 10:34:24 +08:00
|
|
|
|
2020-02-04 09:37:17 +08:00
|
|
|
static const struct proc_ops cifs_security_flags_proc_ops = {
|
|
|
|
.proc_open = cifs_security_flags_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
.proc_write = cifs_security_flags_proc_write,
|
2008-07-24 10:34:24 +08:00
|
|
|
};
|
2021-03-18 20:52:59 +08:00
|
|
|
|
|
|
|
/* To make it easier to debug, can help to show mount params */
|
|
|
|
static int cifs_mount_params_proc_show(struct seq_file *m, void *v)
|
|
|
|
{
|
|
|
|
const struct fs_parameter_spec *p;
|
|
|
|
const char *type;
|
|
|
|
|
|
|
|
for (p = smb3_fs_parameters; p->name; p++) {
|
|
|
|
/* cannot use switch with pointers... */
|
|
|
|
if (!p->type) {
|
|
|
|
if (p->flags == fs_param_neg_with_no)
|
|
|
|
type = "noflag";
|
|
|
|
else
|
|
|
|
type = "flag";
|
|
|
|
} else if (p->type == fs_param_is_bool)
|
|
|
|
type = "bool";
|
|
|
|
else if (p->type == fs_param_is_u32)
|
|
|
|
type = "u32";
|
|
|
|
else if (p->type == fs_param_is_u64)
|
|
|
|
type = "u64";
|
|
|
|
else if (p->type == fs_param_is_string)
|
|
|
|
type = "string";
|
|
|
|
else
|
|
|
|
type = "unknown";
|
|
|
|
|
|
|
|
seq_printf(m, "%s:%s\n", p->name, type);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int cifs_mount_params_proc_open(struct inode *inode, struct file *file)
|
|
|
|
{
|
|
|
|
return single_open(file, cifs_mount_params_proc_show, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static const struct proc_ops cifs_mount_params_proc_ops = {
|
|
|
|
.proc_open = cifs_mount_params_proc_open,
|
|
|
|
.proc_read = seq_read,
|
|
|
|
.proc_lseek = seq_lseek,
|
|
|
|
.proc_release = single_release,
|
|
|
|
/* No need for write for now */
|
|
|
|
/* .proc_write = cifs_mount_params_proc_write, */
|
|
|
|
};
|
|
|
|
|
2008-02-13 04:32:36 +08:00
|
|
|
#else
|
2008-02-18 12:03:58 +08:00
|
|
|
inline void cifs_proc_init(void)
|
2008-02-13 04:32:36 +08:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2008-02-18 12:03:58 +08:00
|
|
|
inline void cifs_proc_clean(void)
|
2008-02-13 04:32:36 +08:00
|
|
|
{
|
|
|
|
}
|
|
|
|
#endif /* PROC_FS */
|