[cifs:for-next 26/26] fs/cifs/connect.c:3967:2: note: in expansion of macro 'if'
kbuild test robot
lkp at intel.com
Thu May 31 17:48:46 UTC 2018
tree: git://git.samba.org/sfrench/cifs-2.6.git for-next
head: ab82f67684b914bf4843f3ea34aa7032be53f66e
commit: ab82f67684b914bf4843f3ea34aa7032be53f66e [26/26] smb3: Add posix create context on open for smb3.11 posix mounts
config: i386-randconfig-x016-201821 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
git checkout ab82f67684b914bf4843f3ea34aa7032be53f66e
# save the attached .config to linux build tree
make ARCH=i386
All warnings (new ones prefixed by >>):
In file included from include/linux/kernel.h:10:0,
from include/linux/list.h:9,
from include/linux/wait.h:7,
from include/linux/wait_bit.h:8,
from include/linux/fs.h:6,
from fs/cifs/connect.c:21:
fs/cifs/connect.c: In function 'cifs_mount':
fs/cifs/connect.c:3967:10: error: 'struct cifs_tcon' has no member named 'posix_extensions'
if (tcon->posix_extensions)
^
include/linux/compiler.h:58:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
>> fs/cifs/connect.c:3967:2: note: in expansion of macro 'if'
if (tcon->posix_extensions)
^~
fs/cifs/connect.c:3967:10: error: 'struct cifs_tcon' has no member named 'posix_extensions'
if (tcon->posix_extensions)
^
include/linux/compiler.h:58:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
>> fs/cifs/connect.c:3967:2: note: in expansion of macro 'if'
if (tcon->posix_extensions)
^~
fs/cifs/connect.c:3967:10: error: 'struct cifs_tcon' has no member named 'posix_extensions'
if (tcon->posix_extensions)
^
include/linux/compiler.h:69:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~
>> fs/cifs/connect.c:3967:2: note: in expansion of macro 'if'
if (tcon->posix_extensions)
^~
fs/cifs/connect.c: In function 'cifs_construct_tcon':
fs/cifs/connect.c:4432:10: error: 'struct cifs_tcon' has no member named 'posix_extensions'
if (tcon->posix_extensions)
^
include/linux/compiler.h:58:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
fs/cifs/connect.c:4432:2: note: in expansion of macro 'if'
if (tcon->posix_extensions)
^~
fs/cifs/connect.c:4432:10: error: 'struct cifs_tcon' has no member named 'posix_extensions'
if (tcon->posix_extensions)
^
include/linux/compiler.h:58:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
fs/cifs/connect.c:4432:2: note: in expansion of macro 'if'
if (tcon->posix_extensions)
^~
fs/cifs/connect.c:4432:10: error: 'struct cifs_tcon' has no member named 'posix_extensions'
if (tcon->posix_extensions)
^
include/linux/compiler.h:69:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~
fs/cifs/connect.c:4432:2: note: in expansion of macro 'if'
if (tcon->posix_extensions)
^~
vim +/if +3967 fs/cifs/connect.c
3905
3906 #ifdef CONFIG_CIFS_DFS_UPCALL
3907 try_mount_again:
3908 /* cleanup activities if we're chasing a referral */
3909 if (referral_walks_count) {
3910 if (tcon)
3911 cifs_put_tcon(tcon);
3912 else if (ses)
3913 cifs_put_smb_ses(ses);
3914
3915 cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_POSIX_PATHS;
3916
3917 free_xid(xid);
3918 }
3919 #endif
3920 rc = 0;
3921 tcon = NULL;
3922 ses = NULL;
3923 server = NULL;
3924 full_path = NULL;
3925 tlink = NULL;
3926
3927 xid = get_xid();
3928
3929 /* get a reference to a tcp session */
3930 server = cifs_get_tcp_session(volume_info);
3931 if (IS_ERR(server)) {
3932 rc = PTR_ERR(server);
3933 goto out;
3934 }
3935 if ((volume_info->max_credits < 20) ||
3936 (volume_info->max_credits > 60000))
3937 server->max_credits = SMB2_MAX_CREDITS_AVAILABLE;
3938 else
3939 server->max_credits = volume_info->max_credits;
3940 /* get a reference to a SMB session */
3941 ses = cifs_get_smb_ses(server, volume_info);
3942 if (IS_ERR(ses)) {
3943 rc = PTR_ERR(ses);
3944 ses = NULL;
3945 goto mount_fail_check;
3946 }
3947
3948 if ((volume_info->persistent == true) && ((ses->server->capabilities &
3949 SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) == 0)) {
3950 cifs_dbg(VFS, "persistent handles not supported by server\n");
3951 rc = -EOPNOTSUPP;
3952 goto mount_fail_check;
3953 }
3954
3955 /* search for existing tcon to this server share */
3956 tcon = cifs_get_tcon(ses, volume_info);
3957 if (IS_ERR(tcon)) {
3958 rc = PTR_ERR(tcon);
3959 tcon = NULL;
3960 if (rc == -EACCES)
3961 goto mount_fail_check;
3962
3963 goto remote_path_check;
3964 }
3965
3966 /* if new SMB3.11 POSIX extensions are supported do not remap / and \ */
> 3967 if (tcon->posix_extensions)
3968 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_POSIX_PATHS;
3969
3970 /* tell server which Unix caps we support */
3971 if (cap_unix(tcon->ses)) {
3972 /* reset of caps checks mount to see if unix extensions
3973 disabled for just this mount */
3974 reset_cifs_unix_caps(xid, tcon, cifs_sb, volume_info);
3975 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) &&
3976 (le64_to_cpu(tcon->fsUnixInfo.Capability) &
3977 CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP)) {
3978 rc = -EACCES;
3979 goto mount_fail_check;
3980 }
3981 } else
3982 tcon->unix_ext = 0; /* server does not support them */
3983
3984 /* do not care if a following call succeed - informational */
3985 if (!tcon->pipe && server->ops->qfs_tcon)
3986 server->ops->qfs_tcon(xid, tcon);
3987
3988 cifs_sb->wsize = server->ops->negotiate_wsize(tcon, volume_info);
3989 cifs_sb->rsize = server->ops->negotiate_rsize(tcon, volume_info);
3990
3991 remote_path_check:
3992 #ifdef CONFIG_CIFS_DFS_UPCALL
3993 /*
3994 * Perform an unconditional check for whether there are DFS
3995 * referrals for this path without prefix, to provide support
3996 * for DFS referrals from w2k8 servers which don't seem to respond
3997 * with PATH_NOT_COVERED to requests that include the prefix.
3998 * Chase the referral if found, otherwise continue normally.
3999 */
4000 if (referral_walks_count == 0) {
4001 int refrc = expand_dfs_referral(xid, ses, volume_info, cifs_sb,
4002 false);
4003 if (!refrc) {
4004 referral_walks_count++;
4005 goto try_mount_again;
4006 }
4007 }
4008 #endif
4009
4010 /* check if a whole path is not remote */
4011 if (!rc && tcon) {
4012 if (!server->ops->is_path_accessible) {
4013 rc = -ENOSYS;
4014 goto mount_fail_check;
4015 }
4016 /*
4017 * cifs_build_path_to_root works only when we have a valid tcon
4018 */
4019 full_path = cifs_build_path_to_root(volume_info, cifs_sb, tcon,
4020 tcon->Flags & SMB_SHARE_IS_IN_DFS);
4021 if (full_path == NULL) {
4022 rc = -ENOMEM;
4023 goto mount_fail_check;
4024 }
4025 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb,
4026 full_path);
4027 if (rc != 0 && rc != -EREMOTE) {
4028 kfree(full_path);
4029 goto mount_fail_check;
4030 }
4031
4032 if (rc != -EREMOTE) {
4033 rc = cifs_are_all_path_components_accessible(server,
4034 xid, tcon, cifs_sb,
4035 full_path);
4036 if (rc != 0) {
4037 cifs_dbg(VFS, "cannot query dirs between root and final path, "
4038 "enabling CIFS_MOUNT_USE_PREFIX_PATH\n");
4039 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
4040 rc = 0;
4041 }
4042 }
4043 kfree(full_path);
4044 }
4045
4046 /* get referral if needed */
4047 if (rc == -EREMOTE) {
4048 #ifdef CONFIG_CIFS_DFS_UPCALL
4049 if (referral_walks_count > MAX_NESTED_LINKS) {
4050 /*
4051 * BB: when we implement proper loop detection,
4052 * we will remove this check. But now we need it
4053 * to prevent an indefinite loop if 'DFS tree' is
4054 * misconfigured (i.e. has loops).
4055 */
4056 rc = -ELOOP;
4057 goto mount_fail_check;
4058 }
4059
4060 rc = expand_dfs_referral(xid, ses, volume_info, cifs_sb, true);
4061
4062 if (!rc) {
4063 referral_walks_count++;
4064 goto try_mount_again;
4065 }
4066 goto mount_fail_check;
4067 #else /* No DFS support, return error on mount */
4068 rc = -EOPNOTSUPP;
4069 #endif
4070 }
4071
4072 if (rc)
4073 goto mount_fail_check;
4074
4075 /* now, hang the tcon off of the superblock */
4076 tlink = kzalloc(sizeof *tlink, GFP_KERNEL);
4077 if (tlink == NULL) {
4078 rc = -ENOMEM;
4079 goto mount_fail_check;
4080 }
4081
4082 tlink->tl_uid = ses->linux_uid;
4083 tlink->tl_tcon = tcon;
4084 tlink->tl_time = jiffies;
4085 set_bit(TCON_LINK_MASTER, &tlink->tl_flags);
4086 set_bit(TCON_LINK_IN_TREE, &tlink->tl_flags);
4087
4088 cifs_sb->master_tlink = tlink;
4089 spin_lock(&cifs_sb->tlink_tree_lock);
4090 tlink_rb_insert(&cifs_sb->tlink_tree, tlink);
4091 spin_unlock(&cifs_sb->tlink_tree_lock);
4092
4093 queue_delayed_work(cifsiod_wq, &cifs_sb->prune_tlinks,
4094 TLINK_IDLE_EXPIRE);
4095
4096 mount_fail_check:
4097 /* on error free sesinfo and tcon struct if needed */
4098 if (rc) {
4099 /* If find_unc succeeded then rc == 0 so we can not end */
4100 /* up accidentally freeing someone elses tcon struct */
4101 if (tcon)
4102 cifs_put_tcon(tcon);
4103 else if (ses)
4104 cifs_put_smb_ses(ses);
4105 else
4106 cifs_put_tcp_session(server, 0);
4107 }
4108
4109 out:
4110 free_xid(xid);
4111 return rc;
4112 }
4113
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 25964 bytes
Desc: not available
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20180601/62b05bc8/config.gz>
More information about the samba-technical
mailing list