464 }
465
466 finish_wait(&dev->wq, &wait);
467 if (ret)
468 return ret;
469
470 while (1) {
471 struct inotify_kernel_event *kevent;
472
473 ret = buf - start;
474 if (list_empty(&dev->events))
475 break;
476
477 kevent = inotify_dev_get_event(dev);
478 if (event_size + kevent->event.len > count) {
479 if (ret == 0 && count > 0) {
480
481
482
483
484 ret = -EINVAL;
485 }
486 break;
487 }
488 remove_kevent(dev, kevent);
489
490
491
492
493
494 mutex_unlock(&dev->ev_mutex);
495
496 if (copy_to_user(buf, &kevent->event, event_size)) {
497 ret = -EFAULT;
498 break;
499 }
500 buf += event_size;
501 count -= event_size;
502
503 if (kevent->name) {
504 if (copy_to_user(buf, kevent->name, kevent->event.len)){