This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / fs / cifs / fcntl.c
index b908768..1469a40 100644 (file)
@@ -28,7 +28,7 @@
 #include "cifs_unicode.h"
 #include "cifs_debug.h"
 
-int cifs_dir_notify(struct file * file, unsigned long arg)
+int cifs_directory_notify(unsigned long arg, struct file * file)
 {
        int xid;
        int rc = -EINVAL;
@@ -70,3 +70,53 @@ int cifs_dir_notify(struct file * file, unsigned long arg)
        FreeXid(xid);
        return rc;
 }
+
+
+long cifs_fcntl(int file_desc, unsigned int command, unsigned long arg,
+                               struct file * file)
+{
+       /* Few few file control functions need to be specially mapped. So far
+       only:
+               F_NOTIFY (for directory change notification)
+       And eventually:
+               F_GETLEASE
+               F_SETLEASE 
+       need to be mapped here. The others either already are mapped downstream
+       or do not need to go to the server (client only sideeffects):
+               F_DUPFD:
+               F_GETFD:
+               F_SETFD:
+               F_GETFL:
+               F_SETFL:
+               F_GETLK:
+               F_SETLK:
+               F_SETLKW:
+               F_GETOWN:
+               F_SETOWN:
+               F_GETSIG:
+               F_SETSIG:
+       */
+       long rc = 0;
+
+       cFYI(1,("cifs_fcntl: command %d with arg %lx",command,arg)); /* BB removeme BB */
+
+       switch (command) {
+       case F_NOTIFY:
+               /* let the local call have a chance to fail first */
+               rc = generic_file_fcntl(file_desc,command,arg,file);
+               if(rc)
+                       return rc;
+               else {
+                       /* local call succeeded try to do remote notify to
+                       pick up changes from other clients to server file */
+                       cifs_directory_notify(arg, file);
+                       /* BB add case to long and return rc from above */
+                       return rc;
+               }
+               break;
+       default:
+               break;
+       }
+       return generic_file_fcntl(file_desc,command,arg,file);
+}
+