]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cifs: SMB1 split: Separate out SMB1 decls into smb1proto.h
authorDavid Howells <dhowells@redhat.com>
Wed, 17 Dec 2025 09:42:22 +0000 (09:42 +0000)
committerSteve French <stfrench@microsoft.com>
Sun, 8 Feb 2026 23:07:45 +0000 (17:07 -0600)
Separate out SMB1 declarations scriptedly into smb1proto.h.  Script below:

#!/usr/bin/perl -w
use strict;
unless (@ARGV) {
    die "Usage: $0 <c_file1> [<c_file2> ...]\n";
}

# Data tracking
my %funcs = (); # Func name => { func prototype }
my %headers = (); # Header filename => { header content }
my %c_files = (); # C filename => { ordered func list, header pref }
my %cmarkers = (); # C filename marker => { header filename it's in }

# Parse state
my $pathname = "-";
my $lineno = 0;

sub error(@) {
    print STDERR $pathname, ":", $lineno, ": ", @_, "\n";
    exit(1);
}

sub pad($) {
    # Reindent the function arguments to line the arguments up with the char
    # after the opening bracket on the func argument list
    my ($lines) = @_;
    return $lines if ($#{$lines} <= 0);
    my $has_empty = 0;
    for (my $i = 0; $i <= $#{$lines}; $i++) {
$lines->[$i] =~ s/^[ \t]+//;
$has_empty = 1 if ($lines->[$i] eq "");
    }

    if ($has_empty) {
my @clean = grep /.+/, @{$lines};
$lines = \@clean;
    }

    my $indlen = index($lines->[0], "(");
    return $lines if ($indlen < 0);
    my $indent = "";
    $indlen++;
    $indent .= "\t" x ($indlen / 8);
    $indent .= " " x ($indlen % 8);

    my @padded = ();
    my $acc = "";
    my $len = -$indlen;
    for (my $i = 0; $i <= $#{$lines}; $i++) {
my $argument = $lines->[$i];
my $arglen = length($argument);
my $last = ($i == $#{$lines} ? 1 : 0);

if ($i == 0 ||
    $i == 1) {
    $acc .= $argument;
    $acc .= ";" if ($last);
    $len += $arglen + $last;
    next;
}
if (!$acc) {
    $acc = $indent . $argument;
    $acc .= ";" if ($last);
    $len += $arglen + $last;
    next;
}
if ($indlen + $len + 1 + $arglen + $last > 79) {
    push @padded, $acc;
    $acc = $indent . $argument;
    $acc .= ";" if ($last);
    $len = $arglen + $last;
    next;
}

$acc .= " " . $argument;
$acc .= ";" if ($last);
$len += 1 + $arglen + $last;
    }
    push @padded, $acc if ($acc);
    return \@padded;
}

sub earliest(@) {
    my $ret = -1;
    foreach (@_) {
$ret = $_ if ($ret < 0 || ($_ >= 0 && $_ < $ret));
    }
    return $ret;
}

foreach my $file (@ARGV) {
    # Open the file for reading.
    next if $file =~ /trace[.]h$/;
    next if $file =~ /smbdirect[.][ch]$/;
    open my $fh, "<$file"
or die "Could not open file '$file'";
    $pathname = $file;
    $lineno = 0;

    my $filename;
    my @file_content = ();
    my @copy = ();

    my $state = 0;
    my $qual = "";
    my $type = "";
    my $funcname = "";
    my @funcdef = ();
    my $bracket = 0;
    my $comment = 0;
    my $smb1 = 0;
    my $header = 0;
    my $inline = 0;
    my $file_marker = "";
    my $config = "";
    my $c_file = 0;

    $filename = $pathname;
    $filename =~ s!.*/!!;

    if ($file =~ m!.h$!) {
my %new_h_file = (
    path    => $pathname,
    fname   => $filename,
    content => [],
    );
$header = \%new_h_file;
$headers{$filename} = \%new_h_file;
    } elsif ($file =~ m!.c$!) {
my %new_c_file = (
    path  => $pathname,
    fname => $filename,
    funcs => [],
    );
$c_file = \%new_c_file;
$c_files{$filename} = \%new_c_file;
    } else {
warn("Ignoring unexpected file $file\n");
next;
    }

    $smb1 = 1 if ($file =~ m!/smb1ops.c|/cifssmb.c|/cifstransport.c!);

    foreach my $line (<$fh>) {
$lineno++;
chomp($line);
push @copy, $line;
if (!$line) {
    # Blank line
    push @file_content, @copy;
    @copy = ();
    next;
}

# Handle continuation or end of block comment.  Look for C file
# prototype insertion point markers.
if ($comment) {
    if ($line =~ m![*]/!) {
if ($comment == 2 && $file_marker) {
    $cmarkers{$file_marker} = $file_marker;
    push @copy, "#C_MARKER " . $file_marker;
    $file_marker = 0;
}
$comment = 0;
    } else {
$comment++;
if ($comment == 2 && $line =~ m! [*] ([a-z][a-z_0-9]*[.][c])$!) {
    $file_marker = $1;
    print("Found file marker ", $file_marker, " in ", $filename, "\n");
}
    }
    push @file_content, @copy;
    @copy = ();
    next;
}

# Check cpp directives, particularly looking for SMB1 bits
if ($line =~ /^[#]/) {
    if ($header) {
if ($line =~ /ifdef.*(CONFIG_[A-Z0-9_])/) {
    error("multiconfig") if $config;
    $config = $1;
    $smb1++ if ($config eq "CONFIG_CIFS_ALLOW_INSECURE_LEGACY");
} elsif ($line =~ /endif/) {
    $smb1-- if ($config eq "CONFIG_CIFS_ALLOW_INSECURE_LEGACY");
    $config = "";
}
    }
    push @file_content, @copy;
    @copy = ();
    next;
}

# Exclude interference in finding func names and return types
if ($line =~ /^[{]/ ||
    $line =~ /##/ ||
    $line =~ /^[_a-z0-9A-Z]+:$/ || # goto label
    $line =~ /^do [{]/ ||
    $line =~ m!^//!) {
    push @file_content, @copy;
    @copy = ();
    next;
}

# Start of a block comment
if ($line =~ m!^/[*]!) {
    $comment = 1 unless ($line =~ m![*]/!);
    push @file_content, @copy;
    @copy = ();
    next;
}

# End of a braced section, such as a function implementation
if ($line =~ /^[}]/) {
$type = "";
$qual = "";
$funcname = "";
@funcdef = ();
push @file_content, @copy;
@copy = ();
next;
}

if ($line =~ /^typedef/) {
    $type = "";
    $qual = "";
    $funcname = "";
    @funcdef = ();
    push @file_content, @copy;
    @copy = ();
    next;
}

# Extract function qualifiers.  There may be multiple of these in more
# or less any order.  Some of them cause the func to be skipped (e.g. inline).

if ($line =~ /^(static|extern|inline|noinline|noinline_for_stack|__always_inline)\W/ ||
    $line =~ /^(static|extern|inline|noinline|noinline_for_stack|__always_inline)$/) {
    error("Unexpected qualifier '$1'") if ($state != 0);
    while ($line =~ /^(static|extern|inline|noinline|noinline_for_stack|__always_inline)\W/ ||
   $line =~ /^(static|extern|inline|noinline|noinline_for_stack|__always_inline)$/) {
$qual .= " " if ($qual);
$qual .= $1;
$inline = 1 if ($1 eq "inline");
$inline = 1 if ($1 eq "__always_inline");
$line = substr($line, length($1));
$line =~ s/^\s+//;
    }
}

if ($state == 0) {
    # Extract what we assume to be the return type
    if ($line =~ /^\s/) {
push @file_content, @copy;
@copy = ();
next;
    }
    while ($line =~ /^(unsigned|signed|bool|char|short|int|long|void|const|volatile|(struct|union|enum)\s+[_a-zA-Z][_a-zA-Z0-9]*|[*]|__init|__exit|__le16|__le32|__le64|__be16|__be32|__be64)/) {
$type .= " " if $type;
$type .= $1;
$line = substr($line, length($1));
$line =~ s/^\s+//;
    }
    if ($line =~ /^struct [{]/) {
# Ignore structure definitions
$type = "";
$qual = "";
$funcname = "";
@funcdef = ();
push @file_content, @copy;
@copy = ();
next;
    }
    if (index($line, "=") >= 0) {
# Ignore assignments
$type = "";
$qual = "";
$funcname = "";
@funcdef = "";
push @file_content, @copy;
@copy = ();
next;
    }

    # Try and extract a function's type and name
    while ($line =~ /(^[_a-zA-Z][_a-zA-Z0-9]*)/) {
my $name = $1;
$line = substr($line, length($name));
next if ($line =~ /^[{]/);
$line =~ s/^\s+//;

my $ch = substr($line, 0, 1);
last if ($ch eq "[" || $ch eq ";"); # Global variables

if ($ch eq "(") {
    # Found the function name
    $state = 1;
    $line = substr($line, 1);
    $funcname = $name;
    my $tmp = $qual . $type . " " . $funcname . "(";
    $tmp =~ s/[*] /*/;
    push @funcdef, $tmp;
    $bracket = 1;
    last;
}

if ($type) {
    last if (index($line, ";") >= 0 && index($line, "(") == -1);
    error("Unexpected name '$name' after '$type'");
}

$type .= " " if $type;
$type .= $name;
if ($line =~ /^(\s*[*]+)/) {
    my $ptr = $1;
    $type .= $ptr;
    $line = substr($line, length($ptr));
}
    }
}

# Try and extract a function's argument list
my $from = 0;
if ($state == 1) {
    while (1) {
my $o = index($line, "(", $from);
my $c = index($line, ")", $from);
my $m = index($line, ",", $from);

my $b = earliest($o, $c, $m);
if ($b < 0) {
    push @funcdef, $line
unless ($line eq "");
    last;
}
my $ch = substr($line, $b, 1);

# Push the arguments separately on to the list
if ($ch eq ",") {
    push @funcdef, substr($line, 0, $b + 1);
    $line = substr($line, $b + 1);
    $from = 0;
} elsif ($ch eq "(") {
    # Handle brackets in the argument list (e.g. function
    # pointers)
    $bracket++;
    $from = $b + 1;
} elsif ($ch eq ")") {
    $bracket--;
    if ($bracket == 0) {
push @funcdef, substr($line, 0, $b + 1);
$line = substr($line, $b + 1);
$state = 2;
last;
    }
    $from = $b + 1;
}
    }
}

if ($state == 2) {
    $inline = 1 if ($qual =~ /inline/);
    #print("QUAL $qual $type $funcname $inline ", $#funcdef, "\n");
    if (!$header &&
$qual !~ /static/ &&
$funcname ne "__acquires" &&
$funcname ne "__releases" &&
$funcname ne "module_init" &&
$funcname ne "module_exit" &&
$funcname ne "module_param" &&
$funcname ne "module_param_call" &&
$funcname ne "PROC_FILE_DEFINE" &&
$funcname !~ /MODULE_/ &&
$funcname !~ /DEFINE_/) {

# Okay, we appear to have a function implementation
my $func;
my $dup = 0;

if (exists($funcs{$funcname})) {
    $func = $funcs{$funcname};
    if (exists $func->{body}) {
print("dup $funcname\n");
$dup = 1;
    }
} else {
    my %new_func = (
name => $funcname,
cond => "",
legacy => 0,
);
    $func = \%new_func;
    $funcs{$funcname} = $func;
    $func->{body} = pad(\@funcdef);
}
$func->{body} = pad(\@funcdef);
$func->{legacy} = 1 if $smb1;

if ($funcname eq "cifs_inval_name_dfs_link_error") {
    $func->{cond} = "#ifdef CONFIG_CIFS_DFS_UPCALL";
} elsif ($funcname eq "cifs_listxattr") {
    $func->{cond} = "#ifdef CONFIG_CIFS_XATTR";
}

push @{$c_file->{funcs}}, $func
    unless $dup;
    } elsif (!$header || $inline) {
# Ignore inline function implementations and other weirdies
push @file_content, @copy;
    } elsif ($header && !$inline) {
push @file_content, "#FUNCPROTO " . $funcname;

my $func;

if (exists($funcs{$funcname})) {
    $func = $funcs{$funcname};
    $func->{lineno} = $lineno;
    $func->{pathname} = $pathname;
} else {
    my %new_func = (
name => $funcname,
cond => "",
lineno => $lineno,
pathname => $pathname,
legacy => 0,
);
    $func = \%new_func;
    $funcs{$funcname} = $func;
}

$func->{legacy} = 1 if $smb1;
    }

    @funcdef = ();
    $type = "";
    $qual = "";
    $funcname = "";
    $inline = 0;
    $state = 0;
    @copy = ();
}
if ($line =~ /;/) {
    $type = "";
    $qual = "";
    $funcname = "";
    @funcdef = ();
    $state = 0;
    push @file_content, @copy;
    @copy = ();
}
    }
    close($fh);

    if ($header) {
$header->{content} = \@file_content;
    }
}

sub write_header($)
{
    my ($header) = @_;
    my $path = $header->{path};
    my $legacy = 0;

    $legacy = 1 if ($path =~ m!smb1proto[.]h!);

    my @output = ();

    foreach my $line (@{$header->{content}}) {
if ($line =~ "^[#]C_MARKER (.*)") {
    my $file_marker = $cmarkers{$1};
    my $c_file = $c_files{$file_marker};
    print("Found $line\n");
    foreach my $func (@{$c_file->{funcs}}) {
print("func ", $func->{name}, "\n");
push @output, @{$func->{body}};
    }
    next;
} elsif ($line =~ "^[#]FUNCPROTO ([_a-zA-Z0-9]+)") {
    my $funcname = $1;
    my $func = $funcs{$funcname};
    if (!$func->{body}) {
print($func->{pathname}, ":", $func->{lineno}, ": '", $funcname,
      "' dead prototype\n");
next;
    }
    if ($func->{legacy} == $legacy) {
#push @output, $line;
push @output, @{$func->{body}};
    }
} else {
    push @output, $line;
}
    }

    open my $fh, ">$path"
or die "Could not open file '$path' for writing";
    foreach my $f (@output) {
print($fh $f, "\n") or die $path;
    }
    close($fh) or die $path;
}

foreach my $h (keys(%headers)) {
    write_header($headers{$h});
}

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Steve French <sfrench@samba.org>
cc: Paulo Alcantara <pc@manguebit.org>
cc: Enzo Matsumiya <ematsumiya@suse.de>
cc: linux-cifs@vger.kernel.org
cc: linux-fsdevel@vger.kernel.org
cc: linux-kernel@vger.kernel.org
Acked-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/cifsproto.h
fs/smb/client/fscache.h
fs/smb/client/smb1proto.h

index 6454c584772425a47b98f8cabd67c06f14c0764f..b151796b3ba5f7df169d6d33195b4f1a1560d8b7 100644 (file)
@@ -105,23 +105,10 @@ int compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
                       struct TCP_Server_Info *server, const int flags,
                       const int num_rqst, struct smb_rqst *rqst,
                       int *resp_buf_type, struct kvec *resp_iov);
-int SendReceive(const unsigned int xid, struct cifs_ses *ses,
-               struct smb_hdr *in_buf, unsigned int in_len,
-               struct smb_hdr *out_buf, int *pbytes_returned,
-               const int flags);
-int SendReceiveNoRsp(const unsigned int xid, struct cifs_ses *ses,
-                    char *in_buf, unsigned int in_len, int flags);
 int cifs_sync_mid_result(struct mid_q_entry *mid,
                         struct TCP_Server_Info *server);
-struct mid_q_entry *cifs_setup_request(struct cifs_ses *ses,
-                                      struct TCP_Server_Info *server,
-                                      struct smb_rqst *rqst);
-struct mid_q_entry *cifs_setup_async_request(struct TCP_Server_Info *server,
-                                            struct smb_rqst *rqst);
 int __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
                    struct smb_rqst *rqst);
-int cifs_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server,
-                      bool log_error);
 int wait_for_free_request(struct TCP_Server_Info *server, const int flags,
                          unsigned int *instance);
 int cifs_wait_mtu_credits(struct TCP_Server_Info *server, size_t size,
@@ -137,9 +124,6 @@ send_cancel(struct cifs_ses *ses, struct TCP_Server_Info *server,
 }
 
 int wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *mid);
-int SendReceive2(const unsigned int xid, struct cifs_ses *ses,
-                struct kvec *iov, int n_vec, int *resp_buf_type /* ret */,
-                const int flags, struct kvec *resp_iov);
 
 void smb2_query_server_interfaces(struct work_struct *work);
 void cifs_signal_cifsd_for_reconnect(struct TCP_Server_Info *server,
@@ -178,8 +162,6 @@ int map_and_check_smb_error(struct TCP_Server_Info *server,
 unsigned int header_assemble(struct smb_hdr *buffer, char smb_command,
                             const struct cifs_tcon *treeCon, int word_count
                             /* length of fixed section (word count) in two byte units  */);
-int small_smb_init_no_tc(const int smb_command, const int wct,
-                        struct cifs_ses *ses, void **request_buf);
 int CIFS_SessSetup(const unsigned int xid, struct cifs_ses *ses,
                   struct TCP_Server_Info *server,
                   const struct nls_table *nls_cp);
@@ -321,46 +303,15 @@ int cifs_setup_session(const unsigned int xid, struct cifs_ses *ses,
                       struct nls_table *nls_info);
 int cifs_enable_signing(struct TCP_Server_Info *server,
                        bool mnt_sign_required);
-int CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses,
-                    struct TCP_Server_Info *server);
 
 int CIFSTCon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
             struct cifs_tcon *tcon, const struct nls_table *nls_codepage);
 
-int CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon,
-                 const char *searchName, struct cifs_sb_info *cifs_sb,
-                 __u16 *pnetfid, __u16 search_flags,
-                 struct cifs_search_info *psrch_inf, bool msearch);
-
-int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon,
-                __u16 searchHandle, __u16 search_flags,
-                struct cifs_search_info *psrch_inf);
-
-int CIFSFindClose(const unsigned int xid, struct cifs_tcon *tcon,
-                 const __u16 searchHandle);
-
-int CIFSSMBQFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                    u16 netfid, FILE_ALL_INFO *pFindData);
-int CIFSSMBQPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                    const char *search_name, FILE_ALL_INFO *data,
-                    int legacy /* old style infolevel */,
-                    const struct nls_table *nls_codepage, int remap);
-int SMBQueryInformation(const unsigned int xid, struct cifs_tcon *tcon,
-                       const char *search_name, FILE_ALL_INFO *data,
-                       const struct nls_table *nls_codepage, int remap);
-
-int CIFSSMBUnixQFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                        u16 netfid, FILE_UNIX_BASIC_INFO *pFindData);
-int CIFSSMBUnixQPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                        const unsigned char *searchName,
-                        FILE_UNIX_BASIC_INFO *pFindData,
-                        const struct nls_table *nls_codepage, int remap);
-
-int CIFSGetDFSRefer(const unsigned int xid, struct cifs_ses *ses,
-                   const char *search_name,
-                   struct dfs_info3_param **target_nodes,
-                   unsigned int *num_of_nodes,
-                   const struct nls_table *nls_codepage, int remap);
+
+
+
+
+
 
 int parse_dfs_referrals(struct get_dfs_referral_rsp *rsp, u32 rsp_size,
                        unsigned int *num_of_nodes,
@@ -370,138 +321,14 @@ int parse_dfs_referrals(struct get_dfs_referral_rsp *rsp, u32 rsp_size,
 void reset_cifs_unix_caps(unsigned int xid, struct cifs_tcon *tcon,
                          struct cifs_sb_info *cifs_sb,
                          struct smb3_fs_context *ctx);
-int CIFSSMBQFSInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                  struct kstatfs *FSData);
-int SMBOldQFSInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                 struct kstatfs *FSData);
-int CIFSSMBSetFSUnixInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                        __u64 cap);
-
-int CIFSSMBQFSAttributeInfo(const unsigned int xid, struct cifs_tcon *tcon);
-int CIFSSMBQFSDeviceInfo(const unsigned int xid, struct cifs_tcon *tcon);
-int CIFSSMBQFSUnixInfo(const unsigned int xid, struct cifs_tcon *tcon);
-int CIFSSMBQFSPosixInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                       struct kstatfs *FSData);
-
-int SMBSetInformation(const unsigned int xid, struct cifs_tcon *tcon,
-                     const char *fileName, __le32 attributes,
-                     __le64 write_time, const struct nls_table *nls_codepage,
-                     struct cifs_sb_info *cifs_sb);
-int CIFSSMBSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                      const char *fileName, const FILE_BASIC_INFO *data,
-                      const struct nls_table *nls_codepage,
-                      struct cifs_sb_info *cifs_sb);
-int CIFSSMBSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                      const FILE_BASIC_INFO *data, __u16 fid,
-                      __u32 pid_of_opener);
-int CIFSSMBSetFileDisposition(const unsigned int xid, struct cifs_tcon *tcon,
-                             bool delete_file, __u16 fid,
-                             __u32 pid_of_opener);
-int CIFSSMBSetEOF(const unsigned int xid, struct cifs_tcon *tcon,
-                 const char *file_name, __u64 size,
-                 struct cifs_sb_info *cifs_sb, bool set_allocation,
-                 struct dentry *dentry);
-int CIFSSMBSetFileSize(const unsigned int xid, struct cifs_tcon *tcon,
-                      struct cifsFileInfo *cfile, __u64 size,
-                      bool set_allocation);
-
-int CIFSSMBUnixSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                          const struct cifs_unix_set_info_args *args, u16 fid,
-                          u32 pid_of_opener);
-
-int CIFSSMBUnixSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
-                          const char *file_name,
-                          const struct cifs_unix_set_info_args *args,
-                          const struct nls_table *nls_codepage, int remap);
-
-int CIFSSMBMkDir(const unsigned int xid, struct inode *inode, umode_t mode,
-                struct cifs_tcon *tcon, const char *name,
-                struct cifs_sb_info *cifs_sb);
-int CIFSSMBRmDir(const unsigned int xid, struct cifs_tcon *tcon,
-                const char *name, struct cifs_sb_info *cifs_sb);
-int CIFSPOSIXDelFile(const unsigned int xid, struct cifs_tcon *tcon,
-                    const char *fileName, __u16 type,
-                    const struct nls_table *nls_codepage, int remap);
-int CIFSSMBDelFile(const unsigned int xid, struct cifs_tcon *tcon,
-                  const char *name, struct cifs_sb_info *cifs_sb,
-                  struct dentry *dentry);
-int CIFSSMBRename(const unsigned int xid, struct cifs_tcon *tcon,
-                 struct dentry *source_dentry, const char *from_name,
-                 const char *to_name, struct cifs_sb_info *cifs_sb);
-int CIFSSMBRenameOpenFile(const unsigned int xid, struct cifs_tcon *pTcon,
-                         int netfid, const char *target_name,
-                         const struct nls_table *nls_codepage, int remap);
-int CIFSCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
-                      struct dentry *source_dentry, const char *from_name,
-                      const char *to_name, struct cifs_sb_info *cifs_sb);
-int CIFSUnixCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
-                          const char *fromName, const char *toName,
-                          const struct nls_table *nls_codepage, int remap);
-int CIFSUnixCreateSymLink(const unsigned int xid, struct cifs_tcon *tcon,
-                         const char *fromName, const char *toName,
-                         const struct nls_table *nls_codepage, int remap);
-int CIFSSMBUnixQuerySymLink(const unsigned int xid, struct cifs_tcon *tcon,
-                           const unsigned char *searchName,
-                           char **symlinkinfo,
-                           const struct nls_table *nls_codepage, int remap);
-int cifs_query_reparse_point(const unsigned int xid, struct cifs_tcon *tcon,
-                            struct cifs_sb_info *cifs_sb,
-                            const char *full_path, u32 *tag, struct kvec *rsp,
-                            int *rsp_buftype);
-struct inode *cifs_create_reparse_inode(struct cifs_open_info_data *data,
-                                       struct super_block *sb,
-                                       const unsigned int xid,
-                                       struct cifs_tcon *tcon,
-                                       const char *full_path, bool directory,
-                                       struct kvec *reparse_iov,
-                                       struct kvec *xattr_iov);
-int CIFSSMB_set_compression(const unsigned int xid, struct cifs_tcon *tcon,
-                           __u16 fid);
-int CIFS_open(const unsigned int xid, struct cifs_open_parms *oparms,
-             int *oplock, FILE_ALL_INFO *buf);
-int SMBLegacyOpen(const unsigned int xid, struct cifs_tcon *tcon,
-                 const char *fileName, const int openDisposition,
-                 const int access_flags, const int create_options,
-                 __u16 *netfid, int *pOplock, FILE_ALL_INFO *pfile_info,
-                 const struct nls_table *nls_codepage, int remap);
-int CIFSPOSIXCreate(const unsigned int xid, struct cifs_tcon *tcon,
-                   __u32 posix_flags, __u64 mode, __u16 *netfid,
-                   FILE_UNIX_BASIC_INFO *pRetData, __u32 *pOplock,
-                   const char *name, const struct nls_table *nls_codepage,
-                   int remap);
-int CIFSSMBClose(const unsigned int xid, struct cifs_tcon *tcon,
-                int smb_file_id);
-
-int CIFSSMBFlush(const unsigned int xid, struct cifs_tcon *tcon,
-                int smb_file_id);
-
-int CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
-               unsigned int *nbytes, char **buf, int *pbuf_type);
-int CIFSSMBWrite(const unsigned int xid, struct cifs_io_parms *io_parms,
-                unsigned int *nbytes, const char *buf);
-int CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms,
-                 unsigned int *nbytes, struct kvec *iov, int n_vec);
-int CIFSGetSrvInodeNumber(const unsigned int xid, struct cifs_tcon *tcon,
-                         const char *search_name, __u64 *inode_number,
-                         const struct nls_table *nls_codepage, int remap);
-
-int cifs_lockv(const unsigned int xid, struct cifs_tcon *tcon,
-              const __u16 netfid, const __u8 lock_type,
-              const __u32 num_unlock, const __u32 num_lock,
-              LOCKING_ANDX_RANGE *buf);
-int CIFSSMBLock(const unsigned int xid, struct cifs_tcon *tcon,
-               const __u16 smb_file_id, const __u32 netpid, const __u64 len,
-               const __u64 offset, const __u32 numUnlock, const __u32 numLock,
-               const __u8 lockType, const bool waitFlag,
-               const __u8 oplock_level);
-int CIFSSMBPosixLock(const unsigned int xid, struct cifs_tcon *tcon,
-                    const __u16 smb_file_id, const __u32 netpid,
-                    const loff_t start_offset, const __u64 len,
-                    struct file_lock *pLockData, const __u16 lock_type,
-                    const bool waitFlag);
-int CIFSSMBTDis(const unsigned int xid, struct cifs_tcon *tcon);
-int CIFSSMBEcho(struct TCP_Server_Info *server);
-int CIFSSMBLogoff(const unsigned int xid, struct cifs_ses *ses);
+
+
+
+
+
+
+
+
 
 struct cifs_ses *sesInfoAlloc(void);
 void sesInfoFree(struct cifs_ses *buf_to_free);
@@ -523,31 +350,6 @@ int generate_smb311signingkey(struct cifs_ses *ses,
                              struct TCP_Server_Info *server);
 
 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
-ssize_t CIFSSMBQAllEAs(const unsigned int xid, struct cifs_tcon *tcon,
-                      const unsigned char *searchName,
-                      const unsigned char *ea_name, char *EAData,
-                      size_t buf_size, struct cifs_sb_info *cifs_sb);
-int CIFSSMBSetEA(const unsigned int xid, struct cifs_tcon *tcon,
-                const char *fileName, const char *ea_name,
-                const void *ea_value, const __u16 ea_value_len,
-                const struct nls_table *nls_codepage,
-                struct cifs_sb_info *cifs_sb);
-int CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon,
-                     __u16 fid, struct smb_ntsd **acl_inf, __u32 *pbuflen,
-                     __u32 info);
-int CIFSSMBSetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon,
-                     __u16 fid, struct smb_ntsd *pntsd, __u32 acllen,
-                     int aclflag);
-int cifs_do_get_acl(const unsigned int xid, struct cifs_tcon *tcon,
-                   const unsigned char *searchName, struct posix_acl **acl,
-                   const int acl_type, const struct nls_table *nls_codepage,
-                   int remap);
-int cifs_do_set_acl(const unsigned int xid, struct cifs_tcon *tcon,
-                   const unsigned char *fileName, const struct posix_acl *acl,
-                   const int acl_type, const struct nls_table *nls_codepage,
-                   int remap);
-int CIFSGetExtAttr(const unsigned int xid, struct cifs_tcon *tcon,
-                  const int netfid, __u64 *pExtAttrBits, __u64 *pMask);
 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
 void cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb);
 bool couldbe_mf_symlink(const struct cifs_fattr *fattr);
@@ -566,11 +368,9 @@ void __cifs_put_smb_ses(struct cifs_ses *ses);
 struct cifs_ses *cifs_get_smb_ses(struct TCP_Server_Info *server,
                                  struct smb3_fs_context *ctx);
 
-int cifs_async_readv(struct cifs_io_subrequest *rdata);
 int cifs_readv_receive(struct TCP_Server_Info *server,
                       struct mid_q_entry *mid);
 
-void cifs_async_writev(struct cifs_io_subrequest *wdata);
 int cifs_query_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,
                          struct cifs_sb_info *cifs_sb,
                          const unsigned char *path, char *pbuf,
index b6c94db5edb94ab4f2c5cd4d0f48ce7b86fa243f..3521222886c19ac50aa75145be5aa5a61cfebc74 100644 (file)
@@ -40,6 +40,11 @@ struct cifs_fscache_inode_coherency_data {
  */
 int cifs_fscache_get_super_cookie(struct cifs_tcon *tcon);
 void cifs_fscache_release_super_cookie(struct cifs_tcon *tcon);
+void cifs_fscache_get_inode_cookie(struct inode *inode);
+void cifs_fscache_unuse_inode_cookie(struct inode *inode, bool update);
+void cifs_fscache_release_inode_cookie(struct inode *inode);
+int cifs_fscache_get_super_cookie(struct cifs_tcon *tcon);
+void cifs_fscache_release_super_cookie(struct cifs_tcon *tcon);
 
 void cifs_fscache_get_inode_cookie(struct inode *inode);
 void cifs_fscache_release_inode_cookie(struct inode *inode);
index a73213f6a2aa100dfd38d515c893aa9a2fa6f3d0..cb8fa65674cdb06bbb7d77f4e48fb4a58099c052 100644 (file)
@@ -23,6 +23,190 @@ struct cifs_unix_set_info_args {
 /*
  * cifssmb.c
  */
+int small_smb_init_no_tc(const int smb_command, const int wct,
+                        struct cifs_ses *ses, void **request_buf);
+int CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses *ses,
+                    struct TCP_Server_Info *server);
+int CIFSSMBTDis(const unsigned int xid, struct cifs_tcon *tcon);
+int CIFSSMBEcho(struct TCP_Server_Info *server);
+int CIFSSMBLogoff(const unsigned int xid, struct cifs_ses *ses);
+int CIFSPOSIXDelFile(const unsigned int xid, struct cifs_tcon *tcon,
+                    const char *fileName, __u16 type,
+                    const struct nls_table *nls_codepage, int remap);
+int CIFSSMBDelFile(const unsigned int xid, struct cifs_tcon *tcon,
+                  const char *name, struct cifs_sb_info *cifs_sb,
+                  struct dentry *dentry);
+int CIFSSMBRmDir(const unsigned int xid, struct cifs_tcon *tcon,
+                const char *name, struct cifs_sb_info *cifs_sb);
+int CIFSSMBMkDir(const unsigned int xid, struct inode *inode, umode_t mode,
+                struct cifs_tcon *tcon, const char *name,
+                struct cifs_sb_info *cifs_sb);
+int CIFSPOSIXCreate(const unsigned int xid, struct cifs_tcon *tcon,
+                   __u32 posix_flags, __u64 mode, __u16 *netfid,
+                   FILE_UNIX_BASIC_INFO *pRetData, __u32 *pOplock,
+                   const char *name, const struct nls_table *nls_codepage,
+                   int remap);
+int SMBLegacyOpen(const unsigned int xid, struct cifs_tcon *tcon,
+                 const char *fileName, const int openDisposition,
+                 const int access_flags, const int create_options,
+                 __u16 *netfid, int *pOplock, FILE_ALL_INFO *pfile_info,
+                 const struct nls_table *nls_codepage, int remap);
+int CIFS_open(const unsigned int xid, struct cifs_open_parms *oparms,
+             int *oplock, FILE_ALL_INFO *buf);
+int cifs_async_readv(struct cifs_io_subrequest *rdata);
+int CIFSSMBRead(const unsigned int xid, struct cifs_io_parms *io_parms,
+               unsigned int *nbytes, char **buf, int *pbuf_type);
+int CIFSSMBWrite(const unsigned int xid, struct cifs_io_parms *io_parms,
+                unsigned int *nbytes, const char *buf);
+void cifs_async_writev(struct cifs_io_subrequest *wdata);
+int CIFSSMBWrite2(const unsigned int xid, struct cifs_io_parms *io_parms,
+                 unsigned int *nbytes, struct kvec *iov, int n_vec);
+int cifs_lockv(const unsigned int xid, struct cifs_tcon *tcon,
+              const __u16 netfid, const __u8 lock_type,
+              const __u32 num_unlock, const __u32 num_lock,
+              LOCKING_ANDX_RANGE *buf);
+int CIFSSMBLock(const unsigned int xid, struct cifs_tcon *tcon,
+               const __u16 smb_file_id, const __u32 netpid, const __u64 len,
+               const __u64 offset, const __u32 numUnlock, const __u32 numLock,
+               const __u8 lockType, const bool waitFlag,
+               const __u8 oplock_level);
+int CIFSSMBPosixLock(const unsigned int xid, struct cifs_tcon *tcon,
+                    const __u16 smb_file_id, const __u32 netpid,
+                    const loff_t start_offset, const __u64 len,
+                    struct file_lock *pLockData, const __u16 lock_type,
+                    const bool waitFlag);
+int CIFSSMBClose(const unsigned int xid, struct cifs_tcon *tcon,
+                int smb_file_id);
+int CIFSSMBFlush(const unsigned int xid, struct cifs_tcon *tcon,
+                int smb_file_id);
+int CIFSSMBRename(const unsigned int xid, struct cifs_tcon *tcon,
+                 struct dentry *source_dentry, const char *from_name,
+                 const char *to_name, struct cifs_sb_info *cifs_sb);
+int CIFSSMBRenameOpenFile(const unsigned int xid, struct cifs_tcon *pTcon,
+                         int netfid, const char *target_name,
+                         const struct nls_table *nls_codepage, int remap);
+int CIFSUnixCreateSymLink(const unsigned int xid, struct cifs_tcon *tcon,
+                         const char *fromName, const char *toName,
+                         const struct nls_table *nls_codepage, int remap);
+int CIFSUnixCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
+                          const char *fromName, const char *toName,
+                          const struct nls_table *nls_codepage, int remap);
+int CIFSCreateHardLink(const unsigned int xid, struct cifs_tcon *tcon,
+                      struct dentry *source_dentry, const char *from_name,
+                      const char *to_name, struct cifs_sb_info *cifs_sb);
+int CIFSSMBUnixQuerySymLink(const unsigned int xid, struct cifs_tcon *tcon,
+                           const unsigned char *searchName,
+                           char **symlinkinfo,
+                           const struct nls_table *nls_codepage, int remap);
+int cifs_query_reparse_point(const unsigned int xid, struct cifs_tcon *tcon,
+                            struct cifs_sb_info *cifs_sb,
+                            const char *full_path, u32 *tag, struct kvec *rsp,
+                            int *rsp_buftype);
+struct inode *cifs_create_reparse_inode(struct cifs_open_info_data *data,
+                                       struct super_block *sb,
+                                       const unsigned int xid,
+                                       struct cifs_tcon *tcon,
+                                       const char *full_path, bool directory,
+                                       struct kvec *reparse_iov,
+                                       struct kvec *xattr_iov);
+int CIFSSMB_set_compression(const unsigned int xid, struct cifs_tcon *tcon,
+                           __u16 fid);
+int cifs_do_get_acl(const unsigned int xid, struct cifs_tcon *tcon,
+                   const unsigned char *searchName, struct posix_acl **acl,
+                   const int acl_type, const struct nls_table *nls_codepage,
+                   int remap);
+int cifs_do_set_acl(const unsigned int xid, struct cifs_tcon *tcon,
+                   const unsigned char *fileName, const struct posix_acl *acl,
+                   const int acl_type, const struct nls_table *nls_codepage,
+                   int remap);
+int CIFSGetExtAttr(const unsigned int xid, struct cifs_tcon *tcon,
+                  const int netfid, __u64 *pExtAttrBits, __u64 *pMask);
+int CIFSSMBGetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon,
+                     __u16 fid, struct smb_ntsd **acl_inf, __u32 *pbuflen,
+                     __u32 info);
+int CIFSSMBSetCIFSACL(const unsigned int xid, struct cifs_tcon *tcon,
+                     __u16 fid, struct smb_ntsd *pntsd, __u32 acllen,
+                     int aclflag);
+int SMBQueryInformation(const unsigned int xid, struct cifs_tcon *tcon,
+                       const char *search_name, FILE_ALL_INFO *data,
+                       const struct nls_table *nls_codepage, int remap);
+int CIFSSMBQFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                    u16 netfid, FILE_ALL_INFO *pFindData);
+int CIFSSMBQPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                    const char *search_name, FILE_ALL_INFO *data,
+                    int legacy /* old style infolevel */,
+                    const struct nls_table *nls_codepage, int remap);
+int CIFSSMBUnixQFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                        u16 netfid, FILE_UNIX_BASIC_INFO *pFindData);
+int CIFSSMBUnixQPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                        const unsigned char *searchName,
+                        FILE_UNIX_BASIC_INFO *pFindData,
+                        const struct nls_table *nls_codepage, int remap);
+int CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon,
+                 const char *searchName, struct cifs_sb_info *cifs_sb,
+                 __u16 *pnetfid, __u16 search_flags,
+                 struct cifs_search_info *psrch_inf, bool msearch);
+int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon,
+                __u16 searchHandle, __u16 search_flags,
+                struct cifs_search_info *psrch_inf);
+int CIFSFindClose(const unsigned int xid, struct cifs_tcon *tcon,
+                 const __u16 searchHandle);
+int CIFSGetSrvInodeNumber(const unsigned int xid, struct cifs_tcon *tcon,
+                         const char *search_name, __u64 *inode_number,
+                         const struct nls_table *nls_codepage, int remap);
+int CIFSGetDFSRefer(const unsigned int xid, struct cifs_ses *ses,
+                   const char *search_name,
+                   struct dfs_info3_param **target_nodes,
+                   unsigned int *num_of_nodes,
+                   const struct nls_table *nls_codepage, int remap);
+int SMBOldQFSInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                 struct kstatfs *FSData);
+int CIFSSMBQFSInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                  struct kstatfs *FSData);
+int CIFSSMBQFSAttributeInfo(const unsigned int xid, struct cifs_tcon *tcon);
+int CIFSSMBQFSDeviceInfo(const unsigned int xid, struct cifs_tcon *tcon);
+int CIFSSMBQFSUnixInfo(const unsigned int xid, struct cifs_tcon *tcon);
+int CIFSSMBSetFSUnixInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                        __u64 cap);
+int CIFSSMBQFSPosixInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                       struct kstatfs *FSData);
+int CIFSSMBSetEOF(const unsigned int xid, struct cifs_tcon *tcon,
+                 const char *file_name, __u64 size,
+                 struct cifs_sb_info *cifs_sb, bool set_allocation,
+                 struct dentry *dentry);
+int CIFSSMBSetFileSize(const unsigned int xid, struct cifs_tcon *tcon,
+                      struct cifsFileInfo *cfile, __u64 size,
+                      bool set_allocation);
+int SMBSetInformation(const unsigned int xid, struct cifs_tcon *tcon,
+                     const char *fileName, __le32 attributes,
+                     __le64 write_time, const struct nls_table *nls_codepage,
+                     struct cifs_sb_info *cifs_sb);
+int CIFSSMBSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                      const FILE_BASIC_INFO *data, __u16 fid,
+                      __u32 pid_of_opener);
+int CIFSSMBSetFileDisposition(const unsigned int xid, struct cifs_tcon *tcon,
+                             bool delete_file, __u16 fid,
+                             __u32 pid_of_opener);
+int CIFSSMBSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                      const char *fileName, const FILE_BASIC_INFO *data,
+                      const struct nls_table *nls_codepage,
+                      struct cifs_sb_info *cifs_sb);
+int CIFSSMBUnixSetFileInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                          const struct cifs_unix_set_info_args *args, u16 fid,
+                          u32 pid_of_opener);
+int CIFSSMBUnixSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon,
+                          const char *file_name,
+                          const struct cifs_unix_set_info_args *args,
+                          const struct nls_table *nls_codepage, int remap);
+ssize_t CIFSSMBQAllEAs(const unsigned int xid, struct cifs_tcon *tcon,
+                      const unsigned char *searchName,
+                      const unsigned char *ea_name, char *EAData,
+                      size_t buf_size, struct cifs_sb_info *cifs_sb);
+int CIFSSMBSetEA(const unsigned int xid, struct cifs_tcon *tcon,
+                const char *fileName, const char *ea_name,
+                const void *ea_value, const __u16 ea_value_len,
+                const struct nls_table *nls_codepage,
+                struct cifs_sb_info *cifs_sb);
 
 /*
  * smb1ops.c
@@ -33,6 +217,23 @@ extern struct smb_version_values smb1_values;
 /*
  * smb1transport.c
  */
+struct mid_q_entry *cifs_setup_async_request(struct TCP_Server_Info *server,
+                                            struct smb_rqst *rqst);
+int SendReceiveNoRsp(const unsigned int xid, struct cifs_ses *ses,
+                    char *in_buf, unsigned int in_len, int flags);
+int cifs_check_receive(struct mid_q_entry *mid, struct TCP_Server_Info *server,
+                      bool log_error);
+struct mid_q_entry *cifs_setup_request(struct cifs_ses *ses,
+                                      struct TCP_Server_Info *server,
+                                      struct smb_rqst *rqst);
+int SendReceive2(const unsigned int xid, struct cifs_ses *ses,
+                struct kvec *iov, int n_vec, int *resp_buf_type /* ret */,
+                const int flags, struct kvec *resp_iov);
+int SendReceive(const unsigned int xid, struct cifs_ses *ses,
+               struct smb_hdr *in_buf, unsigned int in_len,
+               struct smb_hdr *out_buf, int *pbytes_returned,
+               const int flags);
+
 
 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
 #endif /* _SMB1PROTO_H */