|
@@ -813,6 +813,15 @@ SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
|
|
|
group->priority == FS_PRIO_0)
|
|
|
goto fput_and_out;
|
|
|
|
|
|
+ if (flags & FAN_MARK_FLUSH) {
|
|
|
+ ret = 0;
|
|
|
+ if (flags & FAN_MARK_MOUNT)
|
|
|
+ fsnotify_clear_vfsmount_marks_by_group(group);
|
|
|
+ else
|
|
|
+ fsnotify_clear_inode_marks_by_group(group);
|
|
|
+ goto fput_and_out;
|
|
|
+ }
|
|
|
+
|
|
|
ret = fanotify_find_path(dfd, pathname, &path, flags);
|
|
|
if (ret)
|
|
|
goto fput_and_out;
|
|
@@ -824,7 +833,7 @@ SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
|
|
|
mnt = path.mnt;
|
|
|
|
|
|
/* create/update an inode mark */
|
|
|
- switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE | FAN_MARK_FLUSH)) {
|
|
|
+ switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE)) {
|
|
|
case FAN_MARK_ADD:
|
|
|
if (flags & FAN_MARK_MOUNT)
|
|
|
ret = fanotify_add_vfsmount_mark(group, mnt, mask, flags);
|
|
@@ -837,12 +846,6 @@ SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
|
|
|
else
|
|
|
ret = fanotify_remove_inode_mark(group, inode, mask, flags);
|
|
|
break;
|
|
|
- case FAN_MARK_FLUSH:
|
|
|
- if (flags & FAN_MARK_MOUNT)
|
|
|
- fsnotify_clear_vfsmount_marks_by_group(group);
|
|
|
- else
|
|
|
- fsnotify_clear_inode_marks_by_group(group);
|
|
|
- break;
|
|
|
default:
|
|
|
ret = -EINVAL;
|
|
|
}
|