Allow fcntl() to toggle O_NONBLOCK
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 1 Oct 2015 14:12:56 +0000 (10:12 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Oct 2015 14:29:57 +0000 (10:29 -0400)
There isn't a good answer yet for whether O_NONBLOCK should be a chan
flag, a device file flag, or both.  For now, I'll let people toggle
O_NONBLOCK.  In the future, we might send a wstat() too and set a file
mode bit (similar to DMAPPEND).

For some devices, like #ip, this will set the chan flag but will have no
effect on the device.  It's not a huge deal, since the sockets shims
intercept fcntl on Rocks and issue the device command.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/ns/sysfile.c

index af0224c..6866e25 100644 (file)
@@ -1433,11 +1433,6 @@ int fd_setfl(int fd, int flags)
                set_errno(EINVAL);
                error("can't toggle O_PATH with setfl");
        }
-       if (cexternal_flags_differ(flags, c->flag, O_NONBLOCK)) {
-               /* If we want to let them toggle NONBLOCK, it'd require a device op */
-               set_errno(EINVAL);
-               error("can't set O_NONBLOCK, use a device-specific ctl command");
-       }
        c->flag = (c->flag & ~CEXTERNAL_FLAGS) | (flags & CEXTERNAL_FLAGS);
        cclose(c);
        poperror();