[<prev] [next>] [day] [month] [year] [list]
Message-ID: <27533.1567528630@warthog.procyon.org.uk>
Date: Tue, 03 Sep 2019 17:37:10 +0100
From: David Howells <dhowells@...hat.com>
To: Hillf Danton <hdanton@...a.com>
Cc: dhowells@...hat.com, viro@...iv.linux.org.uk,
Casey Schaufler <casey@...aufler-ca.com>,
Stephen Smalley <sds@...ho.nsa.gov>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
nicolas.dichtel@...nd.com, raven@...maw.net,
Christian Brauner <christian@...uner.io>,
keyrings@...r.kernel.org, linux-usb@...r.kernel.org,
linux-security-module@...r.kernel.org,
linux-fsdevel@...r.kernel.org, linux-api@...r.kernel.org,
linux-block@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 04/11] General notification queue with user mmap()'able ring buffer [ver #7]
Hillf Danton <hdanton@...a.com> wrote:
> > + for (i = 0; i < wf->nr_filters; i++) {
> > + wt = &wf->filters[i];
> > + if (n->type == wt->type &&
> > + (wt->subtype_filter[n->subtype >> 5] &
> > + (1U << (n->subtype & 31))) &&
>
> Replace the pure numbers with something easier to understand.
How about the following:
static bool filter_watch_notification(const struct watch_filter *wf,
const struct watch_notification *n)
{
const struct watch_type_filter *wt;
unsigned int st_bits = sizeof(wt->subtype_filter[0]) * 8;
unsigned int st_index = n->subtype / st_bits;
unsigned int st_bit = 1U << (n->subtype % st_bits);
int i;
if (!test_bit(n->type, wf->type_filter))
return false;
for (i = 0; i < wf->nr_filters; i++) {
wt = &wf->filters[i];
if (n->type == wt->type &&
(wt->subtype_filter[st_index] & st_bit) &&
(n->info & wt->info_mask) == wt->info_filter)
return true;
}
return false; /* If there is a filter, the default is to reject. */
}
David
Powered by blists - more mailing lists