USB: Fix a memory leak in em28xx_usb_probe()
[cascardo/linux.git] / fs / nfs / nfs2xdr.c
index abd9f8b..c5fce75 100644 (file)
@@ -26,7 +26,6 @@
 #include "internal.h"
 
 #define NFSDBG_FACILITY                NFSDBG_XDR
-/* #define NFS_PARANOIA 1 */
 
 /* Mapping from NFS error code to "errno" error code. */
 #define errno_NFSERR_IO                EIO
@@ -44,6 +43,7 @@
 #define NFS_entry_sz           (NFS_filename_sz+3)
 
 #define NFS_diropargs_sz       (NFS_fhandle_sz+NFS_filename_sz)
+#define NFS_removeargs_sz      (NFS_fhandle_sz+NFS_filename_sz)
 #define NFS_sattrargs_sz       (NFS_fhandle_sz+NFS_sattr_sz)
 #define NFS_readlinkargs_sz    (NFS_fhandle_sz)
 #define NFS_readargs_sz                (NFS_fhandle_sz+3)
@@ -67,7 +67,7 @@
  * Common NFS XDR functions as inlines
  */
 static inline __be32 *
-xdr_encode_fhandle(__be32 *p, struct nfs_fh *fhandle)
+xdr_encode_fhandle(__be32 *p, const struct nfs_fh *fhandle)
 {
        memcpy(p, fhandle->data, NFS2_FHSIZE);
        return p + XDR_QUADLEN(NFS2_FHSIZE);
@@ -205,7 +205,7 @@ nfs_xdr_sattrargs(struct rpc_rqst *req, __be32 *p, struct nfs_sattrargs *args)
 
 /*
  * Encode directory ops argument
- * LOOKUP, REMOVE, RMDIR
+ * LOOKUP, RMDIR
  */
 static int
 nfs_xdr_diropargs(struct rpc_rqst *req, __be32 *p, struct nfs_diropargs *args)
@@ -216,6 +216,18 @@ nfs_xdr_diropargs(struct rpc_rqst *req, __be32 *p, struct nfs_diropargs *args)
        return 0;
 }
 
+/*
+ * Encode REMOVE argument
+ */
+static int
+nfs_xdr_removeargs(struct rpc_rqst *req, __be32 *p, const struct nfs_removeargs *args)
+{
+       p = xdr_encode_fhandle(p, args->fh);
+       p = xdr_encode_array(p, args->name.name, args->name.len);
+       req->rq_slen = xdr_adjust_iovec(req->rq_svec, p);
+       return 0;
+}
+
 /*
  * Arguments to a READ call. Since we read data directly into the page
  * cache, we also set up the reply iovec here so that iov[1] points
@@ -224,7 +236,7 @@ nfs_xdr_diropargs(struct rpc_rqst *req, __be32 *p, struct nfs_diropargs *args)
 static int
 nfs_xdr_readargs(struct rpc_rqst *req, __be32 *p, struct nfs_readargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        u32 offset = (u32)args->offset;
        u32 count = args->count;
@@ -381,7 +393,7 @@ static int
 nfs_xdr_readdirargs(struct rpc_rqst *req, __be32 *p, struct nfs_readdirargs *args)
 {
        struct rpc_task *task = req->rq_task;
-       struct rpc_auth *auth = task->tk_auth;
+       struct rpc_auth *auth = task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
        u32 count = args->count;
 
@@ -542,7 +554,7 @@ nfs_xdr_diropres(struct rpc_rqst *req, __be32 *p, struct nfs_diropok *res)
 static int
 nfs_xdr_readlinkargs(struct rpc_rqst *req, __be32 *p, struct nfs_readlinkargs *args)
 {
-       struct rpc_auth *auth = req->rq_task->tk_auth;
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        unsigned int replen;
 
        p = xdr_encode_fhandle(p, args->fh);
@@ -706,7 +718,7 @@ struct rpc_procinfo nfs_procedures[] = {
     PROC(READ,         readargs,       readres, 3),
     PROC(WRITE,                writeargs,      writeres, 4),
     PROC(CREATE,       createargs,     diropres, 0),
-    PROC(REMOVE,       diropargs,      stat, 0),
+    PROC(REMOVE,       removeargs,     stat, 0),
     PROC(RENAME,       renameargs,     stat, 0),
     PROC(LINK,         linkargs,       stat, 0),
     PROC(SYMLINK,      symlinkargs,    stat, 0),