return PTR_ERR(fsn_mark);
}
-static int fanotify_update_mark(struct fsnotify_group *group,
- struct inode *inode, struct vfsmount *mnt,
- int flags, __u32 mask)
-{
- pr_debug("%s: group=%p inode=%p mnt=%p flags=%x mask=%x\n",
- __func__, group, inode, mnt, flags, mask);
-
- BUG_ON(inode && mnt);
- BUG_ON(!inode && !mnt);
-
- if (flags & FAN_MARK_ADD)
- fanotify_add_mark(group, inode, mnt, flags, mask);
- else if (flags & FAN_MARK_REMOVE)
- fanotify_remove_mark(group, inode, mnt, flags, mask);
- else
- BUG();
-
- return 0;
-}
-
static bool fanotify_mark_validate_input(int flags,
__u32 mask)
{
group = filp->private_data;
/* create/update an inode mark */
- ret = fanotify_update_mark(group, inode, NULL, flags, mask);
+ switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE)) {
+ case FAN_MARK_ADD:
+ ret = fanotify_add_mark(group, inode, NULL, flags, mask);
+ break;
+ case FAN_MARK_REMOVE:
+ ret = fanotify_remove_mark(group, inode, NULL, flags, mask);
+ break;
+ default:
+ ret = -EINVAL;
+ }
path_put(&path);
fput_and_out: