fsnotify: use an enum for group priority constants
authorAmir Goldstein <amir73il@gmail.com>
Sun, 17 Mar 2024 18:41:53 +0000 (20:41 +0200)
committerJan Kara <jack@suse.cz>
Thu, 4 Apr 2024 14:24:16 +0000 (16:24 +0200)
And use meaningfull names for the constants.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <20240317184154.1200192-10-amir73il@gmail.com>

fs/notify/fanotify/fanotify_user.c
include/linux/fsnotify_backend.h

index 925015ee7fbd1957144de3c908e9164ef07d4c3c..483a6a1255fb2cdda97238388d14fb268cd0ced6 100644 (file)
@@ -1516,13 +1516,13 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
        INIT_LIST_HEAD(&group->fanotify_data.access_list);
        switch (class) {
        case FAN_CLASS_NOTIF:
-               group->priority = FS_PRIO_0;
+               group->priority = FSNOTIFY_PRIO_NORMAL;
                break;
        case FAN_CLASS_CONTENT:
-               group->priority = FS_PRIO_1;
+               group->priority = FSNOTIFY_PRIO_CONTENT;
                break;
        case FAN_CLASS_PRE_CONTENT:
-               group->priority = FS_PRIO_2;
+               group->priority = FSNOTIFY_PRIO_PRE_CONTENT;
                break;
        default:
                fd = -EINVAL;
@@ -1774,12 +1774,11 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,
                goto fput_and_out;
 
        /*
-        * group->priority == FS_PRIO_0 == FAN_CLASS_NOTIF.  These are not
-        * allowed to set permissions events.
+        * Permission events require minimum priority FAN_CLASS_CONTENT.
         */
        ret = -EINVAL;
        if (mask & FANOTIFY_PERM_EVENTS &&
-           group->priority == FS_PRIO_0)
+           group->priority < FSNOTIFY_PRIO_CONTENT)
                goto fput_and_out;
 
        if (mask & FAN_FS_ERROR &&
index ec592aeadfa3fd7383a608328db1494501b22166..fc38587d85643af08bd961c1a2c8d4fe3d86c714 100644 (file)
@@ -176,6 +176,17 @@ struct fsnotify_event {
        struct list_head list;
 };
 
+/*
+ * fsnotify group priorities.
+ * Events are sent in order from highest priority to lowest priority.
+ */
+enum fsnotify_group_prio {
+       FSNOTIFY_PRIO_NORMAL = 0,       /* normal notifiers, no permissions */
+       FSNOTIFY_PRIO_CONTENT,          /* fanotify permission events */
+       FSNOTIFY_PRIO_PRE_CONTENT,      /* fanotify pre-content events */
+       __FSNOTIFY_PRIO_NUM
+};
+
 /*
  * A group is a "thing" that wants to receive notification about filesystem
  * events.  The mask holds the subset of event types this group cares about.
@@ -201,14 +212,7 @@ struct fsnotify_group {
        wait_queue_head_t notification_waitq;   /* read() on the notification file blocks on this waitq */
        unsigned int q_len;                     /* events on the queue */
        unsigned int max_events;                /* maximum events allowed on the list */
-       /*
-        * Valid fsnotify group priorities.  Events are send in order from highest
-        * priority to lowest priority.  We default to the lowest priority.
-        */
-       #define FS_PRIO_0       0 /* normal notifiers, no permissions */
-       #define FS_PRIO_1       1 /* fanotify content based access control */
-       #define FS_PRIO_2       2 /* fanotify pre-content access */
-       unsigned int priority;
+       enum fsnotify_group_prio priority;      /* priority for sending events */
        bool shutdown;          /* group is being shut down, don't queue more events */
 
 #define FSNOTIFY_GROUP_USER    0x01 /* user allocated group */