lkml.org 
[lkml]   [2008]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [RFC PATCH -v4 05/14] fsnotify: unified filesystem notification backend
From
Date
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



\
 
 \ /
  Last update: 2008-12-13 16:03    [W:0.261 / U:0.112 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site