Add a mechanism to control what the next XID value on a session will be.
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sat, 26 Oct 2013 14:44:29 +0000 (07:44 -0700)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sat, 26 Oct 2013 14:44:29 +0000 (07:44 -0700)
This makes it possible for multiple processes/contexts to use the same
target and (with some synchronization) avoid XID collissions across processes/contexts.

include/nfsc/libnfs-raw.h
lib/pdu.c

index 9a8a4ce864c4913b13019dea264e3f0eef76afe0..47a6333f3d209b2f5912a27812184d7bfcfd6836 100644 (file)
@@ -53,6 +53,12 @@ struct rpc_context *nfs_get_rpc_context(struct nfs_context *nfs);
 */
 struct nfs_fh3 *nfs_get_fh(struct nfsfh *nfsfh);
 
+/* Control what the next XID value to be used on the context will be.
+   This can be used when multiple contexts are used to the same server
+   to avoid that the two contexts have xid collissions.
+ */
+void rpc_set_next_xid(struct rpc_context *rpc, uint32_t xid);
+
 #define RPC_STATUS_SUCCESS             0
 #define RPC_STATUS_ERROR               1
 #define RPC_STATUS_CANCEL              2
index 8de51d2fb56025ea7750f84f7126afd5b412eb58..c2538efa8e127cf7240545c1a4e42560a112d6ff 100644 (file)
--- a/lib/pdu.c
+++ b/lib/pdu.c
@@ -113,6 +113,10 @@ void rpc_free_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu)
        free(pdu);
 }
 
+void rpc_set_next_xid(struct rpc_context *rpc, uint32_t xid)
+{
+       rpc->xid = xid;
+}
 
 int rpc_queue_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu)
 {