Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge git://git.samba.org/sfrench/cifs-2.6

Pull CIFS fixes from Steve French.

* git://git.samba.org/sfrench/cifs-2.6:
fs/cifs: fix parsing of dfs referrals
cifs: make sure we ignore the credentials= and cred= options
[CIFS] Update cifs version to 1.78
cifs - check S_AUTOMOUNT in revalidate
cifs: add missing initialization of server->req_lock
cifs: don't cap ra_pages at the same level as default_backing_dev_info
CIFS: Fix indentation in cifs_show_options

+23 -25
+1 -1
fs/cifs/cifsfs.c
··· 442 442 seq_printf(s, ",rsize=%u", cifs_sb->rsize); 443 443 seq_printf(s, ",wsize=%u", cifs_sb->wsize); 444 444 /* convert actimeo and display it in seconds */ 445 - seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ); 445 + seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ); 446 446 447 447 return 0; 448 448 }
+1 -1
fs/cifs/cifsfs.h
··· 125 125 extern const struct export_operations cifs_export_ops; 126 126 #endif /* CONFIG_CIFS_NFSD_EXPORT */ 127 127 128 - #define CIFS_VERSION "1.77" 128 + #define CIFS_VERSION "1.78" 129 129 #endif /* _CIFSFS_H */
+5 -1
fs/cifs/cifssmb.c
··· 4844 4844 max_len = data_end - temp; 4845 4845 node->node_name = cifs_strndup_from_utf16(temp, max_len, 4846 4846 is_unicode, nls_codepage); 4847 - if (!node->node_name) 4847 + if (!node->node_name) { 4848 4848 rc = -ENOMEM; 4849 + goto parse_DFS_referrals_exit; 4850 + } 4851 + 4852 + ref++; 4849 4853 } 4850 4854 4851 4855 parse_DFS_referrals_exit:
+4 -17
fs/cifs/connect.c
··· 215 215 216 216 { Opt_ignore, "cred" }, 217 217 { Opt_ignore, "credentials" }, 218 + { Opt_ignore, "cred=%s" }, 219 + { Opt_ignore, "credentials=%s" }, 218 220 { Opt_ignore, "guest" }, 219 221 { Opt_ignore, "rw" }, 220 222 { Opt_ignore, "ro" }, ··· 2185 2183 tcp_ses->session_estab = false; 2186 2184 tcp_ses->sequence_number = 0; 2187 2185 tcp_ses->lstrp = jiffies; 2186 + spin_lock_init(&tcp_ses->req_lock); 2188 2187 INIT_LIST_HEAD(&tcp_ses->tcp_ses_list); 2189 2188 INIT_LIST_HEAD(&tcp_ses->smb_ses_list); 2190 2189 INIT_DELAYED_WORK(&tcp_ses->echo, cifs_echo_request); ··· 3617 3614 return volume_info; 3618 3615 } 3619 3616 3620 - /* make sure ra_pages is a multiple of rsize */ 3621 - static inline unsigned int 3622 - cifs_ra_pages(struct cifs_sb_info *cifs_sb) 3623 - { 3624 - unsigned int reads; 3625 - unsigned int rsize_pages = cifs_sb->rsize / PAGE_CACHE_SIZE; 3626 - 3627 - if (rsize_pages >= default_backing_dev_info.ra_pages) 3628 - return default_backing_dev_info.ra_pages; 3629 - else if (rsize_pages == 0) 3630 - return rsize_pages; 3631 - 3632 - reads = default_backing_dev_info.ra_pages / rsize_pages; 3633 - return reads * rsize_pages; 3634 - } 3635 - 3636 3617 int 3637 3618 cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info) 3638 3619 { ··· 3704 3717 cifs_sb->rsize = cifs_negotiate_rsize(tcon, volume_info); 3705 3718 3706 3719 /* tune readahead according to rsize */ 3707 - cifs_sb->bdi.ra_pages = cifs_ra_pages(cifs_sb); 3720 + cifs_sb->bdi.ra_pages = cifs_sb->rsize / PAGE_CACHE_SIZE; 3708 3721 3709 3722 remote_path_check: 3710 3723 #ifdef CONFIG_CIFS_DFS_UPCALL
+12 -5
fs/cifs/dir.c
··· 668 668 return 0; 669 669 else { 670 670 /* 671 - * Forcibly invalidate automounting directory inodes 672 - * (remote DFS directories) so to have them 673 - * instantiated again for automount 671 + * If the inode wasn't known to be a dfs entry when 672 + * the dentry was instantiated, such as when created 673 + * via ->readdir(), it needs to be set now since the 674 + * attributes will have been updated by 675 + * cifs_revalidate_dentry(). 674 676 */ 675 - if (IS_AUTOMOUNT(direntry->d_inode)) 676 - return 0; 677 + if (IS_AUTOMOUNT(direntry->d_inode) && 678 + !(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) { 679 + spin_lock(&direntry->d_lock); 680 + direntry->d_flags |= DCACHE_NEED_AUTOMOUNT; 681 + spin_unlock(&direntry->d_lock); 682 + } 683 + 677 684 return 1; 678 685 } 679 686 }