+ BlueSkyInode *inode = lookup_fh(&argp->file);
+ if (inode == NULL) {
+ result.status = NFS3ERR_STALE;
+ result.write3res_u.resfail = wcc;
+ return &result;
+ }
+
+ encode_pre_wcc(&wcc, inode);
+ if (inode->type != BLUESKY_REGULAR) {
+ result.status = NFS3ERR_INVAL;
+ result.write3res_u.resfail = wcc;
+ return &result;
+ }
+
+ uint64_t lastbyte = argp->offset + argp->count;
+ if (lastbyte > inode->size) {
+ bluesky_file_truncate(inode, lastbyte);
+ }
+
+ if (argp->data.data_len < argp->count) {
+ /* ??? */
+ } else {
+ bluesky_file_write(inode, argp->offset,
+ argp->data.data_val, argp->count);
+ }
+
+ encode_fattr3(&wcc.after.post_op_attr_u.attributes, inode);
+ result.write3res_u.resok.file_wcc = wcc;
+ result.write3res_u.resok.count = argp->count;
+ result.write3res_u.resok.committed = FILE_SYNC;