diff options
-rw-r--r-- | fs/notify/inotify/inotify_user.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c index daf76652fe58..283aa312d745 100644 --- a/fs/notify/inotify/inotify_user.c +++ b/fs/notify/inotify/inotify_user.c | |||
@@ -227,14 +227,13 @@ static ssize_t inotify_read(struct file *file, char __user *buf, | |||
227 | struct fsnotify_event *kevent; | 227 | struct fsnotify_event *kevent; |
228 | char __user *start; | 228 | char __user *start; |
229 | int ret; | 229 | int ret; |
230 | DEFINE_WAIT(wait); | 230 | DEFINE_WAIT_FUNC(wait, woken_wake_function); |
231 | 231 | ||
232 | start = buf; | 232 | start = buf; |
233 | group = file->private_data; | 233 | group = file->private_data; |
234 | 234 | ||
235 | add_wait_queue(&group->notification_waitq, &wait); | ||
235 | while (1) { | 236 | while (1) { |
236 | prepare_to_wait(&group->notification_waitq, &wait, TASK_INTERRUPTIBLE); | ||
237 | |||
238 | mutex_lock(&group->notification_mutex); | 237 | mutex_lock(&group->notification_mutex); |
239 | kevent = get_one_event(group, count); | 238 | kevent = get_one_event(group, count); |
240 | mutex_unlock(&group->notification_mutex); | 239 | mutex_unlock(&group->notification_mutex); |
@@ -264,10 +263,10 @@ static ssize_t inotify_read(struct file *file, char __user *buf, | |||
264 | if (start != buf) | 263 | if (start != buf) |
265 | break; | 264 | break; |
266 | 265 | ||
267 | schedule(); | 266 | wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); |
268 | } | 267 | } |
268 | remove_wait_queue(&group->notification_waitq, &wait); | ||
269 | 269 | ||
270 | finish_wait(&group->notification_waitq, &wait); | ||
271 | if (start != buf && ret != -EFAULT) | 270 | if (start != buf && ret != -EFAULT) |
272 | ret = buf - start; | 271 | ret = buf - start; |
273 | return ret; | 272 | return ret; |