diff options
Diffstat (limited to 'fs/cifs/fcntl.c')
-rw-r--r-- | fs/cifs/fcntl.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/fs/cifs/fcntl.c b/fs/cifs/fcntl.c index da12b482ebe5..8e375bb4b379 100644 --- a/fs/cifs/fcntl.c +++ b/fs/cifs/fcntl.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * fs/cifs/fcntl.c | 2 | * fs/cifs/fcntl.c |
3 | * | 3 | * |
4 | * vfs operations that deal with the file control API | 4 | * vfs operations that deal with the file control API |
5 | * | 5 | * |
6 | * Copyright (C) International Business Machines Corp., 2003,2004 | 6 | * Copyright (C) International Business Machines Corp., 2003,2004 |
7 | * Author(s): Steve French (sfrench@us.ibm.com) | 7 | * Author(s): Steve French (sfrench@us.ibm.com) |
8 | * | 8 | * |
@@ -35,35 +35,34 @@ static __u32 convert_to_cifs_notify_flags(unsigned long fcntl_notify_flags) | |||
35 | 35 | ||
36 | /* No way on Linux VFS to ask to monitor xattr | 36 | /* No way on Linux VFS to ask to monitor xattr |
37 | changes (and no stream support either */ | 37 | changes (and no stream support either */ |
38 | if(fcntl_notify_flags & DN_ACCESS) { | 38 | if (fcntl_notify_flags & DN_ACCESS) { |
39 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_LAST_ACCESS; | 39 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_LAST_ACCESS; |
40 | } | 40 | } |
41 | if(fcntl_notify_flags & DN_MODIFY) { | 41 | if (fcntl_notify_flags & DN_MODIFY) { |
42 | /* What does this mean on directories? */ | 42 | /* What does this mean on directories? */ |
43 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_LAST_WRITE | | 43 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_LAST_WRITE | |
44 | FILE_NOTIFY_CHANGE_SIZE; | 44 | FILE_NOTIFY_CHANGE_SIZE; |
45 | } | 45 | } |
46 | if(fcntl_notify_flags & DN_CREATE) { | 46 | if (fcntl_notify_flags & DN_CREATE) { |
47 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_CREATION | | 47 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_CREATION | |
48 | FILE_NOTIFY_CHANGE_LAST_WRITE; | 48 | FILE_NOTIFY_CHANGE_LAST_WRITE; |
49 | } | 49 | } |
50 | if(fcntl_notify_flags & DN_DELETE) { | 50 | if (fcntl_notify_flags & DN_DELETE) { |
51 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_LAST_WRITE; | 51 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_LAST_WRITE; |
52 | } | 52 | } |
53 | if(fcntl_notify_flags & DN_RENAME) { | 53 | if (fcntl_notify_flags & DN_RENAME) { |
54 | /* BB review this - checking various server behaviors */ | 54 | /* BB review this - checking various server behaviors */ |
55 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_DIR_NAME | | 55 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_DIR_NAME | |
56 | FILE_NOTIFY_CHANGE_FILE_NAME; | 56 | FILE_NOTIFY_CHANGE_FILE_NAME; |
57 | } | 57 | } |
58 | if(fcntl_notify_flags & DN_ATTRIB) { | 58 | if (fcntl_notify_flags & DN_ATTRIB) { |
59 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_SECURITY | | 59 | cifs_ntfy_flags |= FILE_NOTIFY_CHANGE_SECURITY | |
60 | FILE_NOTIFY_CHANGE_ATTRIBUTES; | 60 | FILE_NOTIFY_CHANGE_ATTRIBUTES; |
61 | } | 61 | } |
62 | /* if(fcntl_notify_flags & DN_MULTISHOT) { | 62 | /* if (fcntl_notify_flags & DN_MULTISHOT) { |
63 | cifs_ntfy_flags |= ; | 63 | cifs_ntfy_flags |= ; |
64 | } */ /* BB fixme - not sure how to handle this with CIFS yet */ | 64 | } */ /* BB fixme - not sure how to handle this with CIFS yet */ |
65 | 65 | ||
66 | |||
67 | return cifs_ntfy_flags; | 66 | return cifs_ntfy_flags; |
68 | } | 67 | } |
69 | 68 | ||
@@ -78,8 +77,7 @@ int cifs_dir_notify(struct file * file, unsigned long arg) | |||
78 | __u32 filter = FILE_NOTIFY_CHANGE_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES; | 77 | __u32 filter = FILE_NOTIFY_CHANGE_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES; |
79 | __u16 netfid; | 78 | __u16 netfid; |
80 | 79 | ||
81 | 80 | if (experimEnabled == 0) | |
82 | if(experimEnabled == 0) | ||
83 | return 0; | 81 | return 0; |
84 | 82 | ||
85 | xid = GetXid(); | 83 | xid = GetXid(); |
@@ -88,21 +86,21 @@ int cifs_dir_notify(struct file * file, unsigned long arg) | |||
88 | 86 | ||
89 | full_path = build_path_from_dentry(file->f_path.dentry); | 87 | full_path = build_path_from_dentry(file->f_path.dentry); |
90 | 88 | ||
91 | if(full_path == NULL) { | 89 | if (full_path == NULL) { |
92 | rc = -ENOMEM; | 90 | rc = -ENOMEM; |
93 | } else { | 91 | } else { |
94 | cFYI(1,("dir notify on file %s Arg 0x%lx",full_path,arg)); | 92 | cFYI(1, ("dir notify on file %s Arg 0x%lx", full_path, arg)); |
95 | rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, | 93 | rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, |
96 | GENERIC_READ | SYNCHRONIZE, 0 /* create options */, | 94 | GENERIC_READ | SYNCHRONIZE, 0 /* create options */, |
97 | &netfid, &oplock,NULL, cifs_sb->local_nls, | 95 | &netfid, &oplock, NULL, cifs_sb->local_nls, |
98 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | 96 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |
99 | /* BB fixme - add this handle to a notify handle list */ | 97 | /* BB fixme - add this handle to a notify handle list */ |
100 | if(rc) { | 98 | if (rc) { |
101 | cFYI(1,("Could not open directory for notify")); | 99 | cFYI(1, ("Could not open directory for notify")); |
102 | } else { | 100 | } else { |
103 | filter = convert_to_cifs_notify_flags(arg); | 101 | filter = convert_to_cifs_notify_flags(arg); |
104 | if(filter != 0) { | 102 | if (filter != 0) { |
105 | rc = CIFSSMBNotify(xid, pTcon, | 103 | rc = CIFSSMBNotify(xid, pTcon, |
106 | 0 /* no subdirs */, netfid, | 104 | 0 /* no subdirs */, netfid, |
107 | filter, file, arg & DN_MULTISHOT, | 105 | filter, file, arg & DN_MULTISHOT, |
108 | cifs_sb->local_nls); | 106 | cifs_sb->local_nls); |
@@ -113,10 +111,10 @@ int cifs_dir_notify(struct file * file, unsigned long arg) | |||
113 | it would close automatically but may be a way | 111 | it would close automatically but may be a way |
114 | to do it easily when inode freed or when | 112 | to do it easily when inode freed or when |
115 | notify info is cleared/changed */ | 113 | notify info is cleared/changed */ |
116 | cFYI(1,("notify rc %d",rc)); | 114 | cFYI(1, ("notify rc %d", rc)); |
117 | } | 115 | } |
118 | } | 116 | } |
119 | 117 | ||
120 | FreeXid(xid); | 118 | FreeXid(xid); |
121 | return rc; | 119 | return rc; |
122 | } | 120 | } |