Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0bd1f65 authored by Jens Axboe's avatar Jens Axboe
Browse files

[PATCH] splice: only call wake_up_interruptible() when we really have to



__wake_up_common() is pretty heavy in the kernel profiles, this brings
it down to a more acceptable level.

Signed-off-by: default avatarJens Axboe <axboe@suse.de>
parent 9aefe431
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -187,6 +187,8 @@ static ssize_t move_to_pipe(struct inode *inode, struct page **pages,
		}

		if (do_wakeup) {
			smp_mb();
			if (waitqueue_active(PIPE_WAIT(*inode)))
				wake_up_interruptible_sync(PIPE_WAIT(*inode));
			kill_fasync(PIPE_FASYNC_READERS(*inode), SIGIO,
				    POLL_IN);
@@ -201,6 +203,8 @@ static ssize_t move_to_pipe(struct inode *inode, struct page **pages,
	mutex_unlock(PIPE_MUTEX(*inode));

	if (do_wakeup) {
		smp_mb();
		if (waitqueue_active(PIPE_WAIT(*inode)))
			wake_up_interruptible(PIPE_WAIT(*inode));
		kill_fasync(PIPE_FASYNC_READERS(*inode), SIGIO, POLL_IN);
	}
@@ -600,6 +604,8 @@ static ssize_t move_from_pipe(struct inode *inode, struct file *out,
		}

		if (do_wakeup) {
			smp_mb();
			if (waitqueue_active(PIPE_WAIT(*inode)))
				wake_up_interruptible_sync(PIPE_WAIT(*inode));
			kill_fasync(PIPE_FASYNC_WRITERS(*inode),SIGIO,POLL_OUT);
			do_wakeup = 0;
@@ -611,6 +617,8 @@ static ssize_t move_from_pipe(struct inode *inode, struct file *out,
	mutex_unlock(PIPE_MUTEX(*inode));

	if (do_wakeup) {
		smp_mb();
		if (waitqueue_active(PIPE_WAIT(*inode)))
			wake_up_interruptible(PIPE_WAIT(*inode));
		kill_fasync(PIPE_FASYNC_WRITERS(*inode), SIGIO, POLL_OUT);
	}