X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=nfs3%2Fnfs3.c;h=b4791070606e73647b514bf12aa7255ace1aa99e;hb=cf3d405919942d3adf810bba0ed5df28a91b6d2d;hp=33ca180d78e0fd9fc29c506f05011802bc6066dc;hpb=686e1d6fc137595d249d1d6794d8932f86345646;p=bluesky.git diff --git a/nfs3/nfs3.c b/nfs3/nfs3.c index 33ca180..b479107 100644 --- a/nfs3/nfs3.c +++ b/nfs3/nfs3.c @@ -380,6 +380,19 @@ void nfsproc3_write_3_svc(write3args *argp, RPCRequest *req) return; } + /* FIXME: Hack to throttle writes when there is too much dirty data still + * to be written out. */ + while (g_atomic_int_get(&fs->cache_dirty) > 4096 + || g_atomic_int_get(&fs->cache_total) > 8192) { + g_print("Too many dirty pages (%d) or total pages (%d); throttling writes...\n", + g_atomic_int_get(&fs->cache_dirty), + g_atomic_int_get(&fs->cache_total)); + struct timespec delay; + delay.tv_sec = 2; + delay.tv_nsec = 0; + nanosleep(&delay, NULL); + } + g_mutex_lock(inode->lock); encode_pre_wcc(&wcc, inode); @@ -1103,7 +1116,7 @@ void nfsproc3_commit_3_svc(commit3args *argp, RPCRequest *req) commit3res result; memset(&result, 0, sizeof(result)); - result.status = NFS3ERR_NOTSUPP; + result.status = NFS3_OK; BlueSkyInode *inode = lookup_fh(req, &argp->file); if (inode == NULL) { @@ -1115,7 +1128,7 @@ void nfsproc3_commit_3_svc(commit3args *argp, RPCRequest *req) g_mutex_lock(inode->lock); encode_pre_wcc(&result.commit3res_u.resok.file_wcc, inode); - bluesky_inode_do_sync(inode); + //bluesky_inode_do_sync(inode); result.commit3res_u.resok.file_wcc.after.present = TRUE; encode_fattr3(&result.commit3res_u.resok.file_wcc.after.post_op_attr_u.attributes, inode);