提交 c03f6bfc 编写于 作者: L Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
  [CIFS] Enable mmap on forcedirectio mounts
  cifs: NULL out tcon, pSesInfo, and srvTcp pointers when chasing DFS referrals
...@@ -5,7 +5,9 @@ have duplicated data). Fix oops in cifs_lookup. Workaround problem ...@@ -5,7 +5,9 @@ have duplicated data). Fix oops in cifs_lookup. Workaround problem
mounting to OS/400 Netserve. Fix oops in cifs_get_tcp_session. mounting to OS/400 Netserve. Fix oops in cifs_get_tcp_session.
Disable use of server inode numbers when server only Disable use of server inode numbers when server only
partially supports them (e.g. for one server querying inode numbers on partially supports them (e.g. for one server querying inode numbers on
FindFirst fails but QPathInfo queries works). FindFirst fails but QPathInfo queries works). Fix oops with dfs in
cifs_put_smb_ses. Fix mmap to work on directio mounts (needed
for OpenOffice when on forcedirectio mount e.g.)
Version 1.60 Version 1.60
------------- -------------
......
...@@ -758,7 +758,7 @@ const struct file_operations cifs_file_ops = { ...@@ -758,7 +758,7 @@ const struct file_operations cifs_file_ops = {
}; };
const struct file_operations cifs_file_direct_ops = { const struct file_operations cifs_file_direct_ops = {
/* no mmap, no aio, no readv - /* no aio, no readv -
BB reevaluate whether they can be done with directio, no cache */ BB reevaluate whether they can be done with directio, no cache */
.read = cifs_user_read, .read = cifs_user_read,
.write = cifs_user_write, .write = cifs_user_write,
...@@ -767,6 +767,7 @@ const struct file_operations cifs_file_direct_ops = { ...@@ -767,6 +767,7 @@ const struct file_operations cifs_file_direct_ops = {
.lock = cifs_lock, .lock = cifs_lock,
.fsync = cifs_fsync, .fsync = cifs_fsync,
.flush = cifs_flush, .flush = cifs_flush,
.mmap = cifs_file_mmap,
.splice_read = generic_file_splice_read, .splice_read = generic_file_splice_read,
#ifdef CONFIG_CIFS_POSIX #ifdef CONFIG_CIFS_POSIX
.unlocked_ioctl = cifs_ioctl, .unlocked_ioctl = cifs_ioctl,
......
...@@ -2287,12 +2287,12 @@ int ...@@ -2287,12 +2287,12 @@ int
cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
char *mount_data_global, const char *devname) char *mount_data_global, const char *devname)
{ {
int rc = 0; int rc;
int xid; int xid;
struct smb_vol *volume_info; struct smb_vol *volume_info;
struct cifsSesInfo *pSesInfo = NULL; struct cifsSesInfo *pSesInfo;
struct cifsTconInfo *tcon = NULL; struct cifsTconInfo *tcon;
struct TCP_Server_Info *srvTcp = NULL; struct TCP_Server_Info *srvTcp;
char *full_path; char *full_path;
char *mount_data = mount_data_global; char *mount_data = mount_data_global;
#ifdef CONFIG_CIFS_DFS_UPCALL #ifdef CONFIG_CIFS_DFS_UPCALL
...@@ -2301,6 +2301,10 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, ...@@ -2301,6 +2301,10 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
int referral_walks_count = 0; int referral_walks_count = 0;
try_mount_again: try_mount_again:
#endif #endif
rc = 0;
tcon = NULL;
pSesInfo = NULL;
srvTcp = NULL;
full_path = NULL; full_path = NULL;
xid = GetXid(); xid = GetXid();
...@@ -2597,6 +2601,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, ...@@ -2597,6 +2601,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
cleanup_volume_info(&volume_info); cleanup_volume_info(&volume_info);
referral_walks_count++; referral_walks_count++;
FreeXid(xid);
goto try_mount_again; goto try_mount_again;
} }
#else /* No DFS support, return error on mount */ #else /* No DFS support, return error on mount */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册