diff options
author | Brian Rogers <brian@xyzw.org> | 2009-08-28 10:00:05 -0400 |
---|---|---|
committer | Eric Paris <eparis@redhat.com> | 2009-08-28 10:03:06 -0400 |
commit | b962e7312ae87006aed6f68ceee94bdf8db08338 (patch) | |
tree | 5d74244d31f510d346afbe80fea3285ccb8504d8 | |
parent | 326ba5010a5429a5a528b268b36a5900d4ab0eba (diff) |
inotify: do not send a block of zeros when no pathname is available
When an event has no pathname, there's no need to pad it with a null byte and
therefore generate an inotify_event sized block of zeros. This fixes a
regression introduced by commit 0db501bd0610ee0c0aca84d927f90bcccd09e2bd where
my system wouldn't finish booting because some process was being confused by
this.
Signed-off-by: Brian Rogers <brian@xyzw.org>
Signed-off-by: Eric Paris <eparis@redhat.com>
-rw-r--r-- | fs/notify/inotify/inotify_user.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c index 0e781bc88d1e..b547ae17b461 100644 --- a/fs/notify/inotify/inotify_user.c +++ b/fs/notify/inotify/inotify_user.c | |||
@@ -180,7 +180,7 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group, | |||
180 | struct fsnotify_event_private_data *fsn_priv; | 180 | struct fsnotify_event_private_data *fsn_priv; |
181 | struct inotify_event_private_data *priv; | 181 | struct inotify_event_private_data *priv; |
182 | size_t event_size = sizeof(struct inotify_event); | 182 | size_t event_size = sizeof(struct inotify_event); |
183 | size_t name_len; | 183 | size_t name_len = 0; |
184 | 184 | ||
185 | /* we get the inotify watch descriptor from the event private data */ | 185 | /* we get the inotify watch descriptor from the event private data */ |
186 | spin_lock(&event->lock); | 186 | spin_lock(&event->lock); |
@@ -196,10 +196,12 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group, | |||
196 | inotify_free_event_priv(fsn_priv); | 196 | inotify_free_event_priv(fsn_priv); |
197 | } | 197 | } |
198 | 198 | ||
199 | /* round up event->name_len so it is a multiple of event_size | 199 | /* |
200 | * round up event->name_len so it is a multiple of event_size | ||
200 | * plus an extra byte for the terminating '\0'. | 201 | * plus an extra byte for the terminating '\0'. |
201 | */ | 202 | */ |
202 | name_len = roundup(event->name_len + 1, event_size); | 203 | if (event->name_len) |
204 | name_len = roundup(event->name_len + 1, event_size); | ||
203 | inotify_event.len = name_len; | 205 | inotify_event.len = name_len; |
204 | 206 | ||
205 | inotify_event.mask = inotify_mask_to_arg(event->mask); | 207 | inotify_event.mask = inotify_mask_to_arg(event->mask); |