All of lore.kernel.org
 help / color / mirror / Atom feed
* Kernel oops on 2.6.37-rc3, accessing remote DFS links
@ 2010-12-06 11:58 Robbert Kouprie
       [not found] ` <alpine.DEB.2.00.1012061247180.31332-56sTcPfcKMhJlCS1zhbguEjk2N/pv5CcZkel5v8DVj8@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Robbert Kouprie @ 2010-12-06 11:58 UTC (permalink / raw)
  To: linux-cifs-u79uwXL29TY76Z2rM5mHXA

Hi,

While troubleshooting a DFS issue, I hit a kernel panic:

foxdft13 = DFS root
foxdft08 = file server, serving "Global" share

# mount -t cifs //foxdft13.fox.local/company /mnt/bla/ -o 
credentials=/creds,sec=ntlmv2,dom=fox
# ls -la /mnt/bla/Global/

  fs/cifs/inode.c: CIFS VFS: in cifs_revalidate_dentry as Xid: 603 with 
uid: 0
  fs/cifs/inode.c: Revalidate: \\foxdft13.fox.local\company\Global inode 
0xe289aaac count 1 dentry: 0xda8c53b8 d_time 151744140 jiffies 151765235
  fs/cifs/inode.c: Getting info on \\foxdft13.fox.local\company\Global
  fs/cifs/transport.c: For smb_command 50
  fs/cifs/transport.c: Sending smb:  total_len 148
  fs/cifs/connect.c: rfc1002 length 0x27
  fs/cifs/connect.c: invalid transact2 word count
  Status code returned 0xc0000257 NT_STATUS_PATH_NOT_COVERED
  fs/cifs/netmisc.c: Mapping smb error code 3 to POSIX err -66
  fs/cifs/cifssmb.c: Send error in QPathInfo = -66
  fs/cifs/inode.c: creating fake fattr for DFS referral
  fs/cifs/inode.c: cifs_revalidate_cache: revalidating inode 62
  fs/cifs/inode.c: cifs_revalidate_cache: invalidating inode 62 mapping
  fs/cifs/inode.c: inode 0xe289aaac old_time=151744140 new_time=151765237
  fs/cifs/inode.c: CIFS VFS: leaving cifs_revalidate_dentry (xid = 603) rc 
= 0
  fs/cifs/cifs_dfs_ref.c: in cifs_dfs_follow_mountpoint
  fs/cifs/cifs_dfs_ref.c: CIFS VFS: in cifs_dfs_follow_mountpoint as Xid: 
604 with uid: 0
  fs/cifs/cifssmb.c: In GetDFSRefer the path 
\foxdft13.fox.local\company\Global
  fs/cifs/transport.c: For smb_command 50
  fs/cifs/transport.c: Sending smb:  total_len 144
  fs/cifs/connect.c: rfc1002 length 0x124
  fs/cifs/cifssmb.c: Decoding GetDFSRefer response BCC: 233  Offset 56
  fs/cifs/cifssmb.c: num_referrals: 1 dfs flags: 0x2 ...

  fs/cifs/cifs_dfs_ref.c: DFS: ref path: \foxdft13.fox.local\company\Global
  fs/cifs/cifs_dfs_ref.c: DFS: node path: \foxdft08\company\Global
  fs/cifs/cifs_dfs_ref.c: DFS: fl: 2, srv_type: 0
  fs/cifs/cifs_dfs_ref.c: DFS: ref_flags: 0, path_consumed: 34
  fs/cifs/dns_resolve.c: dns_resolve_server_name_to_ip: resolved: foxdft08 
to 10.0.0.72
  fs/cifs/cifsfs.c: Devname: \\foxdft08\company flags: 0
  fs/cifs/connect.c: CIFS VFS: in cifs_mount as Xid: 605 with uid: 0
  fs/cifs/connect.c: Domain name set
  fs/cifs/connect.c: prefix path /Global
  fs/cifs/connect.c: Username: vmtest
  fs/cifs/connect.c: UNC: \\foxdft08\company ip: 10.0.0.72
  fs/cifs/connect.c: Existing tcp session with server found
  fs/cifs/connect.c: CIFS VFS: in cifs_get_smb_ses as Xid: 606 with uid: 0
  fs/cifs/connect.c: Existing smb sess found (status=1)
  fs/cifs/connect.c: CIFS VFS: leaving cifs_get_smb_ses (xid = 606) rc = 0
  fs/cifs/connect.c: file mode: 0x1ed  dir mode: 0x1ed
  fs/cifs/connect.c: Found match on UNC path
  fs/cifs/connect.c: cifs_put_smb_ses: ses_count=2

  fs/cifs/cifssmb.c: In QFSDeviceInfo
  fs/cifs/transport.c: For smb_command 50
  fs/cifs/transport.c: Sending smb:  total_len 72
  fs/cifs/connect.c: rfc1002 length 0x44
  fs/cifs/cifssmb.c: In QFSAttributeInfo
  fs/cifs/transport.c: For smb_command 50
  fs/cifs/transport.c: Sending smb:  total_len 72
  fs/cifs/connect.c: rfc1002 length 0x50
  BUG: unable to handle kernel NULL pointer dereference at 0000001c
  IP: [<f909e327>] cifs_sb_master_tcon+0x3/0x7 [cifs]
  *pde = 00000000
  Oops: 0000 [#2] SMP
  last sysfs file: /sys/devices/virtual/bdi/cifs-183/uevent
  Modules linked in: cifs hmac nls_utf8 nls_base xfs exportfs loop 
parport_pc snd_pcm parport tpm_tis tpm tpm_bios snd_timer snd soundcore 
psmouse snd_page_alloc pcspkr evdev serio_raw i2c_piix4 shpchp i2c_core 
pci_hotplug ac container processor thermal_sys button ext3 jbd mbcache 
sd_mod crc_t10dif ide_cd_mod cdrom ata_generic ata_piix libata floppy 
e1000 mptspi piix mptscsih mptbase scsi_transport_spi ide_core scsi_mod 
[last unloaded: cifs]

  Pid: 1504, comm: ls Tainted: G      D     2.6.37-rc3 #1 440BX Desktop 
Reference Platform/VMware Virtual Platform
  EIP: 0060:[<f909e327>] EFLAGS: 00010292 CPU: 2
  EIP is at cifs_sb_master_tcon+0x3/0x7 [cifs]
  EAX: 00000000 EBX: f7031400 ECX: 00000000 EDX: 00000000
  ESI: 00000000 EDI: f70c4000 EBP: f70c4000 ESP: f37c7d30
   DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
  Process ls (pid: 1504, ti=f37c6000 task=f50a69a0 task.ti=f37c6000)
  Stack:
   f90aa3ab 0000004c 00000007 f4380000 f7031400 00000000 f7031100 f70c4000
   f90a2a79 f70c5200 c127c977 f72affff f501b600 0000025d ef110540 f72a6718
   f70c5e00 00000000 ef110540 f50a69a0 f50a69a0 f70c4174 f72a6728 00007d9c
  Call Trace:
   [<f90aa3ab>] ? cifs_build_path_to_root+0x17/0xe5 [cifs]
   [<f90a2a79>] ? cifs_mount+0x19f0/0x1e3f [cifs]
   [<c127c977>] ? _raw_spin_lock_bh+0x8/0x1e
   [<f90958f9>] ? cifs_do_mount+0x110/0x247 [cifs]
   [<f90957e9>] ? cifs_do_mount+0x0/0x247 [cifs]
   [<c10b8331>] ? vfs_kern_mount+0x9f/0x185
   [<f90b4c03>] ? cifs_dfs_follow_mountpoint+0x233/0x3cc [cifs]
   [<c10bebab>] ? do_follow_link+0xb6/0x1b1
   [<c10bef38>] ? link_path_walk+0x292/0x372
   [<c10bf0da>] ? path_walk+0x4f/0xae
   [<c10bf20b>] ? do_path_lookup+0x1f/0x69
   [<c10bfaa8>] ? user_path_at+0x37/0x5f
   [<c1098b0d>] ? vma_prio_tree_insert+0x17/0x2d
   [<c10b99b1>] ? vfs_fstatat+0x2a/0x50
   [<c10b9a18>] ? vfs_lstat+0x13/0x15
   [<c10b9a29>] ? sys_lstat64+0xf/0x23
   [<c1052a6c>] ? sys_futex+0xfe/0x112
   [<c10b503c>] ? filp_close+0x4e/0x54
   [<c127f339>] ? do_page_fault+0x0/0x36b
   [<c1002f9f>] ? sysenter_do_call+0x12/0x28
  Code: c8 59 5f 39 ee 0f 8c 49 ff ff ff 8b 44 24 60 65 33 05 14 00 00 00 
74 05 e8 3f 0c f9 c7 83 c4 64 5b 5e 5f 5d c3 90 90 90 8b 40 08 <8b> 40 1c 
c3 55 89 c5 83 3d a4 47 3b c1 00 57 89 d7 56 89 ce 53
  EIP: [<f909e327>] cifs_sb_master_tcon+0x3/0x7 [cifs] SS:ESP 0068:f37c7d30
  CR2: 000000000000001c
  ---[ end trace 9642afdeb896e709 ]---

Any ideas?

Regards,

-- 
Robbert

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Kernel oops on 2.6.37-rc3, accessing remote DFS links
       [not found] ` <alpine.DEB.2.00.1012061247180.31332-56sTcPfcKMhJlCS1zhbguEjk2N/pv5CcZkel5v8DVj8@public.gmane.org>
@ 2010-12-06 12:08   ` Jeff Layton
       [not found]     ` <20101206070846.1f2c35d4-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
       [not found]     ` <1291637583-10934-1-git-send-email-jlayton@redhat.com>
  0 siblings, 2 replies; 9+ messages in thread
From: Jeff Layton @ 2010-12-06 12:08 UTC (permalink / raw)
  To: Robbert Kouprie; +Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA

On Mon, 6 Dec 2010 12:58:38 +0100 (CET)
Robbert Kouprie <robbert-C1IQQP51G3M@public.gmane.org> wrote:

> Hi,
> 
> While troubleshooting a DFS issue, I hit a kernel panic:
> 
> foxdft13 = DFS root
> foxdft08 = file server, serving "Global" share
> 
> # mount -t cifs //foxdft13.fox.local/company /mnt/bla/ -o 
> credentials=/creds,sec=ntlmv2,dom=fox
> # ls -la /mnt/bla/Global/
> 
>   fs/cifs/inode.c: CIFS VFS: in cifs_revalidate_dentry as Xid: 603 with 
> uid: 0
>   fs/cifs/inode.c: Revalidate: \\foxdft13.fox.local\company\Global inode 
> 0xe289aaac count 1 dentry: 0xda8c53b8 d_time 151744140 jiffies 151765235
>   fs/cifs/inode.c: Getting info on \\foxdft13.fox.local\company\Global
>   fs/cifs/transport.c: For smb_command 50
>   fs/cifs/transport.c: Sending smb:  total_len 148
>   fs/cifs/connect.c: rfc1002 length 0x27
>   fs/cifs/connect.c: invalid transact2 word count
>   Status code returned 0xc0000257 NT_STATUS_PATH_NOT_COVERED
>   fs/cifs/netmisc.c: Mapping smb error code 3 to POSIX err -66
>   fs/cifs/cifssmb.c: Send error in QPathInfo = -66
>   fs/cifs/inode.c: creating fake fattr for DFS referral
>   fs/cifs/inode.c: cifs_revalidate_cache: revalidating inode 62
>   fs/cifs/inode.c: cifs_revalidate_cache: invalidating inode 62 mapping
>   fs/cifs/inode.c: inode 0xe289aaac old_time=151744140 new_time=151765237
>   fs/cifs/inode.c: CIFS VFS: leaving cifs_revalidate_dentry (xid = 603) rc 
> = 0
>   fs/cifs/cifs_dfs_ref.c: in cifs_dfs_follow_mountpoint
>   fs/cifs/cifs_dfs_ref.c: CIFS VFS: in cifs_dfs_follow_mountpoint as Xid: 
> 604 with uid: 0
>   fs/cifs/cifssmb.c: In GetDFSRefer the path 
> \foxdft13.fox.local\company\Global
>   fs/cifs/transport.c: For smb_command 50
>   fs/cifs/transport.c: Sending smb:  total_len 144
>   fs/cifs/connect.c: rfc1002 length 0x124
>   fs/cifs/cifssmb.c: Decoding GetDFSRefer response BCC: 233  Offset 56
>   fs/cifs/cifssmb.c: num_referrals: 1 dfs flags: 0x2 ...
> 
>   fs/cifs/cifs_dfs_ref.c: DFS: ref path: \foxdft13.fox.local\company\Global
>   fs/cifs/cifs_dfs_ref.c: DFS: node path: \foxdft08\company\Global
>   fs/cifs/cifs_dfs_ref.c: DFS: fl: 2, srv_type: 0
>   fs/cifs/cifs_dfs_ref.c: DFS: ref_flags: 0, path_consumed: 34
>   fs/cifs/dns_resolve.c: dns_resolve_server_name_to_ip: resolved: foxdft08 
> to 10.0.0.72
>   fs/cifs/cifsfs.c: Devname: \\foxdft08\company flags: 0
>   fs/cifs/connect.c: CIFS VFS: in cifs_mount as Xid: 605 with uid: 0
>   fs/cifs/connect.c: Domain name set
>   fs/cifs/connect.c: prefix path /Global
>   fs/cifs/connect.c: Username: vmtest
>   fs/cifs/connect.c: UNC: \\foxdft08\company ip: 10.0.0.72
>   fs/cifs/connect.c: Existing tcp session with server found
>   fs/cifs/connect.c: CIFS VFS: in cifs_get_smb_ses as Xid: 606 with uid: 0
>   fs/cifs/connect.c: Existing smb sess found (status=1)
>   fs/cifs/connect.c: CIFS VFS: leaving cifs_get_smb_ses (xid = 606) rc = 0
>   fs/cifs/connect.c: file mode: 0x1ed  dir mode: 0x1ed
>   fs/cifs/connect.c: Found match on UNC path
>   fs/cifs/connect.c: cifs_put_smb_ses: ses_count=2
> 
>   fs/cifs/cifssmb.c: In QFSDeviceInfo
>   fs/cifs/transport.c: For smb_command 50
>   fs/cifs/transport.c: Sending smb:  total_len 72
>   fs/cifs/connect.c: rfc1002 length 0x44
>   fs/cifs/cifssmb.c: In QFSAttributeInfo
>   fs/cifs/transport.c: For smb_command 50
>   fs/cifs/transport.c: Sending smb:  total_len 72
>   fs/cifs/connect.c: rfc1002 length 0x50
>   BUG: unable to handle kernel NULL pointer dereference at 0000001c
>   IP: [<f909e327>] cifs_sb_master_tcon+0x3/0x7 [cifs]
>   *pde = 00000000
>   Oops: 0000 [#2] SMP
>   last sysfs file: /sys/devices/virtual/bdi/cifs-183/uevent
>   Modules linked in: cifs hmac nls_utf8 nls_base xfs exportfs loop 
> parport_pc snd_pcm parport tpm_tis tpm tpm_bios snd_timer snd soundcore 
> psmouse snd_page_alloc pcspkr evdev serio_raw i2c_piix4 shpchp i2c_core 
> pci_hotplug ac container processor thermal_sys button ext3 jbd mbcache 
> sd_mod crc_t10dif ide_cd_mod cdrom ata_generic ata_piix libata floppy 
> e1000 mptspi piix mptscsih mptbase scsi_transport_spi ide_core scsi_mod 
> [last unloaded: cifs]
> 
>   Pid: 1504, comm: ls Tainted: G      D     2.6.37-rc3 #1 440BX Desktop 
> Reference Platform/VMware Virtual Platform
>   EIP: 0060:[<f909e327>] EFLAGS: 00010292 CPU: 2
>   EIP is at cifs_sb_master_tcon+0x3/0x7 [cifs]
>   EAX: 00000000 EBX: f7031400 ECX: 00000000 EDX: 00000000
>   ESI: 00000000 EDI: f70c4000 EBP: f70c4000 ESP: f37c7d30
>    DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
>   Process ls (pid: 1504, ti=f37c6000 task=f50a69a0 task.ti=f37c6000)
>   Stack:
>    f90aa3ab 0000004c 00000007 f4380000 f7031400 00000000 f7031100 f70c4000
>    f90a2a79 f70c5200 c127c977 f72affff f501b600 0000025d ef110540 f72a6718
>    f70c5e00 00000000 ef110540 f50a69a0 f50a69a0 f70c4174 f72a6728 00007d9c
>   Call Trace:
>    [<f90aa3ab>] ? cifs_build_path_to_root+0x17/0xe5 [cifs]
>    [<f90a2a79>] ? cifs_mount+0x19f0/0x1e3f [cifs]
>    [<c127c977>] ? _raw_spin_lock_bh+0x8/0x1e
>    [<f90958f9>] ? cifs_do_mount+0x110/0x247 [cifs]
>    [<f90957e9>] ? cifs_do_mount+0x0/0x247 [cifs]
>    [<c10b8331>] ? vfs_kern_mount+0x9f/0x185
>    [<f90b4c03>] ? cifs_dfs_follow_mountpoint+0x233/0x3cc [cifs]
>    [<c10bebab>] ? do_follow_link+0xb6/0x1b1
>    [<c10bef38>] ? link_path_walk+0x292/0x372
>    [<c10bf0da>] ? path_walk+0x4f/0xae
>    [<c10bf20b>] ? do_path_lookup+0x1f/0x69
>    [<c10bfaa8>] ? user_path_at+0x37/0x5f
>    [<c1098b0d>] ? vma_prio_tree_insert+0x17/0x2d
>    [<c10b99b1>] ? vfs_fstatat+0x2a/0x50
>    [<c10b9a18>] ? vfs_lstat+0x13/0x15
>    [<c10b9a29>] ? sys_lstat64+0xf/0x23
>    [<c1052a6c>] ? sys_futex+0xfe/0x112
>    [<c10b503c>] ? filp_close+0x4e/0x54
>    [<c127f339>] ? do_page_fault+0x0/0x36b
>    [<c1002f9f>] ? sysenter_do_call+0x12/0x28
>   Code: c8 59 5f 39 ee 0f 8c 49 ff ff ff 8b 44 24 60 65 33 05 14 00 00 00 
> 74 05 e8 3f 0c f9 c7 83 c4 64 5b 5e 5f 5d c3 90 90 90 8b 40 08 <8b> 40 1c 
> c3 55 89 c5 83 3d a4 47 3b c1 00 57 89 d7 56 89 ce 53
>   EIP: [<f909e327>] cifs_sb_master_tcon+0x3/0x7 [cifs] SS:ESP 0068:f37c7d30
>   CR2: 000000000000001c
>   ---[ end trace 9642afdeb896e709 ]---
> 
> Any ideas?
> 
> Regards,
> 

Yeah, it's a bug (obviously). I think I see what the problem is and
will send along a patch in a few minutes. Are you able to reproduce this at
will?

-- 
Jeff Layton <jlayton-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb
       [not found]     ` <20101206070846.1f2c35d4-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
@ 2010-12-06 12:15       ` Jeff Layton
       [not found]         ` <1291637703-10989-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
  2010-12-06 12:35       ` Kernel oops on 2.6.37-rc3, accessing remote DFS links Robbert Kouprie
  1 sibling, 1 reply; 9+ messages in thread
From: Jeff Layton @ 2010-12-06 12:15 UTC (permalink / raw)
  To: smfrench-Re5JQEeQqe8AvxtiuMwx3w
  Cc: robbert-C1IQQP51G3M, linux-cifs-u79uwXL29TY76Z2rM5mHXA

It's possible that cifs_mount will call cifs_build_path_to_root on a
newly instantiated cifs_sb. In that case, it's likely that the
master_tlink pointer has not yet been instantiated.

Fix this by having cifs_build_path_to_root take a cifsTconInfo pointer
as well, and have the caller pass that in.

Reported-by: Robbert Kouprie <robbert-C1IQQP51G3M@public.gmane.org>
Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
 fs/cifs/cifsproto.h |    3 ++-
 fs/cifs/connect.c   |    2 +-
 fs/cifs/inode.c     |    6 +++---
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
index f4cc34f..4e65b67 100644
--- a/fs/cifs/cifsproto.h
+++ b/fs/cifs/cifsproto.h
@@ -54,7 +54,8 @@ do {								\
 	     __func__, curr_xid, (int)rc);			\
 } while (0)
 extern char *build_path_from_dentry(struct dentry *);
-extern char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb);
+extern char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb,
+					struct cifsTconInfo *tcon);
 extern char *build_wildcard_path_from_dentry(struct dentry *direntry);
 extern char *cifs_compose_mount_options(const char *sb_mountdata,
 		const char *fullpath, const struct dfs_info3_param *ref,
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index af7fa78..f2f58e3 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -2913,7 +2913,7 @@ remote_path_check:
 	/* check if a whole path (including prepath) is not remote */
 	if (!rc && cifs_sb->prepathlen && tcon) {
 		/* build_path_to_root works only when we have a valid tcon */
-		full_path = cifs_build_path_to_root(cifs_sb);
+		full_path = cifs_build_path_to_root(cifs_sb, tcon);
 		if (full_path == NULL) {
 			rc = -ENOMEM;
 			goto mount_fail_check;
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index 0c1efbb..0023146 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -729,12 +729,12 @@ static const struct inode_operations cifs_ipc_inode_ops = {
 	.lookup = cifs_lookup,
 };
 
-char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb)
+char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb,
+				struct cifsTconInfo *tcon)
 {
 	int pplen = cifs_sb->prepathlen;
 	int dfsplen;
 	char *full_path = NULL;
-	struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
 
 	/* if no prefix path, simply set path to the root of share to "" */
 	if (pplen == 0) {
@@ -881,7 +881,7 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino)
 	char *full_path;
 	struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
 
-	full_path = cifs_build_path_to_root(cifs_sb);
+	full_path = cifs_build_path_to_root(cifs_sb, tcon);
 	if (full_path == NULL)
 		return ERR_PTR(-ENOMEM);
 
-- 
1.7.3.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: Kernel oops on 2.6.37-rc3, accessing remote DFS links
       [not found]     ` <20101206070846.1f2c35d4-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
  2010-12-06 12:15       ` [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb Jeff Layton
@ 2010-12-06 12:35       ` Robbert Kouprie
  1 sibling, 0 replies; 9+ messages in thread
From: Robbert Kouprie @ 2010-12-06 12:35 UTC (permalink / raw)
  To: Jeff Layton; +Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA

Hi Jeff,

On Mon, 6 Dec 2010, Jeff Layton wrote:

> Yeah, it's a bug (obviously). I think I see what the problem is and
> will send along a patch in a few minutes. Are you able to reproduce this at
> will?

Yes, I can reproduce this. I will test your patch right away.

Regards,
Robbert

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb
       [not found]         ` <1291637703-10989-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2010-12-06 19:12           ` Robbert Kouprie
       [not found]             ` <4CFD35A2.7080407-C1IQQP51G3M@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Robbert Kouprie @ 2010-12-06 19:12 UTC (permalink / raw)
  To: Jeff Layton
  Cc: smfrench-Re5JQEeQqe8AvxtiuMwx3w,
	linux-cifs-u79uwXL29TY76Z2rM5mHXA

Hi Jeff,

Op 6-12-2010 13:15, Jeff Layton schreef:
> It's possible that cifs_mount will call cifs_build_path_to_root on a
> newly instantiated cifs_sb. In that case, it's likely that the
> master_tlink pointer has not yet been instantiated.
> 
> Fix this by having cifs_build_path_to_root take a cifsTconInfo pointer
> as well, and have the caller pass that in.

I still get an oops on 2.6.37-rc4-git5 with the patch applied:

 BUG: unable to handle kernel NULL pointer dereference at 0000001c
 IP: [<f8fd533b>] cifs_sb_master_tcon+0x3/0x7 [cifs]
 *pde = 00000000
 Oops: 0000 [#1] SMP
 last sysfs file: /sys/devices/virtual/bdi/cifs-2/uevent
 Modules linked in: hmac nls_utf8 cifs nls_base xfs exportfs loop
snd_pcm parport_pc parport tpm_tis tpm tpm_bios snd_timer snd soundcore
snd_page_alloc psmouse evdev pcspkr serio_raw i2c_piix4 i2c_core shpchp
container pci_hotplug processor thermal_sys ac button ext3 jbd mbcache
sd_mod crc_t10dif ide_cd_mod cdrom ata_generic ata_piix libata floppy
e1000 mptspi mptscsih mptbase scsi_transport_spi scsi_mod piix ide_core
[last unloaded: scsi_wait_scan]

 Pid: 1362, comm: ls Not tainted 2.6.37-rc4-git5 #2 440BX Desktop
Reference Platform/VMware Virtual Platform
 EIP: 0060:[<f8fd533b>] EFLAGS: 00010286 CPU: 0
 EIP is at cifs_sb_master_tcon+0x3/0x7 [cifs]
 EAX: 00000000 EBX: f7156800 ECX: 40000040 EDX: 00000002
 ESI: f7156800 EDI: f7156a00 EBP: 00000000 ESP: f72fddb0
  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
 Process ls (pid: 1362, ti=f72fc000 task=f71379e0 task.ti=f72fc000)
 Stack:
  f8fe14f3 002c80d0 00000000 f7156a00 f7156800 00000000 00000000 f8fcc96b
  0000007f f7156838 f5073d80 f50ac840 f8ff9f30 f8fcc7fd f522b000 c10b8301
  f50ac900 f5073d80 00000000 f50ac900 f50ac900 f72fded4 00000000 f8febc6f
 Call Trace:
  [<f8fe14f3>] ? cifs_root_iget+0x1e/0x13f [cifs]
  [<f8fcc96b>] ? cifs_do_mount+0x16e/0x247 [cifs]
  [<f8fcc7fd>] ? cifs_do_mount+0x0/0x247 [cifs]
  [<c10b8301>] ? vfs_kern_mount+0x9f/0x185
  [<f8febc6f>] ? cifs_dfs_follow_mountpoint+0x233/0x3cc [cifs]
  [<c10bec73>] ? do_follow_link+0xb6/0x1b1
  [<c10bf000>] ? link_path_walk+0x292/0x372
  [<c10bf1a2>] ? path_walk+0x4f/0xae
  [<c10bf2d3>] ? do_path_lookup+0x1f/0x69
  [<c10bfb70>] ? user_path_at+0x37/0x5f
  [<c1098af9>] ? vma_prio_tree_insert+0x17/0x2d
  [<c10b9981>] ? vfs_fstatat+0x2a/0x50
  [<c10b99e8>] ? vfs_lstat+0x13/0x15
  [<c10b99f9>] ? sys_lstat64+0xf/0x23
  [<c1052a04>] ? sys_futex+0xfe/0x112
  [<c10b500c>] ? filp_close+0x4e/0x54
  [<c127f54f>] ? do_page_fault+0x0/0x36b
  [<c1002f9f>] ? sysenter_do_call+0x12/0x28
 Code: c8 59 5f 39 ee 0f 8c 49 ff ff ff 8b 44 24 60 65 33 05 14 00 00 00
74 05 e8 ef 9b 05 c8 83 c4 64 5b 5e 5f 5d c3 90 90 90 8b 40 08 <8b> 40
1c c3 55 89 c5 83 3d a4 47 3b c1 00 57 89 d7 56 89 ce 53
 EIP: [<f8fd533b>] cifs_sb_master_tcon+0x3/0x7 [cifs] SS:ESP 0068:f72fddb0
 CR2: 000000000000001c
 ---[ end trace 61b6103d05293c43 ]---

Regards,
Robbert

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb
       [not found]             ` <4CFD35A2.7080407-C1IQQP51G3M@public.gmane.org>
@ 2010-12-06 19:34               ` Jeff Layton
       [not found]                 ` <20101206143423.74d8e236-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Jeff Layton @ 2010-12-06 19:34 UTC (permalink / raw)
  To: Robbert Kouprie
  Cc: smfrench-Re5JQEeQqe8AvxtiuMwx3w,
	linux-cifs-u79uwXL29TY76Z2rM5mHXA

On Mon, 06 Dec 2010 20:12:34 +0100
Robbert Kouprie <robbert-C1IQQP51G3M@public.gmane.org> wrote:

> Hi Jeff,
> 
> Op 6-12-2010 13:15, Jeff Layton schreef:
> > It's possible that cifs_mount will call cifs_build_path_to_root on a
> > newly instantiated cifs_sb. In that case, it's likely that the
> > master_tlink pointer has not yet been instantiated.
> > 
> > Fix this by having cifs_build_path_to_root take a cifsTconInfo pointer
> > as well, and have the caller pass that in.
> 
> I still get an oops on 2.6.37-rc4-git5 with the patch applied:
> 
>  BUG: unable to handle kernel NULL pointer dereference at 0000001c
>  IP: [<f8fd533b>] cifs_sb_master_tcon+0x3/0x7 [cifs]
>  *pde = 00000000
>  Oops: 0000 [#1] SMP
>  last sysfs file: /sys/devices/virtual/bdi/cifs-2/uevent
>  Modules linked in: hmac nls_utf8 cifs nls_base xfs exportfs loop
> snd_pcm parport_pc parport tpm_tis tpm tpm_bios snd_timer snd soundcore
> snd_page_alloc psmouse evdev pcspkr serio_raw i2c_piix4 i2c_core shpchp
> container pci_hotplug processor thermal_sys ac button ext3 jbd mbcache
> sd_mod crc_t10dif ide_cd_mod cdrom ata_generic ata_piix libata floppy
> e1000 mptspi mptscsih mptbase scsi_transport_spi scsi_mod piix ide_core
> [last unloaded: scsi_wait_scan]
> 
>  Pid: 1362, comm: ls Not tainted 2.6.37-rc4-git5 #2 440BX Desktop
> Reference Platform/VMware Virtual Platform
>  EIP: 0060:[<f8fd533b>] EFLAGS: 00010286 CPU: 0
>  EIP is at cifs_sb_master_tcon+0x3/0x7 [cifs]
>  EAX: 00000000 EBX: f7156800 ECX: 40000040 EDX: 00000002
>  ESI: f7156800 EDI: f7156a00 EBP: 00000000 ESP: f72fddb0
>   DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
>  Process ls (pid: 1362, ti=f72fc000 task=f71379e0 task.ti=f72fc000)
>  Stack:
>   f8fe14f3 002c80d0 00000000 f7156a00 f7156800 00000000 00000000 f8fcc96b
>   0000007f f7156838 f5073d80 f50ac840 f8ff9f30 f8fcc7fd f522b000 c10b8301
>   f50ac900 f5073d80 00000000 f50ac900 f50ac900 f72fded4 00000000 f8febc6f
>  Call Trace:
>   [<f8fe14f3>] ? cifs_root_iget+0x1e/0x13f [cifs]
>   [<f8fcc96b>] ? cifs_do_mount+0x16e/0x247 [cifs]
>   [<f8fcc7fd>] ? cifs_do_mount+0x0/0x247 [cifs]
>   [<c10b8301>] ? vfs_kern_mount+0x9f/0x185
>   [<f8febc6f>] ? cifs_dfs_follow_mountpoint+0x233/0x3cc [cifs]
>   [<c10bec73>] ? do_follow_link+0xb6/0x1b1
>   [<c10bf000>] ? link_path_walk+0x292/0x372
>   [<c10bf1a2>] ? path_walk+0x4f/0xae
>   [<c10bf2d3>] ? do_path_lookup+0x1f/0x69
>   [<c10bfb70>] ? user_path_at+0x37/0x5f
>   [<c1098af9>] ? vma_prio_tree_insert+0x17/0x2d
>   [<c10b9981>] ? vfs_fstatat+0x2a/0x50
>   [<c10b99e8>] ? vfs_lstat+0x13/0x15
>   [<c10b99f9>] ? sys_lstat64+0xf/0x23
>   [<c1052a04>] ? sys_futex+0xfe/0x112
>   [<c10b500c>] ? filp_close+0x4e/0x54
>   [<c127f54f>] ? do_page_fault+0x0/0x36b
>   [<c1002f9f>] ? sysenter_do_call+0x12/0x28
>  Code: c8 59 5f 39 ee 0f 8c 49 ff ff ff 8b 44 24 60 65 33 05 14 00 00 00
> 74 05 e8 ef 9b 05 c8 83 c4 64 5b 5e 5f 5d c3 90 90 90 8b 40 08 <8b> 40
> 1c c3 55 89 c5 83 3d a4 47 3b c1 00 57 89 d7 56 89 ce 53
>  EIP: [<f8fd533b>] cifs_sb_master_tcon+0x3/0x7 [cifs] SS:ESP 0068:f72fddb0
>  CR2: 000000000000001c
>  ---[ end trace 61b6103d05293c43 ]---
> 
> Regards,
> Robbert
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Interesting...does this (untested) patch fix it? It may have to be "wiggled" into
place depending on your tree. If so, I'm surprised no one has tripped
over this before...

----------------[snip]--------------------

cifs: fix check of error return from is_path_accessable

This function will return 0 if everything went ok.

Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
 fs/cifs/connect.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index bee397f..9fbe7c5 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -2836,7 +2836,7 @@ remote_path_check:
 			goto mount_fail_check;
 		}
 		rc = is_path_accessible(xid, tcon, cifs_sb, full_path);
-		if (rc != -EREMOTE) {
+		if (rc != 0 && rc != -EREMOTE) {
 			kfree(full_path);
 			goto mount_fail_check;
 		}
-- 
1.7.3.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb
       [not found]                 ` <20101206143423.74d8e236-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
@ 2010-12-06 21:39                   ` Robbert Kouprie
  0 siblings, 0 replies; 9+ messages in thread
From: Robbert Kouprie @ 2010-12-06 21:39 UTC (permalink / raw)
  To: Jeff Layton
  Cc: smfrench-Re5JQEeQqe8AvxtiuMwx3w,
	linux-cifs-u79uwXL29TY76Z2rM5mHXA

Hey Jeff,

This patch fixes the oops, and the remote DFS link is readable. Great!

Thanks!
Robbert

Op 6-12-2010 20:34, Jeff Layton schreef:
> On Mon, 06 Dec 2010 20:12:34 +0100
> Robbert Kouprie <robbert-C1IQQP51G3M@public.gmane.org> wrote:
> 
>> Hi Jeff,
>>
>> Op 6-12-2010 13:15, Jeff Layton schreef:
>>> It's possible that cifs_mount will call cifs_build_path_to_root on a
>>> newly instantiated cifs_sb. In that case, it's likely that the
>>> master_tlink pointer has not yet been instantiated.
>>>
>>> Fix this by having cifs_build_path_to_root take a cifsTconInfo pointer
>>> as well, and have the caller pass that in.
>>
>> I still get an oops on 2.6.37-rc4-git5 with the patch applied:
>>
>>  BUG: unable to handle kernel NULL pointer dereference at 0000001c
>>  IP: [<f8fd533b>] cifs_sb_master_tcon+0x3/0x7 [cifs]
>>  *pde = 00000000
>>  Oops: 0000 [#1] SMP
>>  last sysfs file: /sys/devices/virtual/bdi/cifs-2/uevent
>>  Modules linked in: hmac nls_utf8 cifs nls_base xfs exportfs loop
>> snd_pcm parport_pc parport tpm_tis tpm tpm_bios snd_timer snd soundcore
>> snd_page_alloc psmouse evdev pcspkr serio_raw i2c_piix4 i2c_core shpchp
>> container pci_hotplug processor thermal_sys ac button ext3 jbd mbcache
>> sd_mod crc_t10dif ide_cd_mod cdrom ata_generic ata_piix libata floppy
>> e1000 mptspi mptscsih mptbase scsi_transport_spi scsi_mod piix ide_core
>> [last unloaded: scsi_wait_scan]
>>
>>  Pid: 1362, comm: ls Not tainted 2.6.37-rc4-git5 #2 440BX Desktop
>> Reference Platform/VMware Virtual Platform
>>  EIP: 0060:[<f8fd533b>] EFLAGS: 00010286 CPU: 0
>>  EIP is at cifs_sb_master_tcon+0x3/0x7 [cifs]
>>  EAX: 00000000 EBX: f7156800 ECX: 40000040 EDX: 00000002
>>  ESI: f7156800 EDI: f7156a00 EBP: 00000000 ESP: f72fddb0
>>   DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
>>  Process ls (pid: 1362, ti=f72fc000 task=f71379e0 task.ti=f72fc000)
>>  Stack:
>>   f8fe14f3 002c80d0 00000000 f7156a00 f7156800 00000000 00000000 f8fcc96b
>>   0000007f f7156838 f5073d80 f50ac840 f8ff9f30 f8fcc7fd f522b000 c10b8301
>>   f50ac900 f5073d80 00000000 f50ac900 f50ac900 f72fded4 00000000 f8febc6f
>>  Call Trace:
>>   [<f8fe14f3>] ? cifs_root_iget+0x1e/0x13f [cifs]
>>   [<f8fcc96b>] ? cifs_do_mount+0x16e/0x247 [cifs]
>>   [<f8fcc7fd>] ? cifs_do_mount+0x0/0x247 [cifs]
>>   [<c10b8301>] ? vfs_kern_mount+0x9f/0x185
>>   [<f8febc6f>] ? cifs_dfs_follow_mountpoint+0x233/0x3cc [cifs]
>>   [<c10bec73>] ? do_follow_link+0xb6/0x1b1
>>   [<c10bf000>] ? link_path_walk+0x292/0x372
>>   [<c10bf1a2>] ? path_walk+0x4f/0xae
>>   [<c10bf2d3>] ? do_path_lookup+0x1f/0x69
>>   [<c10bfb70>] ? user_path_at+0x37/0x5f
>>   [<c1098af9>] ? vma_prio_tree_insert+0x17/0x2d
>>   [<c10b9981>] ? vfs_fstatat+0x2a/0x50
>>   [<c10b99e8>] ? vfs_lstat+0x13/0x15
>>   [<c10b99f9>] ? sys_lstat64+0xf/0x23
>>   [<c1052a04>] ? sys_futex+0xfe/0x112
>>   [<c10b500c>] ? filp_close+0x4e/0x54
>>   [<c127f54f>] ? do_page_fault+0x0/0x36b
>>   [<c1002f9f>] ? sysenter_do_call+0x12/0x28
>>  Code: c8 59 5f 39 ee 0f 8c 49 ff ff ff 8b 44 24 60 65 33 05 14 00 00 00
>> 74 05 e8 ef 9b 05 c8 83 c4 64 5b 5e 5f 5d c3 90 90 90 8b 40 08 <8b> 40
>> 1c c3 55 89 c5 83 3d a4 47 3b c1 00 57 89 d7 56 89 ce 53
>>  EIP: [<f8fd533b>] cifs_sb_master_tcon+0x3/0x7 [cifs] SS:ESP 0068:f72fddb0
>>  CR2: 000000000000001c
>>  ---[ end trace 61b6103d05293c43 ]---
>>
>> Regards,
>> Robbert
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> Interesting...does this (untested) patch fix it? It may have to be "wiggled" into
> place depending on your tree. If so, I'm surprised no one has tripped
> over this before...
> 
> ----------------[snip]--------------------
> 
> cifs: fix check of error return from is_path_accessable
> 
> This function will return 0 if everything went ok.
> 
> Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
>  fs/cifs/connect.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index bee397f..9fbe7c5 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -2836,7 +2836,7 @@ remote_path_check:
>  			goto mount_fail_check;
>  		}
>  		rc = is_path_accessible(xid, tcon, cifs_sb, full_path);
> -		if (rc != -EREMOTE) {
> +		if (rc != 0 && rc != -EREMOTE) {
>  			kfree(full_path);
>  			goto mount_fail_check;
>  		}

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb
@ 2010-12-07  2:07 Jeff Layton
  0 siblings, 0 replies; 9+ messages in thread
From: Jeff Layton @ 2010-12-07  2:07 UTC (permalink / raw)
  To: smfrench-Re5JQEeQqe8AvxtiuMwx3w
  Cc: robbert-C1IQQP51G3M, linux-cifs-u79uwXL29TY76Z2rM5mHXA

It's possible that cifs_mount will call cifs_build_path_to_root on a
newly instantiated cifs_sb. In that case, it's likely that the
master_tlink pointer has not yet been instantiated.

Fix this by having cifs_build_path_to_root take a cifsTconInfo pointer
as well, and have the caller pass that in.

Reported-and-Tested-by: Robbert Kouprie <robbert-C1IQQP51G3M@public.gmane.org>
Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
 fs/cifs/cifsproto.h |    3 ++-
 fs/cifs/connect.c   |    2 +-
 fs/cifs/inode.c     |    6 +++---
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
index 5523047..e6d1481 100644
--- a/fs/cifs/cifsproto.h
+++ b/fs/cifs/cifsproto.h
@@ -54,7 +54,8 @@ do {								\
 	     __func__, curr_xid, (int)rc);			\
 } while (0)
 extern char *build_path_from_dentry(struct dentry *);
-extern char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb);
+extern char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb,
+					struct cifsTconInfo *tcon);
 extern char *build_wildcard_path_from_dentry(struct dentry *direntry);
 extern char *cifs_compose_mount_options(const char *sb_mountdata,
 		const char *fullpath, const struct dfs_info3_param *ref,
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 53f9c31..0a203ec 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -2833,7 +2833,7 @@ remote_path_check:
 	/* check if a whole path (including prepath) is not remote */
 	if (!rc && cifs_sb->prepathlen && tcon) {
 		/* build_path_to_root works only when we have a valid tcon */
-		full_path = cifs_build_path_to_root(cifs_sb);
+		full_path = cifs_build_path_to_root(cifs_sb, tcon);
 		if (full_path == NULL) {
 			rc = -ENOMEM;
 			goto mount_fail_check;
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index aa48521..589f3e3 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -728,12 +728,12 @@ static const struct inode_operations cifs_ipc_inode_ops = {
 	.lookup = cifs_lookup,
 };
 
-char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb)
+char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb,
+				struct cifsTconInfo *tcon)
 {
 	int pplen = cifs_sb->prepathlen;
 	int dfsplen;
 	char *full_path = NULL;
-	struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
 
 	/* if no prefix path, simply set path to the root of share to "" */
 	if (pplen == 0) {
@@ -875,7 +875,7 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino)
 	char *full_path;
 	struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
 
-	full_path = cifs_build_path_to_root(cifs_sb);
+	full_path = cifs_build_path_to_root(cifs_sb, tcon);
 	if (full_path == NULL)
 		return ERR_PTR(-ENOMEM);
 
-- 
1.7.3.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb
       [not found]         ` <4D5B8941.8040800-bdq14YP6qtRg9hUCZPvPmw@public.gmane.org>
@ 2011-02-16 12:25           ` Jeff Layton
  0 siblings, 0 replies; 9+ messages in thread
From: Jeff Layton @ 2011-02-16 12:25 UTC (permalink / raw)
  To: Darren Williams
  Cc: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	robbert-C1IQQP51G3M@public.gmane.org,
	linux-cifs-u79uwXL29TY76Z2rM5mHXA

On Wed, 16 Feb 2011 19:22:25 +1100
Darren Williams <darren.w-bdq14YP6qtRg9hUCZPvPmw@public.gmane.org> wrote:

> Hi All
> 
> Robert and Jeff thanks for working on and fixing this, I can confirm 
> that we now have;
> - Remote DFS mounts working, using
> - both sec=krb5 and sec=ntlm.
> 
> I'm just looking for clarification on the following feature or bug:
> 
> we have a SAMBA server, samba1, serving a DFS root as follows
> 
> [dfs]
>     path = /export/samba/dfs
>     msdfs root = yes
> 
> configured as:
> 
> ls -l /export/samba/dfs
> total 8
> lrwxrwxrwx 1 root root 79 2010-03-10 07:53 home -> 
> msdfs:samba1\dfshome,samba2\dfshome
> 
> and SAMBA servers, samba1 and samba2 with shares:
> 
> [dfshome]
>     comment = DFS Linux Home Directories
>     path = /export/home/1/%u
>     create mask = 0700
>     force create mode = 0700
>     directory mask = 0700
>     force directory mode = 0700
>     read only = No
>     browseable = No
>     valid users = %U
>     map acl inherit = yes
> 
> 
> 
> If I cifs mount the DFS root using
> mount.cifs //samba1/dfs /tmp/dfs -o <options as required>
> then list the directory I get the following errors:
> 
> 
> root@atp-h5gcn1s:~# mount.cifs //samba1/dfs /tmp/dfs/ -o <options>
> Password:
> root@atp-h5gcn1s:~# ls -l /tmp/dfs/
> ls: cannot read symbolic link /tmp/dfs/home: Object is remote
> ls: cannot read symbolic link /tmp/dfs/test-home: Object is remote
> ls: cannot read symbolic link /tmp/dfs/projects: Object is remote
> total 8
> lrwxrwxrwx 1 root root 79 Mar 10  2010 home
> lrwxrwxrwx 1 root root 46 Mar 10  2010 projects
> lrwxrwxrwx 1 root root 79 Mar 25  2010 test-home
> root@atp-h5gcn1s:~# ls -l /tmp/dfs/home/
> ls: cannot access /tmp/dfs/home/: Not a directory
> root@atp-h5gcn1s:~# umount /tmp/dfs
> 
> I then remount and access a file in 'home' directly, which then allows 
> the directory listing to succeed.
> 
> root@atp-h5gcn1s:~# mount.cifs //samba1/dfs /tmp/dfs/ -o 
> user=dwilliams,dom=NICTA
> Password:
> root@atp-h5gcn1s:~# ls -l /tmp/dfs/home/.bashrc
> -rw-r--r-- 1 <user> <group> 2450 Jun  8  2008 /tmp/dfs/home/.bashrc
> root@atp-h5gcn1s:~# ls  /tmp/dfs/
> home  projects    test-home
> root@atp-h5gcn1s:~# ls -l /tmp/dfs/home/
> -rw-r--r--  1 <user> <group>     3078 Aug 17  2007 2007-08-17-P.....
> ....
> 
> also access is OK if you mount 'home' directly via dfs
> 
> root@atp-h5gcn1s:~# mount.cifs //samba1/dfs/home /tmp/dfs/ -o <options>
> 
> I'm looking for clarification on what the correct operation should be 
> since our Windows clients can access the root the traverse the directory 
> tree without error, not that this is evidence for correct operation.
> 

I believe that's a bug...

The way things like autofs, DFS referrals and NFS used to work is by
pretending these mountpoints are symlinks and then abusing the
->follow_link operation on them in the kernel. Not all operations on
that inode trigger the follow_link op however, so sometimes -EREMOTE
errors bubble up when they shouldn't. Either that or we just have some
straightforward bad handling of -EREMOTE errors in the readdir codepath
-- I'm not sure yet :)

What may be best is to open a bug at bugzilla.samba.org and we'll chase
it down when we get a chance. If you do that, please cc me on it. FWIW,
I opened this bug a while back which is probably related, but haven't
had time to work on it:

    https://bugzilla.redhat.com/show_bug.cgi?id=616765

This may also be helped by the d_automount patches that dhowells did
recently and that are going into 2.6.38, but I haven't had time to look
yet.

-- 
Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-02-16 12:25 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-06 11:58 Kernel oops on 2.6.37-rc3, accessing remote DFS links Robbert Kouprie
     [not found] ` <alpine.DEB.2.00.1012061247180.31332-56sTcPfcKMhJlCS1zhbguEjk2N/pv5CcZkel5v8DVj8@public.gmane.org>
2010-12-06 12:08   ` Jeff Layton
     [not found]     ` <20101206070846.1f2c35d4-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2010-12-06 12:15       ` [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb Jeff Layton
     [not found]         ` <1291637703-10989-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-12-06 19:12           ` Robbert Kouprie
     [not found]             ` <4CFD35A2.7080407-C1IQQP51G3M@public.gmane.org>
2010-12-06 19:34               ` Jeff Layton
     [not found]                 ` <20101206143423.74d8e236-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2010-12-06 21:39                   ` Robbert Kouprie
2010-12-06 12:35       ` Kernel oops on 2.6.37-rc3, accessing remote DFS links Robbert Kouprie
     [not found]     ` <1291637583-10934-1-git-send-email-jlayton@redhat.com>
     [not found]       ` <4D5B8941.8040800@computer.org>
     [not found]         ` <4D5B8941.8040800-bdq14YP6qtRg9hUCZPvPmw@public.gmane.org>
2011-02-16 12:25           ` [PATCH] cifs: allow calling cifs_build_path_to_root on incomplete cifs_sb Jeff Layton
  -- strict thread matches above, loose matches on Subject: below --
2010-12-07  2:07 Jeff Layton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.