aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2005-10-10 19:52:13 -0700
committerSteve French <sfrench@us.ibm.com>2005-10-10 19:52:13 -0700
commit4ca9c190d902caa7efb899a4c7fc8c6e6d926e95 (patch)
tree2c2cce67494a43c7cd35063435ac0d18a85dbe4d
parent34210f33025a3256b9ac3f0a182f02f1879140cb (diff)
downloadlinux-4ca9c190d902caa7efb899a4c7fc8c6e6d926e95.tar.gz
[CIFS] Fix oops in experimental notify code (when CONFIG_CIFS_EXPERIMENTAL
was turned on). Signed-off-by: Steve French <sfrench@us.ibm.com>
-rw-r--r--fs/cifs/CHANGES3
-rw-r--r--fs/cifs/README2
-rw-r--r--fs/cifs/cifsfs.c4
-rw-r--r--fs/cifs/fcntl.c4
4 files changed, 12 insertions, 1 deletions
diff --git a/fs/cifs/CHANGES b/fs/cifs/CHANGES
index 1c249a2abae384..b2a938378bef66 100644
--- a/fs/cifs/CHANGES
+++ b/fs/cifs/CHANGES
@@ -8,7 +8,8 @@ allowing an SMBs TCP length to be up to a few bytes longer than it should be.
wsize and rsize can now be larger than negotiated buffer size if server
supports large readx/writex, even when directio mount flag not specified.
Write size will in many cases now be 16K instead of 4K which greatly helps
-file copy performance on lightly loaded networks.
+file copy performance on lightly loaded networks. Fix oops in dnotify
+when experimental config flag enabled.
Version 1.37
------------
diff --git a/fs/cifs/README b/fs/cifs/README
index 5d9a953888d9e9..e7a3ce62d71b35 100644
--- a/fs/cifs/README
+++ b/fs/cifs/README
@@ -296,6 +296,8 @@ A partial list of the supported mount options follows:
unused.
rsize default read size (usually 16K)
wsize default write size (usually 16K, 32K is often better over GigE)
+ maximum wsize currently allowed by CIFS is 57344 (14 4096 byte
+ pages)
rw mount the network share read-write (note that the
server may still consider the share read-only)
ro mount network share read-only
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index 3bc9db522600b5..d2d16a9c1f05d3 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -901,6 +901,10 @@ init_cifs(void)
INIT_LIST_HEAD(&GlobalSMBSessionList);
INIT_LIST_HEAD(&GlobalTreeConnectionList);
INIT_LIST_HEAD(&GlobalOplock_Q);
+#ifdef CONFIG_CIFS_EXPERIMENTAL
+ INIT_LIST_HEAD(&GlobalDnotifyReqList);
+ INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
+#endif
/*
* Initialize Global counters
*/
diff --git a/fs/cifs/fcntl.c b/fs/cifs/fcntl.c
index d527e2c76073e6..a7a47bb36bf308 100644
--- a/fs/cifs/fcntl.c
+++ b/fs/cifs/fcntl.c
@@ -78,6 +78,10 @@ int cifs_dir_notify(struct file * file, unsigned long arg)
__u32 filter = FILE_NOTIFY_CHANGE_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES;
__u16 netfid;
+
+ if(experimEnabled == 0)
+ return 0;
+
xid = GetXid();
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
pTcon = cifs_sb->tcon;