From e7ca2a51a89a8ff2c9f5adfdfa5b51be1b3faeb3 Mon Sep 17 00:00:00 2001 From: Bhasker Hariharan Date: Wed, 24 Mar 2021 12:08:24 -0700 Subject: 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 --- pkg/sentry/fsimpl/fuse/connection.go | 2 +- pkg/sentry/fsimpl/fuse/dev.go | 4 ++-- pkg/sentry/fsimpl/fuse/dev_test.go | 2 +- pkg/sentry/fsimpl/fuse/fusefs.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'pkg/sentry/fsimpl/fuse') diff --git a/pkg/sentry/fsimpl/fuse/connection.go b/pkg/sentry/fsimpl/fuse/connection.go index 34d25a61e..077bf9307 100644 --- a/pkg/sentry/fsimpl/fuse/connection.go +++ b/pkg/sentry/fsimpl/fuse/connection.go @@ -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 } diff --git a/pkg/sentry/fsimpl/fuse/dev.go b/pkg/sentry/fsimpl/fuse/dev.go index 1eeb95216..5d2bae14e 100644 --- a/pkg/sentry/fsimpl/fuse/dev.go +++ b/pkg/sentry/fsimpl/fuse/dev.go @@ -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 diff --git a/pkg/sentry/fsimpl/fuse/dev_test.go b/pkg/sentry/fsimpl/fuse/dev_test.go index bb2d0d31a..04250d796 100644 --- a/pkg/sentry/fsimpl/fuse/dev_test.go +++ b/pkg/sentry/fsimpl/fuse/dev_test.go @@ -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". diff --git a/pkg/sentry/fsimpl/fuse/fusefs.go b/pkg/sentry/fsimpl/fuse/fusefs.go index fef857afb..167c899e2 100644 --- a/pkg/sentry/fsimpl/fuse/fusefs.go +++ b/pkg/sentry/fsimpl/fuse/fusefs.go @@ -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() -- cgit v1.2.3