diff options
Diffstat (limited to 'fs/notify/fanotify/fanotify_user.c')
-rw-r--r-- | fs/notify/fanotify/fanotify_user.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index c991616acca9..bff8567aa42d 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c | |||
@@ -259,16 +259,15 @@ static ssize_t fanotify_read(struct file *file, char __user *buf, | |||
259 | struct fsnotify_event *kevent; | 259 | struct fsnotify_event *kevent; |
260 | char __user *start; | 260 | char __user *start; |
261 | int ret; | 261 | int ret; |
262 | DEFINE_WAIT(wait); | 262 | DEFINE_WAIT_FUNC(wait, woken_wake_function); |
263 | 263 | ||
264 | start = buf; | 264 | start = buf; |
265 | group = file->private_data; | 265 | group = file->private_data; |
266 | 266 | ||
267 | pr_debug("%s: group=%p\n", __func__, group); | 267 | pr_debug("%s: group=%p\n", __func__, group); |
268 | 268 | ||
269 | add_wait_queue(&group->notification_waitq, &wait); | ||
269 | while (1) { | 270 | while (1) { |
270 | prepare_to_wait(&group->notification_waitq, &wait, TASK_INTERRUPTIBLE); | ||
271 | |||
272 | mutex_lock(&group->notification_mutex); | 271 | mutex_lock(&group->notification_mutex); |
273 | kevent = get_one_event(group, count); | 272 | kevent = get_one_event(group, count); |
274 | mutex_unlock(&group->notification_mutex); | 273 | mutex_unlock(&group->notification_mutex); |
@@ -289,7 +288,8 @@ static ssize_t fanotify_read(struct file *file, char __user *buf, | |||
289 | 288 | ||
290 | if (start != buf) | 289 | if (start != buf) |
291 | break; | 290 | break; |
292 | schedule(); | 291 | |
292 | wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); | ||
293 | continue; | 293 | continue; |
294 | } | 294 | } |
295 | 295 | ||
@@ -318,8 +318,8 @@ static ssize_t fanotify_read(struct file *file, char __user *buf, | |||
318 | buf += ret; | 318 | buf += ret; |
319 | count -= ret; | 319 | count -= ret; |
320 | } | 320 | } |
321 | remove_wait_queue(&group->notification_waitq, &wait); | ||
321 | 322 | ||
322 | finish_wait(&group->notification_waitq, &wait); | ||
323 | if (start != buf && ret != -EFAULT) | 323 | if (start != buf && ret != -EFAULT) |
324 | ret = buf - start; | 324 | ret = buf - start; |
325 | return ret; | 325 | return ret; |