|
34 | 34 | #include "fanotify.h"
|
35 | 35 |
|
36 | 36 | #define PATH_LEN 128
|
37 |
| -#define BUF_SIZE 256 |
| 37 | +#define BUF_SIZE 1024 |
38 | 38 | #define DIR_ONE "dir_one"
|
39 | 39 | #define FILE_ONE "file_one"
|
40 | 40 | #define FILE_TWO "file_two"
|
41 | 41 | #define MOUNT_PATH "tstmnt"
|
42 |
| -#define EVENT_MAX ARRAY_SIZE(objects) |
| 42 | +#define EVENT_MAX (ARRAY_SIZE(objects)+1) |
43 | 43 | #define DIR_PATH_ONE MOUNT_PATH"/"DIR_ONE
|
44 | 44 | #define FILE_PATH_ONE MOUNT_PATH"/"FILE_ONE
|
45 | 45 | #define FILE_PATH_TWO MOUNT_PATH"/"FILE_TWO
|
@@ -130,10 +130,15 @@ static int setup_marks(unsigned int fd, struct test_case_t *tc)
|
130 | 130 | SAFE_FANOTIFY_MARK(fd, FAN_MARK_ADD | mark->flag, tc->mask,
|
131 | 131 | AT_FDCWD, objects[i].path);
|
132 | 132 |
|
133 |
| - /* Setup the expected mask for each generated event */ |
| 133 | + /* |
| 134 | + * Setup the expected mask for each generated event. |
| 135 | + * No events are expected on directory without FAN_ONDIR. |
| 136 | + */ |
134 | 137 | event_set[i].expected_mask = tc->mask;
|
135 | 138 | if (!objects[i].is_dir)
|
136 | 139 | event_set[i].expected_mask &= ~FAN_ONDIR;
|
| 140 | + else if (!(event_set[i].expected_mask & FAN_ONDIR)) |
| 141 | + event_set[i].expected_mask = 0; |
137 | 142 | }
|
138 | 143 | return 0;
|
139 | 144 | }
|
@@ -163,7 +168,8 @@ static void do_test(unsigned int number)
|
163 | 168 | return;
|
164 | 169 | }
|
165 | 170 |
|
166 |
| - fanotify_fd = SAFE_FANOTIFY_INIT(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY); |
| 171 | + fanotify_fd = SAFE_FANOTIFY_INIT(FAN_CLASS_NOTIF | FAN_REPORT_FID | |
| 172 | + FAN_NONBLOCK, O_RDONLY); |
167 | 173 |
|
168 | 174 | /*
|
169 | 175 | * Place marks on a set of objects and setup the expected masks
|
@@ -279,6 +285,16 @@ static void do_test(unsigned int number)
|
279 | 285 | FSID_VAL_MEMBER(event_fid->fsid, 1),
|
280 | 286 | *(unsigned long *) event_file_handle->f_handle);
|
281 | 287 | }
|
| 288 | + |
| 289 | + /* |
| 290 | + * Verify that we did not get an extra event, for example, that we did |
| 291 | + * not get an event on directory without FAN_ONDIR. |
| 292 | + */ |
| 293 | + if (event_set[i].expected_mask) { |
| 294 | + tst_res(TFAIL, |
| 295 | + "Did not get an expected event (expected: %llx)", |
| 296 | + event_set[i].expected_mask); |
| 297 | + } |
282 | 298 | out:
|
283 | 299 | SAFE_CLOSE(fanotify_fd);
|
284 | 300 | }
|
|
0 commit comments