aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/notify/inotify/inotify_user.c9
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;