Add a call to find the queue-length so we can see how many I/O we have in flight...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 11 Sep 2011 11:32:48 +0000 (21:32 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 11 Sep 2011 11:32:48 +0000 (21:32 +1000)
include/libnfs-raw.h
include/libnfs.h
lib/libnfs.c
lib/socket.c

index 573205c9c876c9ca48d38377806ea68369e0f1b4..bc7113306e09e0a3c4e3a182f9ed32312e1682d9 100644 (file)
@@ -37,6 +37,7 @@ int rpc_get_fd(struct rpc_context *rpc);
 int rpc_which_events(struct rpc_context *rpc);
 int rpc_service(struct rpc_context *rpc, int revents);
 char *rpc_get_error(struct rpc_context *rpc);
+int rpc_queue_length(struct rpc_context *rpc);
 
 
 #define RPC_STATUS_SUCCESS             0
index dd63f9623816f8b4a3d67b28ed89555e7af5048e..3ff49d73b0f8604052efa5dc7f7dabb3e1b2133c 100644 (file)
@@ -57,6 +57,7 @@ struct utimbuf {
 EXTERN int nfs_get_fd(struct nfs_context *nfs);
 EXTERN int nfs_which_events(struct nfs_context *nfs);
 EXTERN int nfs_service(struct nfs_context *nfs, int revents);
+EXTERN int nfs_queue_length(struct nfs_context *nfs);
 
 /*
  * Used if you need different credentials than the default for the current user.
index 1f64bd0fef4acfb16afb19feabc6657ddfea33bb..8c408b2cd3394a63f6c5af13664f36f3fbd3f55f 100644 (file)
@@ -121,6 +121,11 @@ int nfs_get_fd(struct nfs_context *nfs)
        return rpc_get_fd(nfs->rpc);
 }
 
+int nfs_queue_length(struct nfs_context *nfs)
+{
+       return rpc_queue_length(nfs->rpc);
+}
+
 int nfs_which_events(struct nfs_context *nfs)
 {
        return rpc_which_events(nfs->rpc);
index 760da2f352a2983480485eb903966ef6ded46a3a..d93acd80b717c9f4be0fab8168862bab3bdf6dbc 100644 (file)
@@ -315,7 +315,7 @@ int rpc_service(struct rpc_context *rpc, int revents)
 
        if (revents & POLLIN) {
                if (rpc_read_from_socket(rpc) != 0) {
-                       rpc_disconnect_requeue(rpc);
+                       rpc_disconnect_requeue(rpc);
                        return 0;
                }
        }
@@ -514,3 +514,17 @@ struct sockaddr *rpc_get_recv_sockaddr(struct rpc_context *rpc)
 {
        return (struct sockaddr *)&rpc->udp_src;
 }
+
+int rpc_queue_length(struct rpc_context *rpc)
+{
+       int i=0;
+       struct rpc_pdu *pdu;
+
+       for(pdu = rpc->outqueue; pdu; pdu = pdu->next) {
+               i++;
+       }
+       for(pdu = rpc->waitpdu; pdu; pdu = pdu->next) {
+               i++;
+       }
+       return i;
+}