|
@@ -227,14 +227,13 @@ static ssize_t inotify_read(struct file *file, char __user *buf,
|
|
|
struct fsnotify_event *kevent;
|
|
|
char __user *start;
|
|
|
int ret;
|
|
|
- DEFINE_WAIT(wait);
|
|
|
+ DEFINE_WAIT_FUNC(wait, woken_wake_function);
|
|
|
|
|
|
start = buf;
|
|
|
group = file->private_data;
|
|
|
|
|
|
+ add_wait_queue(&group->notification_waitq, &wait);
|
|
|
while (1) {
|
|
|
- prepare_to_wait(&group->notification_waitq, &wait, TASK_INTERRUPTIBLE);
|
|
|
-
|
|
|
mutex_lock(&group->notification_mutex);
|
|
|
kevent = get_one_event(group, count);
|
|
|
mutex_unlock(&group->notification_mutex);
|
|
@@ -264,10 +263,10 @@ static ssize_t inotify_read(struct file *file, char __user *buf,
|
|
|
if (start != buf)
|
|
|
break;
|
|
|
|
|
|
- schedule();
|
|
|
+ wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
|
|
|
}
|
|
|
+ remove_wait_queue(&group->notification_waitq, &wait);
|
|
|
|
|
|
- finish_wait(&group->notification_waitq, &wait);
|
|
|
if (start != buf && ret != -EFAULT)
|
|
|
ret = buf - start;
|
|
|
return ret;
|