#define encode_dirpath_sz      (1 + XDR_QUADLEN(MNTPATHLEN))
 #define MNT_status_sz          (1)
 #define MNT_fhs_status_sz      (1)
+#define MNT_fhandle_sz         XDR_QUADLEN(NFS2_FHSIZE)
+#define MNT_fhandle3_sz                (1 + XDR_QUADLEN(NFS3_FHSIZE))
 
 /*
  * XDR argument and result sizes
        return 0;
 }
 
+static int decode_fhandle(struct xdr_stream *xdr, struct mountres *res)
+{
+       struct nfs_fh *fh = res->fh;
+       __be32 *p;
+
+       p = xdr_inline_decode(xdr, NFS2_FHSIZE);
+       if (unlikely(p == NULL))
+               return -EIO;
+
+       fh->size = NFS2_FHSIZE;
+       memcpy(fh->data, p, NFS2_FHSIZE);
+       return 0;
+}
+
 static int decode_fhs_status(struct xdr_stream *xdr, struct mountres *res)
 {
        unsigned int i;
        return 0;
 }
 
+static int decode_fhandle3(struct xdr_stream *xdr, struct mountres *res)
+{
+       struct nfs_fh *fh = res->fh;
+       u32 size;
+       __be32 *p;
+
+       p = xdr_inline_decode(xdr, sizeof(size));
+       if (unlikely(p == NULL))
+               return -EIO;
+
+       size = ntohl(*p++);
+       if (size > NFS3_FHSIZE || size == 0)
+               return -EIO;
+
+       p = xdr_inline_decode(xdr, size);
+       if (unlikely(p == NULL))
+               return -EIO;
+
+       fh->size = size;
+       memcpy(fh->data, p, size);
+       return 0;
+}
+
 static int xdr_decode_fhstatus3(struct rpc_rqst *req, __be32 *p,
                                struct mnt_fhstatus *res)
 {