+ uint64_t inum = bluesky_directory_lookup(dir, argp->name);
+ BlueSkyInode *inode = bluesky_get_inode(fs, inum);
+ if (inode == NULL) {
+ result.status = NFS3ERR_NOENT;
+ async_rpc_send_reply(req, &result);
+ return;
+ }
+ schedule_inode_unref(req, inode);
+
+ if (inode->type != BLUESKY_DIRECTORY) {
+ result.status = NFS3ERR_NOTDIR;
+ async_rpc_send_reply(req, &result);
+ return;
+ }
+ if (g_sequence_get_length(inode->dirents) > 0) {
+ printf("Directory not empty: %d entries\n",
+ g_sequence_get_length(inode->dirents));
+ result.status = NFS3ERR_NOTEMPTY;
+ async_rpc_send_reply(req, &result);
+ return;
+ }
+
+ /* TODO: Decrement link count, deallocate inode if needed. */
+
+ bluesky_directory_remove(dir, argp->name);
+
+ result.status = NFS3_OK;
+ result.wccstat3_u.wcc.after.present = TRUE;
+ encode_fattr3(&result.wccstat3_u.wcc.after.post_op_attr_u.attributes,
+ dir);
+
+ async_rpc_send_reply(req, &result);