* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_pmap_getport_async(struct rpc_context *rpc, int program, int version, int protocol, rpc_cb cb, void *private_data);
+EXTERN int rpc_pmap_getport_async(struct rpc_context *rpc, int program, int version, int protocol, rpc_cb cb, void *private_data);
/*
* Call PORTMAPPER/SET
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_pmap_set_async(struct rpc_context *rpc, int program, int version, int protocol, int port, rpc_cb cb, void *private_data);
+EXTERN int rpc_pmap_set_async(struct rpc_context *rpc, int program, int version, int protocol, int port, rpc_cb cb, void *private_data);
/*
* Call PORTMAPPER/UNSET
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_pmap_unset_async(struct rpc_context *rpc, int program, int version, int protocol, int port, rpc_cb cb, void *private_data);
+EXTERN int rpc_pmap_unset_async(struct rpc_context *rpc, int program, int version, int protocol, int port, rpc_cb cb, void *private_data);
/*
* Call PORTMAPPER/CALLIT.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_pmap_callit_async(struct rpc_context *rpc, int program, int version, int procedure, char *data, int datalen, rpc_cb cb, void *private_data);
+EXTERN int rpc_pmap_callit_async(struct rpc_context *rpc, int program, int version, int procedure, char *data, int datalen, rpc_cb cb, void *private_data);
/*
* MOUNT FUNCTIONS
/*
- * NFS FUNCTIONS
+ * NFS v3 FUNCTIONS
*/
struct nfs_fh3;
char *nfsstat3_to_str(int error);
int nfsstat3_to_errno(int error);
/*
- * Call NFS/NULL
+ * Call NFS3/NULL
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+EXTERN int rpc_nfs3_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
EXTERN int rpc_nfs_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
/*
- * Call NFS/GETATTR
+ * Call NFS3/GETATTR
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct GETATTR3args;
+EXTERN int rpc_nfs3_getattr_async(struct rpc_context *rpc, rpc_cb cb, struct GETATTR3args *args, void *private_data);
EXTERN int rpc_nfs_getattr_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
/*
- * Call NFS/PATHCONF
+ * Call NFS3/PATHCONF
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct PATHCONF3args;
+EXTERN int rpc_nfs3_pathconf_async(struct rpc_context *rpc, rpc_cb cb, struct PATHCONF3args *args, void *private_data);
EXTERN int rpc_nfs_pathconf_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
/*
- * Call NFS/LOOKUP
+ * Call NFS3/LOOKUP
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct LOOKUP3args;
+EXTERN int rpc_nfs3_lookup_async(struct rpc_context *rpc, rpc_cb cb, struct LOOKUP3args *args, void *private_data);
EXTERN int rpc_nfs_lookup_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, void *private_data);
/*
- * Call NFS/ACCESS
+ * Call NFS3/ACCESS
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct ACCESS3args;
+EXTERN int rpc_nfs3_access_async(struct rpc_context *rpc, rpc_cb cb, struct ACCESS3args *args, void *private_data);
EXTERN int rpc_nfs_access_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, int access, void *private_data);
/*
- * Call NFS/READ
+ * Call NFS3/READ
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct READ3args;
+EXTERN int rpc_nfs3_read_async(struct rpc_context *rpc, rpc_cb cb, struct READ3args *args, void *private_data);
EXTERN int rpc_nfs_read_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t offset, uint64_t count, void *private_data);
/*
- * Call NFS/WRITE
+ * Call NFS3/WRITE
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct WRITE3args;
+EXTERN int rpc_nfs3_write_async(struct rpc_context *rpc, rpc_cb cb, struct WRITE3args *args, void *private_data);
EXTERN int rpc_nfs_write_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *buf, uint64_t offset, uint64_t count, int stable_how, void *private_data);
/*
- * Call NFS/COMMIT
+ * Call NFS3/COMMIT
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct COMMIT3args;
+EXTERN int rpc_nfs3_commit_async(struct rpc_context *rpc, rpc_cb cb, struct COMMIT3args *args, void *private_data);
EXTERN int rpc_nfs_commit_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
-
/*
- * Call NFS/SETATTR
+ * Call NFS3/SETATTR
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* data is NULL.
*/
struct SETATTR3args;
+EXTERN int rpc_nfs3_setattr_async(struct rpc_context *rpc, rpc_cb cb, struct SETATTR3args *args, void *private_data);
EXTERN int rpc_nfs_setattr_async(struct rpc_context *rpc, rpc_cb cb, struct SETATTR3args *args, void *private_data);
-
-
/*
- * Call NFS/MKDIR
+ * Call NFS3/MKDIR
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* data is NULL.
*/
struct MKDIR3args;
+EXTERN int rpc_nfs3_mkdir_async(struct rpc_context *rpc, rpc_cb cb, struct MKDIR3args *args, void *private_data);
EXTERN int rpc_nfs_mkdir_async(struct rpc_context *rpc, rpc_cb cb, struct MKDIR3args *args, void *private_data);
-
-
-
-
/*
- * Call NFS/RMDIR
+ * Call NFS3/RMDIR
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct RMDIR3args;
+EXTERN int rpc_nfs3_rmdir_async(struct rpc_context *rpc, rpc_cb cb, struct RMDIR3args *args, void *private_data);
EXTERN int rpc_nfs_rmdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *dir, void *private_data);
-
-
-
/*
- * Call NFS/CREATE
+ * Call NFS3/CREATE
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* data is NULL.
*/
struct CREATE3args;
+EXTERN int rpc_nfs3_create_async(struct rpc_context *rpc, rpc_cb cb, struct CREATE3args *args, void *private_data);
EXTERN int rpc_nfs_create_async(struct rpc_context *rpc, rpc_cb cb, struct CREATE3args *args, void *private_data);
-
/*
- * Call NFS/MKNOD
+ * Call NFS3/MKNOD
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct MKNOD3args;
+EXTERN int rpc_nfs3_mknod_async(struct rpc_context *rpc, rpc_cb cb, struct MKNOD3args *args, void *private_data);
EXTERN int rpc_nfs_mknod_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *file, int mode, int major, int minor, void *private_data);
-
/*
- * Call NFS/REMOVE
+ * Call NFS3/REMOVE
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct REMOVE3args;
+EXTERN int rpc_nfs3_remove_async(struct rpc_context *rpc, rpc_cb cb, struct REMOVE3args *args, void *private_data);
EXTERN int rpc_nfs_remove_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, void *private_data);
-
-
/*
- * Call NFS/READDIR
+ * Call NFS3/READDIR
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct READDIR3args;
+EXTERN int rpc_nfs3_readdir_async(struct rpc_context *rpc, rpc_cb cb, struct READDIR3args *args, void *private_data);
EXTERN int rpc_nfs_readdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t cookie, char *cookieverf, int count, void *private_data);
/*
- * Call NFS/READDIRPLUS
+ * Call NFS3/READDIRPLUS
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct READDIRPLUS3args;
+EXTERN int rpc_nfs3_readdirplus_async(struct rpc_context *rpc, rpc_cb cb, struct READDIRPLUS3args *args, void *private_data);
EXTERN int rpc_nfs_readdirplus_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t cookie, char *cookieverf, int count, void *private_data);
/*
- * Call NFS/FSSTAT
+ * Call NFS3/FSSTAT
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct FSSTAT3args;
+EXTERN int rpc_nfs3_fsstat_async(struct rpc_context *rpc, rpc_cb cb, struct FSSTAT3args *args, void *private_data);
EXTERN int rpc_nfs_fsstat_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
-
-
/*
- * Call NFS/FSINFO
+ * Call NFS3/FSINFO
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct FSINFO3args;
+EXTERN int rpc_nfs3_fsinfo_async(struct rpc_context *rpc, rpc_cb cb, struct FSINFO3args *args, void *private_data);
EXTERN int rpc_nfs_fsinfo_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data);
-
-
/*
- * Call NFS/READLINK
+ * Call NFS3/READLINK
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* data is NULL.
*/
struct READLINK3args;
+EXTERN int rpc_nfs3_readlink_async(struct rpc_context *rpc, rpc_cb cb, struct READLINK3args *args, void *private_data);
EXTERN int rpc_nfs_readlink_async(struct rpc_context *rpc, rpc_cb cb, struct READLINK3args *args, void *private_data);
-
-
/*
- * Call NFS/SYMLINK
+ * Call NFS3/SYMLINK
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* data is NULL.
*/
struct SYMLINK3args;
+EXTERN int rpc_nfs3_symlink_async(struct rpc_context *rpc, rpc_cb cb, struct SYMLINK3args *args, void *private_data);
EXTERN int rpc_nfs_symlink_async(struct rpc_context *rpc, rpc_cb cb, struct SYMLINK3args *args, void *private_data);
-
/*
- * Call NFS/RENAME
+ * Call NFS3/RENAME
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct RENAME3args;
+EXTERN int rpc_nfs3_rename_async(struct rpc_context *rpc, rpc_cb cb, struct RENAME3args *args, void *private_data);
EXTERN int rpc_nfs_rename_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *olddir, char *oldname, struct nfs_fh3 *newdir, char *newname, void *private_data);
-
-
/*
- * Call NFS/LINK
+ * Call NFS3/LINK
* Function returns
* 0 : The call was initiated. The callback will be invoked when the call completes.
* <0 : An error occured when trying to set up the call. The callback will not be invoked.
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
+struct LINK3args;
+EXTERN int rpc_nfs3_link_async(struct rpc_context *rpc, rpc_cb cb, struct LINK3args *args, void *private_data);
EXTERN int rpc_nfs_link_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *file, struct nfs_fh3 *newdir, char *newname, void *private_data);
-
-
/*
* RQUOTA FUNCTIONS
*/
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_nlm4_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
+EXTERN int rpc_nlm4_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
/*
* Call NLM/TEST
* data is NULL.
*/
struct NLM4_TESTargs;
-int rpc_nlm4_test_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_TESTargs *args, void *private_data);
+EXTERN int rpc_nlm4_test_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_TESTargs *args, void *private_data);
/*
* Call NLM/LOCK
* data is NULL.
*/
struct NLM4_LOCKargs;
-int rpc_nlm4_lock_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_LOCKargs *args, void *private_data);
+EXTERN int rpc_nlm4_lock_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_LOCKargs *args, void *private_data);
/*
* Call NLM/CANCEL
* data is NULL.
*/
struct NLM4_CANCargs;
-int rpc_nlm4_cancel_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_CANCargs *args, void *private_data);
+EXTERN int rpc_nlm4_cancel_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_CANCargs *args, void *private_data);
/*
* Call NLM/UNLOCK
* data is NULL.
*/
struct NLM4_UNLOCKargs;
-int rpc_nlm4_unlock_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_UNLOCKargs *args, void *private_data);
+EXTERN int rpc_nlm4_unlock_async(struct rpc_context *rpc, rpc_cb cb, struct NLM4_UNLOCKargs *args, void *private_data);
/*
* NSM functions
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_nsm1_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
+EXTERN int rpc_nsm1_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
/*
* Call NSM/STAT
* data is NULL.
*/
struct NSM1_STATargs;
-int rpc_nsm1_stat_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_STATargs *args, void *private_data);
+EXTERN int rpc_nsm1_stat_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_STATargs *args, void *private_data);
/*
* Call NSM/MON
* data is NULL.
*/
struct NSM1_MONargs;
-int rpc_nsm1_mon_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_MONargs *args, void *private_data);
+EXTERN int rpc_nsm1_mon_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_MONargs *args, void *private_data);
/*
* Call NSM/UNMON
* data is NULL.
*/
struct NSM1_UNMONargs;
-int rpc_nsm1_unmon_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_UNMONargs *args, void *private_data);
+EXTERN int rpc_nsm1_unmon_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_UNMONargs *args, void *private_data);
/*
* Call NSM/UNMONALL
* data is NULL.
*/
struct NSM1_UNMONALLargs;
-int rpc_nsm1_unmonall_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_UNMONALLargs *args, void *private_data);
+EXTERN int rpc_nsm1_unmonall_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_UNMONALLargs *args, void *private_data);
/*
* Call NSM/SIMUCRASH
* RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
* data is NULL.
*/
-int rpc_nsm1_simucrash_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
+EXTERN int rpc_nsm1_simucrash_async(struct rpc_context *rpc, rpc_cb cb, void *private_data);
/*
* Call NSM/NOTIFY
* data is NULL.
*/
struct NSM1_NOTIFYargs;
-int rpc_nsm1_notify_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_NOTIFYargs *args, void *private_data);
+EXTERN int rpc_nsm1_notify_async(struct rpc_context *rpc, rpc_cb cb, struct NSM1_NOTIFYargs *args, void *private_data);
#endif
struct nfs_cb_data *data = private_data;
struct nfs_context *nfs = data->nfs;
FSINFO3res *res = command_data;
+ struct GETATTR3args args;
assert(rpc->magic == RPC_CONTEXT_MAGIC);
nfs->readmax = res->FSINFO3res_u.resok.rtmax;
nfs->writemax = res->FSINFO3res_u.resok.wtmax;
- if (rpc_nfs_getattr_async(rpc, nfs_mount_10_cb, &nfs->rootfh, data) != 0) {
+ memset(&args, 0, sizeof(GETATTR3args));
+ args.object.data.data_len = nfs->rootfh.data.data_len;
+ args.object.data.data_val = nfs->rootfh.data.data_val;
+
+ if (rpc_nfs3_getattr_async(rpc, nfs_mount_10_cb, &args, data) != 0) {
data->cb(-ENOMEM, nfs, command_data, data->private_data);
free_nfs_cb_data(data);
return;
static int nfs_lookup_path_async_internal(struct nfs_context *nfs, struct nfs_cb_data *data, struct nfs_fh3 *fh)
{
char *path, *str;
+ LOOKUP3args args;
while (*data->path == '/') {
data->path++;
return 0;
}
- if (rpc_nfs_lookup_async(nfs->rpc, nfs_lookup_path_1_cb, fh, path, data) != 0) {
+
+ memset(&args, 0, sizeof(LOOKUP3args));
+ args.what.dir.data.data_len = fh->data.data_len;
+ args.what.dir.data.data_val = fh->data.data_val;
+ args.what.name = path;
+
+ if (rpc_nfs3_lookup_async(nfs->rpc, nfs_lookup_path_1_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send lookup call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
static int nfs_stat_continue_internal(struct nfs_context *nfs, struct nfs_cb_data *data)
{
- if (rpc_nfs_getattr_async(nfs->rpc, nfs_stat_1_cb, &data->fh, data) != 0) {
+ struct GETATTR3args args;
+
+ memset(&args, 0, sizeof(GETATTR3args));
+ args.object.data.data_len = data->fh.data.data_len;
+ args.object.data.data_val = data->fh.data.data_val;
+
+ if (rpc_nfs3_getattr_async(nfs->rpc, nfs_stat_1_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send STAT GETATTR call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
static int nfs_open_continue_internal(struct nfs_context *nfs, struct nfs_cb_data *data)
{
int nfsmode = 0;
+ ACCESS3args args;
if (data->continue_int & O_WRONLY) {
nfsmode |= ACCESS3_MODIFY;
nfsmode |= ACCESS3_READ;
}
- if (rpc_nfs_access_async(nfs->rpc, nfs_open_cb, &data->fh, nfsmode, data) != 0) {
+ memset(&args, 0, sizeof(ACCESS3args));
+ args.object.data.data_len = data->fh.data.data_len;
+ args.object.data.data_val = data->fh.data.data_val;
+ args.access = nfsmode;
+
+ if (rpc_nfs3_access_async(nfs->rpc, nfs_open_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send OPEN ACCESS call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
nfsfh->offset = offset;
if (count <= nfs_get_readmax(nfs)) {
- if (rpc_nfs_read_async(nfs->rpc, nfs_pread_cb, &nfsfh->fh, offset, count, data) != 0) {
+ READ3args args;
+
+ memset(&args, 0, sizeof(READ3args));
+ args.file.data.data_len = nfsfh->fh.data.data_len;
+ args.file.data.data_val = nfsfh->fh.data.data_val;
+ args.offset = offset;
+ args.count = count;
+
+ if (rpc_nfs3_read_async(nfs->rpc, nfs_pread_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send READ call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
while (count > 0) {
uint64_t readcount = count;
struct nfs_mcb_data *mdata;
+ READ3args args;
if (readcount > nfs_get_readmax(nfs)) {
readcount = nfs_get_readmax(nfs);
mdata->data = data;
mdata->offset = offset;
mdata->count = readcount;
- if (rpc_nfs_read_async(nfs->rpc, nfs_pread_mcb, &nfsfh->fh, offset, readcount, mdata) != 0) {
+
+ memset(&args, 0, sizeof(READ3args));
+ args.file.data.data_len = nfsfh->fh.data.data_len;
+ args.file.data.data_val = nfsfh->fh.data.data_val;
+ args.offset = offset;
+ args.count = readcount;
+
+ if (rpc_nfs3_read_async(nfs->rpc, nfs_pread_mcb, &args, mdata) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send READ call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free(mdata);
nfsfh->offset = offset;
if (count <= nfs_get_writemax(nfs)) {
- if (rpc_nfs_write_async(nfs->rpc, nfs_pwrite_cb, &nfsfh->fh, buf, offset, count, nfsfh->is_sync?FILE_SYNC:UNSTABLE, data) != 0) {
+ WRITE3args args;
+
+ memset(&args, 0, sizeof(WRITE3args));
+ args.file.data.data_len = nfsfh->fh.data.data_len;
+ args.file.data.data_val = nfsfh->fh.data.data_val;
+ args.offset = offset;
+ args.count = count;
+ args.stable = nfsfh->is_sync?FILE_SYNC:UNSTABLE;
+ args.data.data_len = count;
+ args.data.data_val = buf;
+
+ if (rpc_nfs3_write_async(nfs->rpc, nfs_pwrite_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send WRITE call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
while (count > 0) {
uint64_t writecount = count;
struct nfs_mcb_data *mdata;
+ WRITE3args args;
if (writecount > nfs_get_writemax(nfs)) {
writecount = nfs_get_writemax(nfs);
mdata->offset = offset;
mdata->count = writecount;
- if (rpc_nfs_write_async(nfs->rpc, nfs_pwrite_mcb, &nfsfh->fh, &buf[offset - data->start_offset], offset, writecount, nfsfh->is_sync?FILE_SYNC:UNSTABLE, mdata) != 0) {
+ memset(&args, 0, sizeof(WRITE3args));
+ args.file.data.data_len = nfsfh->fh.data.data_len;
+ args.file.data.data_val = nfsfh->fh.data.data_val;
+ args.offset = offset;
+ args.count = writecount;
+ args.stable = nfsfh->is_sync?FILE_SYNC:UNSTABLE;
+ args.data.data_len = writecount;
+ args.data.data_val = &buf[offset - data->start_offset];
+
+ if (rpc_nfs3_write_async(nfs->rpc, nfs_pwrite_mcb, &args, mdata) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send WRITE call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free(mdata);
int nfs_fstat_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_cb cb, void *private_data)
{
struct nfs_cb_data *data;
+ struct GETATTR3args args;
data = malloc(sizeof(struct nfs_cb_data));
if (data == NULL) {
data->cb = cb;
data->private_data = private_data;
- if (rpc_nfs_getattr_async(nfs->rpc, nfs_stat_1_cb, &nfsfh->fh, data) != 0) {
+ memset(&args, 0, sizeof(GETATTR3args));
+ args.object.data.data_len = nfsfh->fh.data.data_len;
+ args.object.data.data_val = nfsfh->fh.data.data_val;
+
+ if (rpc_nfs3_getattr_async(nfs->rpc, nfs_stat_1_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send STAT GETATTR call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
struct nfs_cb_data *data = private_data;
struct nfs_context *nfs = data->nfs;
char *str = data->continue_data;
+ LOOKUP3args args;
assert(rpc->magic == RPC_CONTEXT_MAGIC);
return;
}
- if (rpc_nfs_lookup_async(nfs->rpc, nfs_create_2_cb, &data->fh, str, data) != 0) {
+ memset(&args, 0, sizeof(LOOKUP3args));
+ args.what.dir.data.data_len = data->fh.data.data_len;
+ args.what.dir.data.data_val = data->fh.data.data_val;
+ args.what.name = str;
+
+ if (rpc_nfs3_lookup_async(nfs->rpc, nfs_create_2_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send lookup call for %s/%s", data->saved_path, str);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
rdpe_cb_data->data = data;
for (nfsdirent = nfsdir->entries; nfsdirent; nfsdirent = nfsdirent->next) {
struct rdpe_lookup_cb_data *rdpe_lookup_cb_data;
+ LOOKUP3args args;
rdpe_lookup_cb_data = malloc(sizeof(struct rdpe_lookup_cb_data));
rdpe_lookup_cb_data->rdpe_cb_data = rdpe_cb_data;
rdpe_lookup_cb_data->nfsdirent = nfsdirent;
- if (rpc_nfs_lookup_async(nfs->rpc, nfs_opendir3_cb, &data->fh, nfsdirent->name, rdpe_lookup_cb_data) != 0) {
+ memset(&args, 0, sizeof(LOOKUP3args));
+ args.what.dir.data.data_len = data->fh.data.data_len;
+ args.what.dir.data.data_val = data->fh.data.data_val;
+ args.what.name = nfsdirent->name;
+
+ if (rpc_nfs3_lookup_async(nfs->rpc, nfs_opendir3_cb, &args, rdpe_lookup_cb_data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send READDIR LOOKUP call");
/* if we have already commands in flight, we cant just stop, we have to wait for the
int nfs_lseek_async(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, int whence, nfs_cb cb, void *private_data)
{
struct lseek_cb_data *data;
+ struct GETATTR3args args;
if (whence == SEEK_SET) {
nfsfh->offset = offset;
data->cb = cb;
data->private_data = private_data;
- if (rpc_nfs_getattr_async(nfs->rpc, nfs_lseek_1_cb, &nfsfh->fh, data) != 0) {
+ memset(&args, 0, sizeof(GETATTR3args));
+ args.object.data.data_len = nfsfh->fh.data.data_len;
+ args.object.data.data_val = nfsfh->fh.data.data_val;
+
+ if (rpc_nfs3_getattr_async(nfs->rpc, nfs_lseek_1_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send LSEEK GETATTR call");
free(data);
return -1;
static int nfs_access_continue_internal(struct nfs_context *nfs, struct nfs_cb_data *data)
{
int nfsmode = 0;
+ ACCESS3args args;
if (data->continue_int & R_OK) {
nfsmode |= ACCESS3_READ;
nfsmode |= ACCESS3_EXECUTE;
}
- if (rpc_nfs_access_async(nfs->rpc, nfs_access_cb, &data->fh, nfsmode, data) != 0) {
+ memset(&args, 0, sizeof(ACCESS3args));
+ args.object.data.data_len = data->fh.data.data_len;
+ args.object.data.data_val = data->fh.data.data_val;
+ args.access = nfsmode;
+
+ if (rpc_nfs3_access_async(nfs->rpc, nfs_access_cb, &args, data) != 0) {
rpc_set_error(nfs->rpc, "RPC error: Failed to send OPEN ACCESS call for %s", data->path);
data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
free_nfs_cb_data(data);
}
-int rpc_nfs_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data)
+/*
+ * NFSv3
+ */
+int rpc_nfs3_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data)
{
struct rpc_pdu *pdu;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_NULL, cb, private_data, (zdrproc_t)zdr_void, 0);
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/null call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/NULL call");
return -1;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/null call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/NULL call");
rpc_free_pdu(rpc, pdu);
return -2;
}
return 0;
}
-int rpc_nfs_getattr_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+int rpc_nfs_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data)
+{
+ return rpc_nfs3_null_async(rpc, cb, private_data);
+}
+
+int rpc_nfs3_getattr_async(struct rpc_context *rpc, rpc_cb cb, struct GETATTR3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- GETATTR3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_GETATTR, cb, private_data, (zdrproc_t)zdr_GETATTR3res, sizeof(GETATTR3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/null call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/GETATTR call");
return -1;
}
- args.object.data.data_len = fh->data.data_len;
- args.object.data.data_val = fh->data.data_val;
-
- if (zdr_GETATTR3args(&pdu->zdr, &args) == 0) {
+ if (zdr_GETATTR3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode GETATTR3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/getattr call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/GETATTR call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
-int rpc_nfs_pathconf_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+int rpc_nfs_getattr_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+{
+ GETATTR3args args;
+
+ memset(&args, 0, sizeof(GETATTR3args));
+ args.object.data.data_len = fh->data.data_len;
+ args.object.data.data_val = fh->data.data_val;
+
+ return rpc_nfs3_getattr_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_pathconf_async(struct rpc_context *rpc, rpc_cb cb, struct PATHCONF3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- PATHCONF3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_PATHCONF, cb, private_data, (zdrproc_t)zdr_PATHCONF3res, sizeof(PATHCONF3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/pathconf call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/PATHCONF call");
return -1;
}
- args.object.data.data_len = fh->data.data_len;
- args.object.data.data_val = fh->data.data_val;
-
- if (zdr_PATHCONF3args(&pdu->zdr, &args) == 0) {
+ if (zdr_PATHCONF3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode PATHCONF3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/pathconf call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/PATHCONF call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
-int rpc_nfs_lookup_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, void *private_data)
+int rpc_nfs_pathconf_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+{
+ PATHCONF3args args;
+
+ memset(&args, 0, sizeof(PATHCONF3args));
+ args.object.data.data_len = fh->data.data_len;
+ args.object.data.data_val = fh->data.data_val;
+
+ return rpc_nfs3_pathconf_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_lookup_async(struct rpc_context *rpc, rpc_cb cb, struct LOOKUP3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- LOOKUP3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_LOOKUP, cb, private_data, (zdrproc_t)zdr_LOOKUP3res, sizeof(LOOKUP3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/lookup call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/LOOKUP call");
return -1;
}
- args.what.dir.data.data_len = fh->data.data_len;
- args.what.dir.data.data_val = fh->data.data_val;
- args.what.name = name;
-
- if (zdr_LOOKUP3args(&pdu->zdr, &args) == 0) {
+ if (zdr_LOOKUP3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode LOOKUP3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/lookup call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/LOOKUP call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_lookup_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *name, void *private_data)
+{
+ LOOKUP3args args;
-int rpc_nfs_access_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, int access, void *private_data)
+ memset(&args, 0, sizeof(LOOKUP3args));
+ args.what.dir.data.data_len = fh->data.data_len;
+ args.what.dir.data.data_val = fh->data.data_val;
+ args.what.name = name;
+
+ return rpc_nfs3_lookup_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_access_async(struct rpc_context *rpc, rpc_cb cb, struct ACCESS3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- ACCESS3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_ACCESS, cb, private_data, (zdrproc_t)zdr_ACCESS3res, sizeof(ACCESS3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/access call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/ACCESS call");
return -1;
}
- args.object.data.data_len = fh->data.data_len;
- args.object.data.data_val = fh->data.data_val;
- args.access = access;
-
- if (zdr_ACCESS3args(&pdu->zdr, &args) == 0) {
+ if (zdr_ACCESS3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode ACCESS3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/access call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/ACCESS call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_access_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, int access, void *private_data)
+{
+ ACCESS3args args;
+
+ memset(&args, 0, sizeof(ACCESS3args));
+ args.object.data.data_len = fh->data.data_len;
+ args.object.data.data_val = fh->data.data_val;
+ args.access = access;
+ return rpc_nfs3_access_async(rpc, cb, &args, private_data);
+}
-int rpc_nfs_read_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t offset, uint64_t count, void *private_data)
+int rpc_nfs3_read_async(struct rpc_context *rpc, rpc_cb cb, struct READ3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- READ3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_READ, cb, private_data, (zdrproc_t)zdr_READ3res, sizeof(READ3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/read call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/READ call");
return -1;
}
- args.file.data.data_len = fh->data.data_len;
- args.file.data.data_val = fh->data.data_val;
- args.offset = offset;
- args.count = count;
-
- if (zdr_READ3args(&pdu->zdr, &args) == 0) {
+ if (zdr_READ3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode READ3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/read call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/READ call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_read_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t offset, uint64_t count, void *private_data)
+{
+ READ3args args;
-int rpc_nfs_write_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *buf, uint64_t offset, uint64_t count, int stable_how, void *private_data)
+ memset(&args, 0, sizeof(READ3args));
+ args.file.data.data_len = fh->data.data_len;
+ args.file.data.data_val = fh->data.data_val;
+ args.offset = offset;
+ args.count = count;
+
+ return rpc_nfs3_read_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_write_async(struct rpc_context *rpc, rpc_cb cb, struct WRITE3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- WRITE3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_WRITE, cb, private_data, (zdrproc_t)zdr_WRITE3res, sizeof(WRITE3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/write call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/WRITE call");
return -1;
}
- args.file.data.data_len = fh->data.data_len;
- args.file.data.data_val = fh->data.data_val;
- args.offset = offset;
- args.count = count;
- args.stable = stable_how;
- args.data.data_len = count;
- args.data.data_val = buf;
-
- if (zdr_WRITE3args(&pdu->zdr, &args) == 0) {
+ if (zdr_WRITE3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode WRITE3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/write call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/WRITE call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_write_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *buf, uint64_t offset, uint64_t count, int stable_how, void *private_data)
+{
+ WRITE3args args;
+
+ memset(&args, 0, sizeof(WRITE3args));
+ args.file.data.data_len = fh->data.data_len;
+ args.file.data.data_val = fh->data.data_val;
+ args.offset = offset;
+ args.count = count;
+ args.stable = stable_how;
+ args.data.data_len = count;
+ args.data.data_val = buf;
+ return rpc_nfs3_write_async(rpc, cb, &args, private_data);
+}
-int rpc_nfs_commit_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+int rpc_nfs3_commit_async(struct rpc_context *rpc, rpc_cb cb, struct COMMIT3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- COMMIT3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_COMMIT, cb, private_data, (zdrproc_t)zdr_COMMIT3res, sizeof(COMMIT3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/commit call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/COMMIT call");
return -1;
}
- args.file.data.data_len = fh->data.data_len;
- args.file.data.data_val = fh->data.data_val;
- args.offset = 0;
- args.count = 0;
-
- if (zdr_COMMIT3args(&pdu->zdr, &args) == 0) {
- rpc_set_error(rpc, "ZDR error: Failed to encode WRITE3args");
+ if (zdr_COMMIT3args(&pdu->zdr, args) == 0) {
+ rpc_set_error(rpc, "ZDR error: Failed to encode COMMIT3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/commit call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/COMMIT call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_commit_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+{
+ COMMIT3args args;
-int rpc_nfs_setattr_async(struct rpc_context *rpc, rpc_cb cb, SETATTR3args *args, void *private_data)
+ memset(&args, 0, sizeof(COMMIT3args));
+ args.file.data.data_len = fh->data.data_len;
+ args.file.data.data_val = fh->data.data_val;
+ args.offset = 0;
+ args.count = 0;
+
+ return rpc_nfs3_commit_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_setattr_async(struct rpc_context *rpc, rpc_cb cb, SETATTR3args *args, void *private_data)
{
struct rpc_pdu *pdu;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_SETATTR, cb, private_data, (zdrproc_t)zdr_SETATTR3res, sizeof(SETATTR3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/setattr call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/SETATTR call");
return -1;
}
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/setattr call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/SETATTR call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_setattr_async(struct rpc_context *rpc, rpc_cb cb, SETATTR3args *args, void *private_data)
+{
+ return rpc_nfs3_setattr_async(rpc, cb, args, private_data);
+}
-
-int rpc_nfs_mkdir_async(struct rpc_context *rpc, rpc_cb cb, MKDIR3args *args, void *private_data)
+int rpc_nfs3_mkdir_async(struct rpc_context *rpc, rpc_cb cb, MKDIR3args *args, void *private_data)
{
struct rpc_pdu *pdu;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_MKDIR, cb, private_data, (zdrproc_t)zdr_MKDIR3res, sizeof(MKDIR3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/setattr call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/MKDIR call");
return -1;
}
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/mkdir call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/MKDIR call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_mkdir_async(struct rpc_context *rpc, rpc_cb cb, MKDIR3args *args, void *private_data)
+{
+ return rpc_nfs3_mkdir_async(rpc, cb, args, private_data);
+}
-
-
-int rpc_nfs_rmdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *dir, void *private_data)
+int rpc_nfs3_rmdir_async(struct rpc_context *rpc, rpc_cb cb, struct RMDIR3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- RMDIR3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_RMDIR, cb, private_data, (zdrproc_t)zdr_RMDIR3res, sizeof(RMDIR3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/rmdir call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/RMDIR call");
return -1;
}
- memset(&args, 0, sizeof(RMDIR3args));
- args.object.dir.data.data_len = fh->data.data_len;
- args.object.dir.data.data_val = fh->data.data_val;
- args.object.name = dir;
-
- if (zdr_RMDIR3args(&pdu->zdr, &args) == 0) {
+ if (zdr_RMDIR3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode RMDIR3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/rmdir call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/RMDIR call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_rmdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *dir, void *private_data)
+{
+ RMDIR3args args;
+
+ memset(&args, 0, sizeof(RMDIR3args));
+ args.object.dir.data.data_len = fh->data.data_len;
+ args.object.dir.data.data_val = fh->data.data_val;
+ args.object.name = dir;
+ return rpc_nfs3_rmdir_async(rpc, cb, &args, private_data);
+}
-int rpc_nfs_create_async(struct rpc_context *rpc, rpc_cb cb, CREATE3args *args, void *private_data)
+int rpc_nfs3_create_async(struct rpc_context *rpc, rpc_cb cb, CREATE3args *args, void *private_data)
{
struct rpc_pdu *pdu;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_CREATE, cb, private_data, (zdrproc_t)zdr_CREATE3res, sizeof(CREATE3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/create call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/CREATE call");
return -1;
}
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/create call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/CREATE call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_create_async(struct rpc_context *rpc, rpc_cb cb, CREATE3args *args, void *private_data)
+{
+ return rpc_nfs3_create_async(rpc, cb, args, private_data);
+}
-
-int rpc_nfs_mknod_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *file, int mode, int major, int minor, void *private_data)
+int rpc_nfs3_mknod_async(struct rpc_context *rpc, rpc_cb cb, struct MKNOD3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- MKNOD3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_MKNOD, cb, private_data, (zdrproc_t)zdr_MKNOD3res, sizeof(MKNOD3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/mknod call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/MKNOD call");
return -1;
}
+ if (zdr_MKNOD3args(&pdu->zdr, args) == 0) {
+ rpc_set_error(rpc, "ZDR error: Failed to encode MKNOD3args");
+ rpc_free_pdu(rpc, pdu);
+ return -2;
+ }
+
+ if (rpc_queue_pdu(rpc, pdu) != 0) {
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/MKNOD call");
+ rpc_free_pdu(rpc, pdu);
+ return -3;
+ }
+
+ return 0;
+}
+
+int rpc_nfs_mknod_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *file, int mode, int major, int minor, void *private_data)
+{
+ MKNOD3args args;
+
memset(&args, 0, sizeof(MKNOD3args));
args.where.dir.data.data_len = fh->data.data_len;
args.where.dir.data.data_val = fh->data.data_val;
args.where.name = file;
+
switch (mode & S_IFMT) {
case S_IFCHR:
args.what.type = NF3CHR;
args.what.mknoddata3_u.pipe_attributes.mode.set_mode3_u.mode = mode & (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH);
break;
default:
- rpc_set_error(rpc, "Invalid file type for nfs/mknod call");
- rpc_free_pdu(rpc, pdu);
+ rpc_set_error(rpc, "Invalid file type for NFS3/MKNOD call");
return -1;
}
- if (zdr_MKNOD3args(&pdu->zdr, &args) == 0) {
- rpc_set_error(rpc, "ZDR error: Failed to encode MKNOD3args");
+ return rpc_nfs3_mknod_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_remove_async(struct rpc_context *rpc, rpc_cb cb, struct REMOVE3args *args, void *private_data)
+{
+ struct rpc_pdu *pdu;
+
+ pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_REMOVE, cb, private_data, (zdrproc_t)zdr_REMOVE3res, sizeof(REMOVE3res));
+ if (pdu == NULL) {
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/REMOVE call");
+ return -1;
+ }
+
+ if (zdr_REMOVE3args(&pdu->zdr, args) == 0) {
+ rpc_set_error(rpc, "ZDR error: Failed to encode REMOVE3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/mknod call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/REMOVE call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
-
int rpc_nfs_remove_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, char *file, void *private_data)
{
- struct rpc_pdu *pdu;
REMOVE3args args;
- pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_REMOVE, cb, private_data, (zdrproc_t)zdr_REMOVE3res, sizeof(REMOVE3res));
- if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/remove call");
- return -1;
- }
-
memset(&args, 0, sizeof(REMOVE3args));
args.object.dir.data.data_len = fh->data.data_len;
args.object.dir.data.data_val = fh->data.data_val;
args.object.name = file;
- if (zdr_REMOVE3args(&pdu->zdr, &args) == 0) {
- rpc_set_error(rpc, "ZDR error: Failed to encode REMOVE3args");
+ return rpc_nfs3_remove_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_readdir_async(struct rpc_context *rpc, rpc_cb cb, struct READDIR3args *args, void *private_data)
+{
+ struct rpc_pdu *pdu;
+
+ pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_READDIR, cb, private_data, (zdrproc_t)zdr_READDIR3res, sizeof(READDIR3res));
+ if (pdu == NULL) {
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/READDIR call");
+ return -1;
+ }
+
+ if (zdr_READDIR3args(&pdu->zdr, args) == 0) {
+ rpc_set_error(rpc, "ZDR error: Failed to encode READDIR3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/remove call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/READDIR call");
rpc_free_pdu(rpc, pdu);
return -3;
}
int rpc_nfs_readdir_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t cookie, char *cookieverf, int count, void *private_data)
{
- struct rpc_pdu *pdu;
READDIR3args args;
- pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_READDIR, cb, private_data, (zdrproc_t)zdr_READDIR3res, sizeof(READDIR3res));
- if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/readdir call");
- return -1;
- }
-
memset(&args, 0, sizeof(READDIR3args));
args.dir.data.data_len = fh->data.data_len;
args.dir.data.data_val = fh->data.data_val;
memcpy(&args.cookieverf, cookieverf, sizeof(cookieverf3));
args.count = count;
- if (zdr_READDIR3args(&pdu->zdr, &args) == 0) {
- rpc_set_error(rpc, "ZDR error: Failed to encode READDIR3args");
+ return rpc_nfs3_readdir_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_readdirplus_async(struct rpc_context *rpc, rpc_cb cb, struct READDIRPLUS3args *args, void *private_data)
+{
+ struct rpc_pdu *pdu;
+
+ pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_READDIRPLUS, cb, private_data, (zdrproc_t)zdr_READDIRPLUS3res, sizeof(READDIRPLUS3res));
+ if (pdu == NULL) {
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/READDIRPLUS call");
+ return -1;
+ }
+
+ if (zdr_READDIRPLUS3args(&pdu->zdr, args) == 0) {
+ rpc_set_error(rpc, "ZDR error: Failed to encode READDIRPLUS3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/readdir call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/READDIRPLUS call");
rpc_free_pdu(rpc, pdu);
return -3;
}
int rpc_nfs_readdirplus_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint64_t cookie, char *cookieverf, int count, void *private_data)
{
- struct rpc_pdu *pdu;
READDIRPLUS3args args;
- pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_READDIRPLUS, cb, private_data, (zdrproc_t)zdr_READDIRPLUS3res, sizeof(READDIRPLUS3res));
- if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/readdirplus call");
- return -1;
- }
-
memset(&args, 0, sizeof(READDIRPLUS3args));
args.dir.data.data_len = fh->data.data_len;
args.dir.data.data_val = fh->data.data_val;
args.dircount = count;
args.maxcount = count;
- if (zdr_READDIRPLUS3args(&pdu->zdr, &args) == 0) {
- rpc_set_error(rpc, "ZDR error: Failed to encode READDIRPLUS3args");
- rpc_free_pdu(rpc, pdu);
- return -2;
- }
-
- if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/readdirplus call");
- rpc_free_pdu(rpc, pdu);
- return -3;
- }
-
- return 0;
+ return rpc_nfs3_readdirplus_async(rpc, cb, &args, private_data);
}
-int rpc_nfs_fsstat_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+int rpc_nfs3_fsstat_async(struct rpc_context *rpc, rpc_cb cb, struct FSSTAT3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- FSSTAT3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_FSSTAT, cb, private_data, (zdrproc_t)zdr_FSSTAT3res, sizeof(FSSTAT3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/fsstat call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/FSSTAT call");
return -1;
}
- args.fsroot.data.data_len = fh->data.data_len;
- args.fsroot.data.data_val = fh->data.data_val;
-
- if (zdr_FSSTAT3args(&pdu->zdr, &args) == 0) {
+ if (zdr_FSSTAT3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode FSSTAT3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/fsstat call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/FSSTAT call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
-int rpc_nfs_fsinfo_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+int rpc_nfs_fsstat_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+{
+ FSSTAT3args args;
+
+ memset(&args, 0, sizeof(FSSTAT3args));
+ args.fsroot.data.data_len = fh->data.data_len;
+ args.fsroot.data.data_val = fh->data.data_val;
+
+ return rpc_nfs3_fsstat_async(rpc, cb, &args, private_data);
+}
+
+int rpc_nfs3_fsinfo_async(struct rpc_context *rpc, rpc_cb cb, struct FSINFO3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- FSINFO3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_FSINFO, cb, private_data, (zdrproc_t)zdr_FSINFO3res, sizeof(FSINFO3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/fsinfo call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/FSINFO call");
return -1;
}
- args.fsroot.data.data_len = fh->data.data_len;
- args.fsroot.data.data_val = fh->data.data_val;
-
- if (zdr_FSINFO3args(&pdu->zdr, &args) == 0) {
+ if (zdr_FSINFO3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode FSINFO3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/fsinfo call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/FSINFO call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
-int rpc_nfs_readlink_async(struct rpc_context *rpc, rpc_cb cb, READLINK3args *args, void *private_data)
+int rpc_nfs_fsinfo_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, void *private_data)
+{
+ FSINFO3args args;
+
+ memset(&args, 0, sizeof(FSINFO3args));
+ args.fsroot.data.data_len = fh->data.data_len;
+ args.fsroot.data.data_val = fh->data.data_val;
+
+ return rpc_nfs3_fsinfo_async(rpc, cb, fh, private_data);
+}
+
+int rpc_nfs3_readlink_async(struct rpc_context *rpc, rpc_cb cb, READLINK3args *args, void *private_data)
{
struct rpc_pdu *pdu;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_READLINK, cb, private_data, (zdrproc_t)zdr_READLINK3res, sizeof(READLINK3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/readlink call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/READLINK call");
return -1;
}
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/readlink call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/READLINK call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_readlink_async(struct rpc_context *rpc, rpc_cb cb, READLINK3args *args, void *private_data)
+{
+ return rpc_nfs3_readlink_async(rpc, cb, args, private_data);
+}
-int rpc_nfs_symlink_async(struct rpc_context *rpc, rpc_cb cb, SYMLINK3args *args, void *private_data)
+int rpc_nfs3_symlink_async(struct rpc_context *rpc, rpc_cb cb, SYMLINK3args *args, void *private_data)
{
struct rpc_pdu *pdu;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_SYMLINK, cb, private_data, (zdrproc_t)zdr_SYMLINK3res, sizeof(SYMLINK3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/symlink call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/SYMLINK call");
return -1;
}
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/symlink call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/SYMLINK call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_symlink_async(struct rpc_context *rpc, rpc_cb cb, SYMLINK3args *args, void *private_data)
+{
+ return rpc_nfs3_symlink_async(rpc, cb, args, private_data);
+}
-
-
-int rpc_nfs_rename_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *olddir, char *oldname, struct nfs_fh3 *newdir, char *newname, void *private_data)
+int rpc_nfs3_rename_async(struct rpc_context *rpc, rpc_cb cb, struct RENAME3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- RENAME3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_RENAME, cb, private_data, (zdrproc_t)zdr_RENAME3res, sizeof(RENAME3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/rename call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/RENAME call");
return -1;
}
- memset(&args, 0, sizeof(RENAME3args));
- args.from.dir.data.data_len = olddir->data.data_len;
- args.from.dir.data.data_val = olddir->data.data_val;
- args.from.name = oldname;
- args.to.dir.data.data_len = newdir->data.data_len;
- args.to.dir.data.data_val = newdir->data.data_val;
- args.to.name = newname;
-
- if (zdr_RENAME3args(&pdu->zdr, &args) == 0) {
+ if (zdr_RENAME3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode RENAME3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/rename call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/RENAME call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_rename_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *olddir, char *oldname, struct nfs_fh3 *newdir, char *newname, void *private_data)
+{
+ RENAME3args args;
+ memset(&args, 0, sizeof(RENAME3args));
+ args.from.dir.data.data_len = olddir->data.data_len;
+ args.from.dir.data.data_val = olddir->data.data_val;
+ args.from.name = oldname;
+ args.to.dir.data.data_len = newdir->data.data_len;
+ args.to.dir.data.data_val = newdir->data.data_val;
+ args.to.name = newname;
+ return rpc_nfs3_rename_async(rpc, cb, &args, private_data);
+}
-int rpc_nfs_link_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *file, struct nfs_fh3 *newdir, char *newname, void *private_data)
+int rpc_nfs3_link_async(struct rpc_context *rpc, rpc_cb cb, struct LINK3args *args, void *private_data)
{
struct rpc_pdu *pdu;
- LINK3args args;
pdu = rpc_allocate_pdu(rpc, NFS_PROGRAM, NFS_V3, NFS3_LINK, cb, private_data, (zdrproc_t)zdr_LINK3res, sizeof(LINK3res));
if (pdu == NULL) {
- rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfs/link call");
+ rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for NFS3/LINK call");
return -1;
}
- memset(&args, 0, sizeof(LINK3args));
- args.file.data.data_len = file->data.data_len;
- args.file.data.data_val = file->data.data_val;
- args.link.dir.data.data_len = newdir->data.data_len;
- args.link.dir.data.data_val = newdir->data.data_val;
- args.link.name = newname;
-
- if (zdr_LINK3args(&pdu->zdr, &args) == 0) {
+ if (zdr_LINK3args(&pdu->zdr, args) == 0) {
rpc_set_error(rpc, "ZDR error: Failed to encode LINK3args");
rpc_free_pdu(rpc, pdu);
return -2;
}
if (rpc_queue_pdu(rpc, pdu) != 0) {
- rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfs/link call");
+ rpc_set_error(rpc, "Out of memory. Failed to queue pdu for NFS3/LINK call");
rpc_free_pdu(rpc, pdu);
return -3;
}
return 0;
}
+int rpc_nfs_link_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *file, struct nfs_fh3 *newdir, char *newname, void *private_data)
+{
+ LINK3args args;
+
+ memset(&args, 0, sizeof(LINK3args));
+ args.file.data.data_len = file->data.data_len;
+ args.file.data.data_val = file->data.data_val;
+ args.link.dir.data.data_len = newdir->data.data_len;
+ args.link.dir.data.data_val = newdir->data.data_val;
+ args.link.name = newname;
+
+ return rpc_nfs3_link_async(rpc, cb, &args, private_data);
+}