Re: regression in CIFS(?) between 4.17.14 and 4.18.0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Dr. Bernd Feige" <bernd.feige@xxxxxxxxxxxxxxxxxxxxx> writes:
> [   88.029589] fs/cifs/cifsfs.c: Devname: //dc1/Group flags: 0
> [   88.029600] address conversion returned 1 for xxx
> [   88.029617] fs/cifs/connect.c: iocharset set to utf8
> [   88.029626] fs/cifs/connect.c: Username: root
> [   88.031066] fs/cifs/connect.c: file mode: 0x180  dir mode: 0x1c0
> [   88.031069] fs/cifs/connect.c: CIFS VFS: in cifs_mount as Xid: 0 with uid: 0
> [   88.031070] fs/cifs/connect.c: UNC: \\dc1\Group

[...]

we connect to //dc1/Group which resolved to a root DFS server at //dc3/Group

> [   88.082249] fs/cifs/inode.c: CIFS VFS: in cifs_root_iget as Xid: 11 with uid: 0
> [   88.082251] fs/cifs/inode.c: Getting info on 
> [   88.082254] fs/cifs/smb2ops.c: found a cached root file handle
> [   88.082256] fs/cifs/smb2pdu.c: Query Info
> [   88.083446] fs/cifs/inode.c: looking for uniqueid=281474976823914
> [   88.083459] fs/cifs/inode.c: cifs_revalidate_cache: revalidating inode 281474976823914
> [   88.083461] fs/cifs/inode.c: cifs_revalidate_cache: inode 281474976823914 is new
> [   88.083464] fs/cifs/inode.c: CIFS VFS: leaving cifs_root_iget (xid = 11) rc = 0
> [   88.083466] fs/cifs/cifsfs.c: Get root dentry for 
> [   88.083468] fs/cifs/cifsfs.c: dentry root is: 00000000351ca600
> [   88.092779] fs/cifs/dir.c: CIFS VFS: in cifs_lookup as Xid: 12 with uid: 1000
> [   88.092783] fs/cifs/dir.c: parent inode = 0x000000000e3e22bf name is: DATA and dentry = 0x00000000a0e964ca
> [   88.092785] fs/cifs/dir.c: name: \DATA
> [   88.092786] fs/cifs/dir.c: NULL inode in lookup
> [   88.092787] fs/cifs/dir.c: Full path: \DATA inode = 0x          (null)
> [   88.092789] fs/cifs/inode.c: Getting info on \DATA
> [   88.092795] fs/cifs/smb2pdu.c: create/open
> [   88.093733] Status code returned 0xc0000257 STATUS_PATH_NOT_COVERED
> [   88.093739] fs/cifs/smb2maperror.c: Mapping SMB2 status code 0xc0000257 to POSIX err -66

once mounted we access DATA
this error DATA (//DC3/Group/DATA) is a dfs link

> [   88.093742] fs/cifs/inode.c: creating fake fattr for DFS referral
> [   88.093744] fs/cifs/inode.c: looking for uniqueid=18446612166559357568
> [   88.093753] fs/cifs/inode.c: cifs_revalidate_cache: revalidating inode 18446612166559357568
> [   88.093754] fs/cifs/inode.c: cifs_revalidate_cache: inode 18446612166559357568 is new
> [   88.093756] fs/cifs/dir.c: CIFS VFS: leaving cifs_lookup (xid = 12) rc = 0
> [   88.093758] fs/cifs/cifs_dfs_ref.c: in cifs_dfs_d_automount
> [   88.093759] fs/cifs/cifs_dfs_ref.c: in cifs_dfs_do_automount
> [   88.093760] fs/cifs/dir.c: name: \DATA
> [   88.093762] fs/cifs/cifs_dfs_ref.c: CIFS VFS: in cifs_dfs_do_automount as Xid: 13 with uid: 1000
> [   88.093763] fs/cifs/smb2ops.c: smb2_get_dfs_refer path <\DC3\Group\DATA>
> [   88.093767] fs/cifs/smb2pdu.c: SMB2 IOCTL
> [   88.094602] fs/cifs/misc.c: num_referrals: 1 dfs flags: 0x2 ...
> [   88.094614] fs/cifs/cifs_dfs_ref.c: CIFS VFS: leaving cifs_dfs_do_automount (xid = 13) rc = 0
> [   88.094615] fs/cifs/cifs_dfs_ref.c: DFS: ref path: \DC3\Group\DATA
> [   88.094616] fs/cifs/cifs_dfs_ref.c: DFS: node path: \fsgroup4\group\DATA
> [   88.094617] fs/cifs/cifs_dfs_ref.c: DFS: fl: 2, srv_type: 0
> [   88.094618] fs/cifs/cifs_dfs_ref.c: DFS: ref_flags: 0, path_consumed: 63

link resolved to //fsgroup4/group/DATA (different server)

> [   88.094621] address conversion returned 0 for fsgroup4
> [   88.094622] address conversion returned 0 for fsgroup4
> [   88.099802] fs/cifs/dns_resolve.c: dns_resolve_server_name_to_ip: resolved: fsgroup4 to yyy9
> [   88.099808] fs/cifs/cifsfs.c: Devname: //fsgroup4/group/DATA flags: 67108864
> [   88.099820] fs/cifs/connect.c: iocharset set to utf8
> [   88.099827] address conversion returned 1 for yyy9
> [   88.099828] fs/cifs/connect.c: Username: root
> [   88.099829] fs/cifs/connect.c: file mode: 0x180  dir mode: 0x1c0
> [   88.099831] fs/cifs/connect.c: CIFS VFS: in cifs_mount as Xid: 14 with uid: 1000
> [   88.099831] fs/cifs/connect.c: UNC: \\fsgroup4\group
> [   88.099836] fs/cifs/connect.c: Socket created
> [   88.099837] fs/cifs/connect.c: sndbuf 16384 rcvbuf 87380 rcvtimeo
> 0x1b58

we connect to it

> [   88.100984] fs/cifs/connect.c: CIFS VFS: in cifs_get_smb_ses as Xid: 15 with uid: 1000
> [   88.100986] fs/cifs/connect.c: Existing smb sess not found
> [   88.100987] fs/cifs/connect.c: Demultiplex PID: 4543
> [   88.100990] fs/cifs/smb2pdu.c: Negotiate protocol
> [   88.101362] fs/cifs/smb2pdu.c: mode 0x1
> [   88.101363] fs/cifs/smb2pdu.c: negotiated smb3.0 dialect
> [   88.101378] fs/cifs/connect.c: Security Mode: 0x1 Capabilities: 0x300053 TimeAdjust: 0
> [   88.101378] fs/cifs/smb2pdu.c: Session Setup
> [   88.101380] fs/cifs/smb2pdu.c: sess setup type 5
> [   88.101383] fs/cifs/cifs_spnego.c: key description = ver=0x2;host=fsgroup4;ip4=yyy9;sec=krb5;uid=0x3e8;creduid=0x3e8;user=root;pid=0x1191
> [   88.108011] SPNEGO reply blob:: dump of 1024 bytes of data at 0x000000002f33df36
> ...
> [   88.123996] fs/cifs/smb2pdu.c: SMB2/3 session established successfully

we make a new session.

note that this new connection is using smb3.0 and not 3.1.1.

> [   88.124006] fs/cifs/connect.c: CIFS VFS: leaving cifs_get_smb_ses (xid = 15) rc = 0
> [   88.124009] fs/cifs/connect.c: CIFS VFS: in cifs_setup_ipc as Xid: 16 with uid: 1000
> [   88.124010] fs/cifs/smb2pdu.c: TCON
> [   88.124408] fs/cifs/smb2pdu.c: connection to pipe share

open IPC$ tcon

> [   88.124410] fs/cifs/smb2pdu.c: validate negotiate
> [   88.124412] fs/cifs/smb2pdu.c: SMB2 IOCTL
> [   88.124927] fs/cifs/smb2pdu.c: validate negotiate info successful

send validate nego

> [   88.124930] fs/cifs/connect.c: CIFS VFS: leaving cifs_setup_ipc (xid = 16) rc = 0
> [   88.124931] fs/cifs/connect.c: IPC tcon rc = 0 ipc tid = 1
> [   88.124934] fs/cifs/connect.c: CIFS VFS: in cifs_get_tcon as Xid: 17 with uid: 1000
> [   88.124935] fs/cifs/smb2pdu.c: TCON
> [   88.126027] fs/cifs/smb2pdu.c: connection to disk share
> [   88.126029] fs/cifs/smb2pdu.c: validate negotiate
> [   88.126040] fs/cifs/smb2pdu.c: SMB2 IOCTL
> [   88.126594] fs/cifs/smb2pdu.c: validate negotiate info successful
> [   88.126607] fs/cifs/connect.c: CIFS VFS: leaving cifs_get_tcon (xid = 17) rc = 0
> [   88.126608] fs/cifs/connect.c: Tcon rc = 0

open DATA tcon

> [   88.126610] fs/cifs/smb2pdu.c: create/open
> [   88.127759] Status code returned 0xc0000010 STATUS_INVALID_DEVICE_REQUEST
> [   88.127778] fs/cifs/smb2maperror.c: Mapping SMB2 status code 0xc0000010 to POSIX err -95
> [   88.127780] CIFS VFS: error -95 on ioctl to get interface list

This is the code that gets the interface list which the server doesnt
support, can be ignored.

> [   88.127782] fs/cifs/smb2pdu.c: Query FSInfo level 5
> [   88.128175] fs/cifs/smb2pdu.c: Query FSInfo level 4
> [   88.129538] fs/cifs/connect.c: build_unc_path_to_root: full_path=\\fsgroup4\group\DATA
> [   88.129550] fs/cifs/smb2ops.c: smb2_get_dfs_refer path <\fsgroup4\group>
> [   88.130012] Status code returned 0xc0000225 STATUS_NOT_FOUND
> [   88.130015] fs/cifs/smb2maperror.c: Mapping SMB2 status code 0xc0000225 to POSIX err -2

we tried to resolve \fsgroup4\group in case it is a dfs root somewhere
else but it's not, continue rest of mount.

~2 seconds pass here, I'm guessing you waited and ran a command or something.

> [   90.968502] fs/cifs/inode.c: CIFS VFS: in cifs_revalidate_dentry_attr as Xid: 453 with uid: 1000
> [   90.968504] fs/cifs/dir.c: name: \DATA
> [   90.968506] fs/cifs/inode.c: Update attributes: \DATA inode 0x00000000e003cbf1 count 1 dentry: 0x00000000a0e964ca d_time 4294755796 jiffies 4294758671
> [   90.968507] fs/cifs/inode.c: Getting info on \DATA
> [   90.968512] fs/cifs/smb2pdu.c: create/open
> [   90.969081] Status code returned 0xc0000257 STATUS_PATH_NOT_COVERED
> [   90.969085] fs/cifs/smb2maperror.c: Mapping SMB2 status code 0xc0000257 to POSIX err -66
> [   90.969098] fs/cifs/inode.c: creating fake fattr for DFS referral
> [   90.969100] fs/cifs/inode.c: CIFS VFS: leaving cifs_revalidate_dentry_attr (xid = 453) rc = -116

we call cifs_revalidate_dentry_attr() on the DATA dentry, again it sees its a
link and adds the DFS/AUTOMOUNT flag to the inode/dentry and returns
-116 aka -ESTALE.

I'm not sure how cifs_revalidate_dentry_attr end up being called but
this is the code path from it:

int cifs_revalidate_dentry_attr(struct dentry *dentry)
{
...
	else
		rc = cifs_get_inode_info(&inode, full_path, NULL, sb,
					 xid, NULL);

---> int cifs_get_inode_info_unix(...)
		...
		/* we already have inode, update it */

		/* if uniqueid is different, return error */
		if (unlikely(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM &&
		    CIFS_I(*pinode)->uniqueid != fattr.cf_uniqueid)) {
			rc = -ESTALE;
			goto cgiiu_exit;
		}

		/* if filetype is different, return error */
		if (unlikely(((*pinode)->i_mode & S_IFMT) !=
		    (fattr.cf_mode & S_IFMT))) {
			rc = -ESTALE;
			goto cgiiu_exit;
		}

		cifs_fattr_to_inode(*pinode, &fattr);
	}

cgiiu_exit:
	return rc;
}
<-- returns to cifs_revalidate_dentry_attr
out:
	kfree(full_path);
	free_xid(xid);
	return rc;
}

Then I guess the task locks up somewhere..

The echo thing is a separate task so it keeps working.

> [  152.135169] fs/cifs/smb2pdu.c: In echo request
> [  152.135176] __smb_send_rqst: 478 callbacks suppressed
> [  152.135187] fs/cifs/transport.c: Sending smb: smb_len=72
> [  152.135480] cifs_demultiplex_thread: 478 callbacks suppressed
> [  152.135481] fs/cifs/connect.c: RFC1002 header 0x44
> [  152.135485] smb2_calc_size: 1338 callbacks suppressed
> [  152.135485] fs/cifs/smb2misc.c: SMB2 len 68
[...]

So I'm not sure whether the -ESTALE error is supposed to happen. When
using DFS servers you cannot guarantee stable and unique inode numbers
because you are getting unique ids from 2 different servers and they
might overlap.

I think it would help if you provided a similar log of the working
kernel. Maybe redo it for both kernels if you think something might have
changed since your last run.

-- 
Aurélien Aptel / SUSE Labs Samba Team
GPG: 1839 CB5F 9F5B FB9B AA97  8C99 03C8 A49B 521B D5D3
SUSE Linux GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux