#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;
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);
+}
+