Re: [RFC PATCH -v4 05/14] fsnotify: unified filesystemnotification backend

From: Eric Paris
Date: Sat Dec 13 2008 - 10:01:49 EST


On Sat, 2008-12-13 at 05:54 +0300, Evgeniy Polyakov wrote:
> > +struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u64 mask, void *data, int data_is)
> > +{
> > + struct fsnotify_event *event;
> > +
> > + event = kmem_cache_alloc(event_kmem_cache, GFP_KERNEL);
> > + if (!event)
> > + return NULL;
> > +
> > + atomic_set(&event->refcnt, 1);
> > +
> > + spin_lock_init(&event->lock);
> > +
> > + event->path.dentry = NULL;
> > + event->path.mnt = NULL;
> > + event->inode = NULL;
> > +
> > + INIT_LIST_HEAD(&event->private_data_list);
> > +
> > + event->to_tell = to_tell;
>
> What prevents this inode to be released?

Absolutely nothing and I need to document that. Two things,
event->to_tell and event->data if event->data_is == INODE are ONLY valid
during the call to group-?event_to_notif(). As soon as all groups
return from that call those are not valid fields. I could set them NULL
when they aren't allowed to be used any more, but it's a wasted
operation on a VERY hot path (fsnotify())

As a side note event->data if event->data_is == FILE is perfectly
allowed to be used until the event is freed. That's totally pointless
for this patch set and I might drop it on the next submission, but it is
needed for my fanotify notify patches that I keep in mind as I'm doing
this.

I'll remember to better document this 'quirk' in case anyone tries to
write a new notifier.

-Eric

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/