tcon->nativeFileSystem);
                                }
                                seq_printf(m, "DevInfo: 0x%x Attributes: 0x%x"
-                                       "\nPathComponentMax: %d Status: 0x%d",
+                                       "\n\tPathComponentMax: %d Status: 0x%d",
                                        le32_to_cpu(tcon->fsDevInfo.DeviceCharacteristics),
                                        le32_to_cpu(tcon->fsAttrInfo.Attributes),
                                        le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength),
                                        seq_puts(m, " type: CDROM ");
                                else
                                        seq_printf(m, " type: %d ", dev_type);
+                               if (server->ops->dump_share_caps)
+                                       server->ops->dump_share_caps(m, tcon);
 
                                if (tcon->need_reconnect)
                                        seq_puts(m, "\tDISCONNECTED ");
 
        void (*dump_detail)(void *);
        void (*clear_stats)(struct cifs_tcon *);
        void (*print_stats)(struct seq_file *m, struct cifs_tcon *);
+       void (*dump_share_caps)(struct seq_file *, struct cifs_tcon *);
        /* verify the message */
        int (*check_message)(char *, unsigned int);
        bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
 #ifdef CONFIG_CIFS_SMB2
        bool print:1;           /* set if connection to printer share */
        bool bad_network_name:1; /* set if ret status STATUS_BAD_NETWORK_NAME */
-       __u32 capabilities;
+       __le32 capabilities;
        __u32 share_flags;
        __u32 maximal_access;
        __u32 vol_serial_number;
 
 #endif
 }
 
+static void
+smb2_dump_share_caps(struct seq_file *m, struct cifs_tcon *tcon)
+{
+       seq_puts(m, "\n\tShare Capabilities:");
+       if (tcon->capabilities & SMB2_SHARE_CAP_DFS)
+               seq_puts(m, " DFS,");
+       if (tcon->capabilities & SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY)
+               seq_puts(m, " CONTINUOUS AVAILABILITY,");
+       if (tcon->capabilities & SMB2_SHARE_CAP_SCALEOUT)
+               seq_puts(m, " SCALEOUT,");
+       if (tcon->capabilities & SMB2_SHARE_CAP_CLUSTER)
+               seq_puts(m, " CLUSTER,");
+       if (tcon->capabilities & SMB2_SHARE_CAP_ASYMMETRIC)
+               seq_puts(m, " ASYMMETRIC,");
+       if (tcon->capabilities == 0)
+               seq_puts(m, " None");
+       seq_printf(m, "\tShare Flags: 0x%x", tcon->share_flags);
+}
+
 static void
 smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
 {
        .dump_detail = smb2_dump_detail,
        .clear_stats = smb2_clear_stats,
        .print_stats = smb2_print_stats,
+       .dump_share_caps = smb2_dump_share_caps,
        .is_oplock_break = smb2_is_valid_oplock_break,
        .need_neg = smb2_need_neg,
        .negotiate = smb2_negotiate,
 
        }
 
        tcon->share_flags = le32_to_cpu(rsp->ShareFlags);
+       tcon->capabilities = rsp->Capabilities; /* we keep caps little endian */
        tcon->maximal_access = le32_to_cpu(rsp->MaximalAccess);
        tcon->tidStatus = CifsGood;
        tcon->need_reconnect = false;