Pārlūkot izejas kodu

[CIFS] Fix oops in experimental notify code (when CONFIG_CIFS_EXPERIMENTAL
was turned on).

Signed-off-by: Steve French <sfrench@us.ibm.com>

Steve French 19 gadi atpakaļ
vecāks
revīzija
4ca9c190d9
4 mainītis faili ar 12 papildinājumiem un 1 dzēšanām
  1. 2 1
      fs/cifs/CHANGES
  2. 2 0
      fs/cifs/README
  3. 4 0
      fs/cifs/cifsfs.c
  4. 4 0
      fs/cifs/fcntl.c

+ 2 - 1
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
 wsize and rsize can now be larger than negotiated buffer size if server
 supports large readx/writex, even when directio mount flag not specified.
 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
 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
 Version 1.37
 ------------
 ------------

+ 2 - 0
fs/cifs/README

@@ -296,6 +296,8 @@ A partial list of the supported mount options follows:
 		unused.
 		unused.
   rsize		default read size (usually 16K)
   rsize		default read size (usually 16K)
   wsize		default write size (usually 16K, 32K is often better over GigE)
   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
   rw		mount the network share read-write (note that the
 		server may still consider the share read-only)
 		server may still consider the share read-only)
   ro		mount network share read-only
   ro		mount network share read-only

+ 4 - 0
fs/cifs/cifsfs.c

@@ -901,6 +901,10 @@ init_cifs(void)
 	INIT_LIST_HEAD(&GlobalSMBSessionList);
 	INIT_LIST_HEAD(&GlobalSMBSessionList);
 	INIT_LIST_HEAD(&GlobalTreeConnectionList);
 	INIT_LIST_HEAD(&GlobalTreeConnectionList);
 	INIT_LIST_HEAD(&GlobalOplock_Q);
 	INIT_LIST_HEAD(&GlobalOplock_Q);
+#ifdef CONFIG_CIFS_EXPERIMENTAL
+	INIT_LIST_HEAD(&GlobalDnotifyReqList);
+	INIT_LIST_HEAD(&GlobalDnotifyRsp_Q);
+#endif	
 /*
 /*
  *  Initialize Global counters
  *  Initialize Global counters
  */
  */

+ 4 - 0
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;
 	__u32 filter = FILE_NOTIFY_CHANGE_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES;
 	__u16 netfid;
 	__u16 netfid;
 
 
+
+	if(experimEnabled == 0)
+		return 0;
+
 	xid = GetXid();
 	xid = GetXid();
 	cifs_sb = CIFS_SB(file->f_dentry->d_sb);
 	cifs_sb = CIFS_SB(file->f_dentry->d_sb);
 	pTcon = cifs_sb->tcon;
 	pTcon = cifs_sb->tcon;