fix O_NONBLOCK in dmasound_core
PATCH 1/1 fix O_NONBLOCK in dmasound_core
In 2.3.11-pre3 we had O_NONBLOCK handling broken in dmasound_core - the original code copied f_flags to open_mode and then checked for O_NONBLOCK in there, but that got changed to copying f_mode and O_NONBLOCK had not reached that field in any kernel version.
Since we do not care for any other bits, the fix is obvious...
Signed-off-by Al Viro <[email protected]>
--- sound/oss/dmasound/dmasound.h | 2 +- sound/oss/dmasound/dmasound_core.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
sound/oss/dmasound/dmasound.h +1 -1
@@ -235,7 +235,7 @@ struct sound_queue {*/ int active;wait_queue_head_t action_queue, open_queue, sync_queue; -fmode_t open_mode; +int non_blocking;int busy, syncing, xruns, died; };
sound/oss/dmasound/dmasound_core.c +2 -2
@@ -603,7 +603,7 @@ static ssize_t sq_write(struct file *file, const char __user *src, size_t uLeft,while (uLeft) {while (write_sq.count >= write_sq.max_active) {sq_play (); -if (write_sq.open_mode &O_NONBLOCK ) +if (write_sq.non_blocking)return uWritten >0 ? uWritten : -EAGAIN ;SLEEP (write_sq.action_queue);if (signal_pending (current))
@@ -718,7 +718,7 @@ static int sq_open2(struct sound_queue *sq, struct file *file, fmode_t mode,return rc; } - sq->open_mode = file->f_mode; + sq->non_blocking = file->f_flags &O_NONBLOCK ; }return rc; }
Signature · 1 line
1.5.6.5