aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/cifs')
-rw-r--r--fs/cifs/dir.c83
-rw-r--r--fs/cifs/smberr.h227
2 files changed, 182 insertions, 128 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index f54e1866f0f4..12ba81d7b07f 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -284,51 +284,48 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
284 /* mknod case - do not leave file open */ 284 /* mknod case - do not leave file open */
285 CIFSSMBClose(xid, pTcon, fileHandle); 285 CIFSSMBClose(xid, pTcon, fileHandle);
286 } else if(newinode) { 286 } else if(newinode) {
287 pCifsFile = (struct cifsFileInfo *) 287 pCifsFile =
288 kmalloc(sizeof (struct cifsFileInfo), GFP_KERNEL); 288 kmalloc(sizeof (struct cifsFileInfo), GFP_KERNEL);
289 289
290 if (pCifsFile) { 290 if(pCifsFile == NULL)
291 memset((char *)pCifsFile, 0, 291 goto cifs_create_out;
292 sizeof (struct cifsFileInfo)); 292 memset((char *)pCifsFile, 0,
293 pCifsFile->netfid = fileHandle; 293 sizeof (struct cifsFileInfo));
294 pCifsFile->pid = current->tgid; 294 pCifsFile->netfid = fileHandle;
295 pCifsFile->pInode = newinode; 295 pCifsFile->pid = current->tgid;
296 pCifsFile->invalidHandle = FALSE; 296 pCifsFile->pInode = newinode;
297 pCifsFile->closePend = FALSE; 297 pCifsFile->invalidHandle = FALSE;
298 init_MUTEX(&pCifsFile->fh_sem); 298 pCifsFile->closePend = FALSE;
299 /* put the following in at open now */ 299 init_MUTEX(&pCifsFile->fh_sem);
300 /* pCifsFile->pfile = file; */ 300 /* set the following in open now
301 write_lock(&GlobalSMBSeslock); 301 pCifsFile->pfile = file; */
302 list_add(&pCifsFile->tlist,&pTcon->openFileList); 302 write_lock(&GlobalSMBSeslock);
303 pCifsInode = CIFS_I(newinode); 303 list_add(&pCifsFile->tlist,&pTcon->openFileList);
304 if(pCifsInode) { 304 pCifsInode = CIFS_I(newinode);
305 if(pCifsInode) {
305 /* if readable file instance put first in list*/ 306 /* if readable file instance put first in list*/
306 if (write_only == TRUE) { 307 if (write_only == TRUE) {
307 list_add_tail(&pCifsFile->flist, 308 list_add_tail(&pCifsFile->flist,
308 &pCifsInode->openFileList); 309 &pCifsInode->openFileList);
309 } else { 310 } else {
310 list_add(&pCifsFile->flist, 311 list_add(&pCifsFile->flist,
311 &pCifsInode->openFileList); 312 &pCifsInode->openFileList);
312 }
313 if((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
314 pCifsInode->clientCanCacheAll = TRUE;
315 pCifsInode->clientCanCacheRead = TRUE;
316 cFYI(1,("Exclusive Oplock granted on inode %p",
317 newinode));
318 } else if((oplock & 0xF) == OPLOCK_READ)
319 pCifsInode->clientCanCacheRead = TRUE;
320 } 313 }
321 write_unlock(&GlobalSMBSeslock); 314 if((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
315 pCifsInode->clientCanCacheAll = TRUE;
316 pCifsInode->clientCanCacheRead = TRUE;
317 cFYI(1,("Exclusive Oplock for inode %p",
318 newinode));
319 } else if((oplock & 0xF) == OPLOCK_READ)
320 pCifsInode->clientCanCacheRead = TRUE;
322 } 321 }
322 write_unlock(&GlobalSMBSeslock);
323 } 323 }
324 } 324 }
325 325cifs_create_out:
326 if (buf) 326 kfree(buf);
327 kfree(buf); 327 kfree(full_path);
328 if (full_path)
329 kfree(full_path);
330 FreeXid(xid); 328 FreeXid(xid);
331
332 return rc; 329 return rc;
333} 330}
334 331
@@ -375,10 +372,8 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode, dev_t dev
375 } 372 }
376 } 373 }
377 374
378 if (full_path) 375 kfree(full_path);
379 kfree(full_path);
380 FreeXid(xid); 376 FreeXid(xid);
381
382 return rc; 377 return rc;
383} 378}
384 379
@@ -447,8 +442,7 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct name
447 if file exists or not but no access BB */ 442 if file exists or not but no access BB */
448 } 443 }
449 444
450 if (full_path) 445 kfree(full_path);
451 kfree(full_path);
452 FreeXid(xid); 446 FreeXid(xid);
453 return ERR_PTR(rc); 447 return ERR_PTR(rc);
454} 448}
@@ -478,8 +472,7 @@ cifs_dir_open(struct inode *inode, struct file *file)
478 472
479 cFYI(1, ("inode = 0x%p and full path is %s", inode, full_path)); 473 cFYI(1, ("inode = 0x%p and full path is %s", inode, full_path));
480 474
481 if (full_path) 475 kfree(full_path);
482 kfree(full_path);
483 FreeXid(xid); 476 FreeXid(xid);
484 return rc; 477 return rc;
485} 478}
diff --git a/fs/cifs/smberr.h b/fs/cifs/smberr.h
index e21f1384661f..1b53dcd0f2eb 100644
--- a/fs/cifs/smberr.h
+++ b/fs/cifs/smberr.h
@@ -22,94 +22,155 @@
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */ 23 */
24 24
25#define SUCCESS 0 /* The request was successful. */ 25#define SUCCESS 0x00 /* The request was successful. */
26#define ERRDOS 0x01 /* Error is from the core DOS operating system set */ 26#define ERRDOS 0x01 /* Error is from the core DOS operating system set */
27#define ERRSRV 0x02 /* Error is generated by the file server daemon */ 27#define ERRSRV 0x02 /* Error is generated by the file server daemon */
28#define ERRHRD 0x03 /* Error is a hardware error. */ 28#define ERRHRD 0x03 /* Error is a hardware error. */
29#define ERRCMD 0xFF /* Command was not in the "SMB" format. */ 29#define ERRCMD 0xFF /* Command was not in the "SMB" format. */
30 30
31/* The following error codes may be generated with the SUCCESS error class.*/ 31/* The following error codes may be generated with the SUCCESS error class.*/
32 32
33#define SUCCESS 0 /* The request was successful. */ 33/*#define SUCCESS 0 The request was successful. */
34 34
35/* The following error codes may be generated with the ERRDOS error class.*/ 35/* The following error codes may be generated with the ERRDOS error class.*/
36 36
37#define ERRbadfunc 1 /* Invalid function. The server did not recognize or could not perform a system call generated by the server, e.g., set the DIRECTORY attribute on a data file, invalid seek mode. */ 37#define ERRbadfunc 1 /* Invalid function. The server did not
38#define ERRbadfile 2 /*File not found. The last component of a file's pathname could not be found. */ 38 recognize or could not perform a
39#define ERRbadpath 3 /* Directory invalid. A directory component in a pathname could not be found. */ 39 system call generated by the server,
40#define ERRnofids 4 /* Too many open files. The server has no file handles available. */ 40 e.g., set the DIRECTORY attribute on
41#define ERRnoaccess 5 /* Access denied, the client's context does not permit the requested function. This includes the following conditions: invalid rename command, write to Fid open for read only, read on Fid open for write only, attempt to delete a non-empty directory */ 41 a data file, invalid seek mode. */
42#define ERRbadfid 6 /* Invalid file handle. The file handle specified was not recognized by the server. */ 42#define ERRbadfile 2 /* File not found. The last component
43#define ERRbadmcb 7 /* Memory control blocks destroyed. */ 43 of a file's pathname could not be
44#define ERRnomem 8 /* Insufficient server memory to perform the requested function. */ 44 found. */
45#define ERRbadmem 9 /* Invalid memory block address. */ 45#define ERRbadpath 3 /* Directory invalid. A directory
46#define ERRbadenv 10 /* Invalid environment. */ 46 component in a pathname could not be
47#define ERRbadformat 11 /* Invalid format. */ 47 found. */
48#define ERRbadaccess 12 /* Invalid open mode. */ 48#define ERRnofids 4 /* Too many open files. The server has
49#define ERRbaddata 13 /* Invalid data (generated only by IOCTL calls within the server). */ 49 no file handles available. */
50#define ERRbaddrive 15 /* Invalid drive specified. */ 50#define ERRnoaccess 5 /* Access denied, the client's context
51#define ERRremcd 16 /* A Delete Directory request attempted to remove the server's current directory. */ 51 does not permit the requested
52#define ERRdiffdevice 17 /* Not same device (e.g., a cross volume rename was attempted */ 52 function. This includes the
53#define ERRnofiles 18 /* A File Search command can find no more files matching the specified criteria. */ 53 following conditions: invalid rename
54#define ERRgeneral 31 54 command, write to Fid open for read
55#define ERRbadshare 32 /* The sharing mode specified for an Open conflicts with existing FIDs on the file. */ 55 only, read on Fid open for write
56#define ERRlock 33 /* A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process. */ 56 only, attempt to delete a non-empty
57#define ERRunsup 50 57 directory */
58#define ERRnosuchshare 67 58#define ERRbadfid 6 /* Invalid file handle. The file handle
59#define ERRfilexists 80 /* The file named in the request already exists. */ 59 specified was not recognized by the
60#define ERRinvparm 87 60 server. */
61#define ERRdiskfull 112 61#define ERRbadmcb 7 /* Memory control blocks destroyed. */
62#define ERRinvname 123 62#define ERRnomem 8 /* Insufficient server memory to
63#define ERRinvlevel 124 63 perform the requested function. */
64#define ERRdirnotempty 145 64#define ERRbadmem 9 /* Invalid memory block address. */
65#define ERRnotlocked 158 65#define ERRbadenv 10 /* Invalid environment. */
66#define ERRalreadyexists 183 66#define ERRbadformat 11 /* Invalid format. */
67#define ERRbadpipe 230 67#define ERRbadaccess 12 /* Invalid open mode. */
68#define ERRpipebusy 231 68#define ERRbaddata 13 /* Invalid data (generated only by
69#define ERRpipeclosing 232 69 IOCTL calls within the server). */
70#define ERRnotconnected 233 70#define ERRbaddrive 15 /* Invalid drive specified. */
71#define ERRmoredata 234 71#define ERRremcd 16 /* A Delete Directory request attempted
72#define ERReasnotsupported 282 72 to remove the server's current
73#define ErrQuota 0x200 /* The operation would cause a quota limit to be exceeded. */ 73 directory. */
74#define ErrNotALink 0x201 /* A link operation was performed on a pathname that 74#define ERRdiffdevice 17 /* Not same device (e.g., a cross
75 was not a link. */ 75 volume rename was attempted */
76#define ERRnofiles 18 /* A File Search command can find no
77 more files matching the specified
78 criteria. */
79#define ERRgeneral 31
80#define ERRbadshare 32 /* The sharing mode specified for an
81 Open conflicts with existing FIDs on
82 the file. */
83#define ERRlock 33 /* A Lock request conflicted with an
84 existing lock or specified an
85 invalid mode, or an Unlock requested
86 attempted to remove a lock held by
87 another process. */
88#define ERRunsup 50
89#define ERRnosuchshare 67
90#define ERRfilexists 80 /* The file named in the request
91 already exists. */
92#define ERRinvparm 87
93#define ERRdiskfull 112
94#define ERRinvname 123
95#define ERRinvlevel 124
96#define ERRdirnotempty 145
97#define ERRnotlocked 158
98#define ERRalreadyexists 183
99#define ERRbadpipe 230
100#define ERRpipebusy 231
101#define ERRpipeclosing 232
102#define ERRnotconnected 233
103#define ERRmoredata 234
104#define ERReasnotsupported 282
105#define ErrQuota 0x200 /* The operation would cause a quota
106 limit to be exceeded. */
107#define ErrNotALink 0x201 /* A link operation was performed on a
108 pathname that was not a link. */
76 109
77/* Following error codes may be generated with the ERRSRV error 110/* Following error codes may be generated with the ERRSRV error class.*/
78class.*/
79 111
80#define ERRerror 1 /* Non-specific error code. It is returned under the following conditions: resource other than disk space exhausted (e.g. TIDs), first SMB command was not negotiate, multiple negotiates attempted, and internal server error. */ 112#define ERRerror 1 /* Non-specific error code. It is
81#define ERRbadpw 2 /* Bad password - name/password pair in a TreeConnect or Session Setup are invalid. */ 113 returned under the following
82#define ERRbadtype 3 /* used for indicating DFS referral needed */ 114 conditions: resource other than disk
83#define ERRaccess 4 /* The client does not have the necessary access rights within the specified context for requested function. */ 115 space exhausted (e.g. TIDs), first
84#define ERRinvtid 5 /* The Tid specified in a command was invalid. */ 116 SMB command was not negotiate,
85#define ERRinvnetname 6 /* Invalid network name in tree connect. */ 117 multiple negotiates attempted, and
86#define ERRinvdevice 7 /* Invalid device - printer request made to non-printer connection or non-printer request made to printer connection. */ 118 internal server error. */
87#define ERRqfull 49 /* Print queue full (files) -- returned by open print file. */ 119#define ERRbadpw 2 /* Bad password - name/password pair in
88#define ERRqtoobig 50 /* Print queue full -- no space. */ 120 a TreeConnect or Session Setup are
89#define ERRqeof 51 /* EOF on print queue dump */ 121 invalid. */
90#define ERRinvpfid 52 /* Invalid print file FID. */ 122#define ERRbadtype 3 /* used for indicating DFS referral
91#define ERRsmbcmd 64 /* The server did not recognize the command received. */ 123 needed */
92#define ERRsrverror 65 /* The server encountered an internal error, e.g., system file unavailable. */ 124#define ERRaccess 4 /* The client does not have the
93#define ERRbadBID 66 /* (obsolete) */ 125 necessary access rights within the
94#define ERRfilespecs 67 /* The Fid and pathname parameters contained an invalid combination of values. */ 126 specified context for requested
95#define ERRbadLink 68 /* (obsolete) */ 127 function. */
96#define ERRbadpermits 69 /* The access permissions specified for a file or directory are not a valid combination. */ 128#define ERRinvtid 5 /* The Tid specified in a command was
97#define ERRbadPID 70 129 invalid. */
98#define ERRsetattrmode 71 /* attribute (mode) is invalid */ 130#define ERRinvnetname 6 /* Invalid network name in tree
99#define ERRpaused 81 /* Server is paused */ 131 connect. */
100#define ERRmsgoff 82 /* reserved - messaging off */ 132#define ERRinvdevice 7 /* Invalid device - printer request
101#define ERRnoroom 83 /* reserved - no room for message */ 133 made to non-printer connection or
102#define ERRrmuns 87 /* reserved - too many remote names */ 134 non-printer request made to printer
103#define ERRtimeout 88 /* operation timed out */ 135 connection. */
104#define ERRnoresource 89 /* No resources available for request */ 136#define ERRqfull 49 /* Print queue full (files) -- returned
105#define ERRtoomanyuids 90 /* Too many UIDs active on this session */ 137 by open print file. */
106#define ERRbaduid 91 /* The UID is not known as a valid user */ 138#define ERRqtoobig 50 /* Print queue full -- no space. */
107#define ERRusempx 250 /* temporarily unable to use raw */ 139#define ERRqeof 51 /* EOF on print queue dump */
108#define ERRusestd 251 /* temporarily unable to use either raw or mpx */ 140#define ERRinvpfid 52 /* Invalid print file FID. */
109#define ERR_NOTIFY_ENUM_DIR 1024 141#define ERRsmbcmd 64 /* The server did not recognize the
110#define ERRaccountexpired 2239 142 command received. */
111#define ERRbadclient 2240 143#define ERRsrverror 65 /* The server encountered an internal
112#define ERRbadLogonTime 2241 144 error, e.g., system file
113#define ERRpasswordExpired 2242 145 unavailable. */
114#define ERRnetlogonNotStarted 2455 146#define ERRbadBID 66 /* (obsolete) */
115#define ERRnosupport 0xFFFF 147#define ERRfilespecs 67 /* The Fid and pathname parameters
148 contained an invalid combination of
149 values. */
150#define ERRbadLink 68 /* (obsolete) */
151#define ERRbadpermits 69 /* The access permissions specified for
152 a file or directory are not a valid
153 combination. */
154#define ERRbadPID 70
155#define ERRsetattrmode 71 /* attribute (mode) is invalid */
156#define ERRpaused 81 /* Server is paused */
157#define ERRmsgoff 82 /* reserved - messaging off */
158#define ERRnoroom 83 /* reserved - no room for message */
159#define ERRrmuns 87 /* reserved - too many remote names */
160#define ERRtimeout 88 /* operation timed out */
161#define ERRnoresource 89 /* No resources available for request
162 */
163#define ERRtoomanyuids 90 /* Too many UIDs active on this session
164 */
165#define ERRbaduid 91 /* The UID is not known as a valid user
166 */
167#define ERRusempx 250 /* temporarily unable to use raw */
168#define ERRusestd 251 /* temporarily unable to use either raw
169 or mpx */
170#define ERR_NOTIFY_ENUM_DIR 1024
171#define ERRaccountexpired 2239
172#define ERRbadclient 2240
173#define ERRbadLogonTime 2241
174#define ERRpasswordExpired 2242
175#define ERRnetlogonNotStarted 2455
176#define ERRnosupport 0xFFFF