Add POLLRDNORM/POLLWRNORM support.

On Linux these are meant to be equivalent to POLLIN/POLLOUT. Rather
than hack these on in sys_poll etc it felt cleaner to just cleanup
the call sites to notify for both events. This is what linux does
as well.

Fixes #5544

PiperOrigin-RevId: 364859977
This commit is contained in:
Bhasker Hariharan
2021-03-24 12:11:44 -07:00
committed by gVisor bot
parent 72ff6a1cac
commit e7ca2a51a8
73 changed files with 351 additions and 276 deletions
+1 -1
View File
@@ -316,7 +316,7 @@ func (conn *connection) callFutureLocked(t *kernel.Task, r *Request) (*futureRes
conn.fd.completions[r.id] = fut
// Signal the readers that there is something to read.
conn.fd.waitQueue.Notify(waiter.EventIn)
conn.fd.waitQueue.Notify(waiter.ReadableEvents)
return fut, nil
}
+2 -2
View File
@@ -368,10 +368,10 @@ func (fd *DeviceFD) readinessLocked(mask waiter.EventMask) waiter.EventMask {
}
// FD is always writable.
ready |= waiter.EventOut
ready |= waiter.WritableEvents
if !fd.queue.Empty() {
// Have reqs available, FD is readable.
ready |= waiter.EventIn
ready |= waiter.ReadableEvents
}
return ready & mask
+1 -1
View File
@@ -180,7 +180,7 @@ func ReadTest(serverTask *kernel.Task, fd *vfs.FileDescription, inIOseq usermem.
// Register for notifications.
w, ch := waiter.NewChannelEntry(nil)
dev.EventRegister(&w, waiter.EventIn)
dev.EventRegister(&w, waiter.ReadableEvents)
for {
// Issue the request and break out if it completes with anything other than
// "would block".
+1 -1
View File
@@ -286,7 +286,7 @@ func (fs *filesystem) Release(ctx context.Context) {
fs.umounted = true
fs.conn.Abort(ctx)
// Notify all the waiters on this fd.
fs.conn.fd.waitQueue.Notify(waiter.EventIn)
fs.conn.fd.waitQueue.Notify(waiter.ReadableEvents)
fs.conn.fd.mu.Unlock()