Re: [PATCH] inotify: report rounded-up event size to user space

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2009-05-07 at 19:59 +0800, Wu Fengguang wrote:

> ---
> inotify: report rounded-up event size to user space
> 
> Fix a udev madness problem, which falls into an endless loop:
> 
> (1) ppoll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=3, events=POLLIN}], 3, NULL, [], 8) = 1 ([{fd=3, revents=POLLIN}])
> (2) ioctl(3, FIONREAD, [39])                = 0
> (3) read(3, 0x62ad60, 39)                   = -1 EINVAL (Invalid argument)
> 
> In (2) we reported a small len, while in (3) we insist on a rounded up len,
> leading to a failed inotify read(), which will be retried endlessly by udev.
> 
> [  756.569243] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.600103] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.630265] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.670862] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.701845] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.732899] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.763126] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.794829] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.824985] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  756.856760] get_one_event: event_size=48 > count=38, name_len=22, name=61-dev-root-link.rules
> [  761.608521] __ratelimit: 210 callbacks suppressed
> 
> Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx>

Gaaah should have remembered to do that with the ioctl.
 
Acked-by: Eric Paris <eparis@xxxxxxxxxx>

Andrew can you add this to your tree, I will roll it into my next patch
set.

-Eric

> ---
>  fs/notify/inotify/inotify_user.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> --- linux.orig/fs/notify/inotify/inotify_user.c
> +++ linux/fs/notify/inotify/inotify_user.c
> @@ -318,7 +318,9 @@ static long inotify_ioctl(struct file *f
>  		mutex_lock(&group->notification_mutex);
>  		list_for_each_entry(holder, &group->notification_list, event_list) {
>  			event = holder->event;
> -			send_len += sizeof(struct inotify_event) + event->name_len;
> +			send_len += sizeof(struct inotify_event);
> +			send_len += roundup(event->name_len,
> +					sizeof(struct inotify_event));
>  		}
>  		mutex_unlock(&group->notification_mutex);
>  		ret = put_user(send_len, (int __user *) p);

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux