sprintf(key, "inode-%016"PRIx64, inum);
BlueSkyInode *inode = bluesky_new_inode(inum, fs, BLUESKY_PENDING);
- i->change_count = 0;
+ inode->change_count = 0;
bluesky_inode_ref(inode); // Extra ref held by fetching process
g_mutex_lock(inode->lock);
bluesky_insert_inode(fs, inode);
#include "bluesky.h"
extern BlueSkyFS *fs;
+static int outstanding_rpcs = 0;
+
/* TCP port number to use for NFS protocol. (Should be 2049.) */
#define NFS_SERVICE_PORT 2051
{
struct rpc_fail_reply header;
+ g_atomic_int_add(&outstanding_rpcs, -1);
+
header.xid = htonl(req->xid);
header.type = htonl(1); /* REPLY */
header.stat = htonl(MSG_ACCEPTED);
return;
}
+ g_atomic_int_add(&outstanding_rpcs, -1);
+
struct rpc_reply header;
header.xid = htonl(req->xid);
header.type = htonl(1); /* REPLY */
static gboolean async_flushd(gpointer data)
{
+ int rpc_count = g_atomic_int_get(&outstanding_rpcs);
+ if (rpc_count != 0) {
+ g_print("Currently outstanding RPC requests: %d\n", rpc_count);
+ }
+
if (fs_dump_requested) {
bluesky_debug_dump(fs);
fs_dump_requested = 0;
return FALSE;
}
+ g_atomic_int_add(&outstanding_rpcs, 1);
+
RPCRequest *req = g_new0(RPCRequest, 1);
req->connection = rpc;
req->time_start = time_start;
buf += sizeof(struct rpc_call_header);
for (i = 0; i < 2; i++) {
struct rpc_auth *auth = (struct rpc_auth *)buf;
- if (buf - msg->str + sizeof(struct rpc_auth) > msg->len)
+ if (buf - msg->str + sizeof(struct rpc_auth) > msg->len) {
+ g_atomic_int_add(&outstanding_rpcs, -1);
return FALSE;
+ }
gsize authsize = ntohl(auth->len) + sizeof(struct rpc_auth);
- if (authsize > MAX_RPC_MSGSIZE)
+ if (authsize > MAX_RPC_MSGSIZE) {
+ g_atomic_int_add(&outstanding_rpcs, -1);
return FALSE;
+ }
buf += authsize;
}
- if (buf - msg->str > msg->len)
+ if (buf - msg->str > msg->len) {
+ g_atomic_int_add(&outstanding_rpcs, -1);
return FALSE;
+ }
req->raw_args = msg;
req->raw_args_header_bytes = buf - msg->str;