forked from Minki/linux
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
This commit is contained in:
commit
c03f6bfc9f
@ -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 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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 = {
|
|||||||
.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
|
|||||||
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,
|
|||||||
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 @@ remote_path_check:
|
|||||||
|
|
||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user