From: Ray Lee <ray-lk@madrabbit.org>
To: Robert Love <rml@novell.com>
Cc: Andrew Morton <akpm@osdl.org>,
John McCutchan <ttb@tentacle.dhs.org>,
Linux Kernel <linux-kernel@vger.kernel.org>,
gamin-list@gnome.org, viro@parcelfarce.linux.theplanet.co.uk,
iggy@gentoo.org
Subject: Re: [RFC][PATCH] inotify 0.10.0
Date: Mon, 27 Sep 2004 22:45:28 -0700 [thread overview]
Message-ID: <1096350328.26742.52.camel@orca.madrabbit.org> (raw)
In-Reply-To: <1096318369.30503.136.camel@betsy.boston.ximian.com>
On Mon, 2004-09-27 at 16:52 -0400, Robert Love wrote:
> > > +struct inotify_event {
> > > + int wd;
> > > + int mask;
> > > + int cookie;
> > > + char filename[INOTIFY_FILENAME_MAX];
> > > +};
> >
> > yeah, that's not very nice. Better to kmalloc the pathname.
>
> That is the structure that we communicate with to user-space.
>
> We could kmalloc() filename, but it makes the user-space use a bit more
> complicated (and right now it is trivial and wonderfully simple).
>
> We've been debating the pros and cons.
The current way pads out the structure unnecessarily, and still doesn't
handle the really long filenames, by your admission. It incurs extra
syscalls, as few filenames are really 256 characters in length. It makes
userspace double-check whether the filename extends all the way to the
boundary of the structure, and if so, then go back to the disk to try to
guess what the kernel really meant to say.
My way, doing a kmalloc of either the entire structure + filename length
+ NUL, or just the filename + NUL makes userspace infinitesimally
trickier to write. There's more effort in just getting the error
handling correct in either version.
The current way viewed by userspace, stolen shamelessly from the beagle
source:
/* FIXME: We need to check for errors, etc. */
remaining = sizeof (struct inotify_event);
event_buffer = (char *) &event;
while (remaining > 0) {
num_bytes = read (fd, event_buffer, remaining);
event_buffer += num_bytes;
remaining -= num_bytes;
}
My way (where struct inotify_event is declared with a char filename[0]
at the end):
if ((n=read(fd, buf, sizeof buf)) > 0) {
unsigned offset=0;
while (n > 0) {
// inotify guarantees complete events
unsigned len = sizeof(struct inotify_event);
dispatch((struct inotify_event *) &buf[offset]);
len += strlen(buf[offset + len]) + 1;
n -= len;
offset += len;
}
}
Doesn't seem all that tricky.
I'm willing to believe that I'm missing something. Help me see what.
Ray
next prev parent reply other threads:[~2004-09-28 5:45 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-27 2:02 [RFC][PATCH] inotify 0.10.0 John McCutchan
2004-09-27 4:17 ` Andrew Morton
2004-09-27 20:52 ` Robert Love
2004-09-28 4:41 ` Andrew Morton
2004-09-28 2:14 ` Robert Love
2004-09-28 3:44 ` John McCutchan
2004-09-28 17:31 ` Robert Love
2004-09-28 5:45 ` Ray Lee [this message]
2004-09-28 19:08 ` Andrew Morton
2004-09-28 16:41 ` Chris Friesen
2004-09-28 16:53 ` Robert Love
2004-09-28 17:32 ` Ray Lee
2004-09-28 20:34 ` John McCutchan
2004-09-28 21:20 ` Ray Lee
2004-09-30 4:15 ` Andrew Morton
2004-09-30 1:32 ` John McCutchan
2004-09-30 1:34 ` Robert Love
2004-09-30 3:05 ` Paul Jackson
2004-09-30 5:37 ` Chris Friesen
2004-09-30 12:43 ` Paul Jackson
2004-09-30 15:29 ` Ray Lee
2004-09-30 16:27 ` Paul Jackson
2004-09-30 16:53 ` Ray Lee
2004-09-30 17:48 ` Paul Jackson
2004-10-01 1:22 ` Ray Lee
2004-10-01 4:09 ` Paul Jackson
2004-10-04 20:58 ` Ray Lee
2004-09-28 20:40 ` John McCutchan
2004-09-28 20:47 ` Robert Love
2004-09-28 21:39 ` Ray Lee
2004-09-28 22:10 ` Robert Love
2004-09-28 21:32 ` Ray Lee
2004-09-30 4:31 ` Andrew Morton
2004-09-28 20:26 ` John McCutchan
2004-09-28 21:10 ` Ray Lee
2004-09-28 21:20 ` Robert Love
2004-09-28 21:21 ` John McCutchan
2004-09-28 21:35 ` Robert Love
2004-09-28 21:50 ` Ray Lee
2004-09-28 22:03 ` Robert Love
2004-09-27 16:21 ` [gamin] [RFC][PATCH] inotify 0.10.0 [u] Martin Schlemmer [c]
2004-09-27 16:24 ` Robert Love
2004-09-27 16:30 ` Martin Schlemmer [c]
2004-09-27 16:35 ` Robert Love
2004-09-27 17:10 ` Martin Schlemmer [c]
2004-09-27 16:25 ` Martin Schlemmer [c]
2004-09-27 17:12 ` [RFC][PATCH] inotify 0.10.0 Robert Love
2004-09-27 19:48 ` Paul Jackson
2004-09-27 20:22 ` patch] inotify: use bitmap.h functions Robert Love
2004-09-27 20:38 ` Paul Jackson
2004-09-27 19:51 ` [patch] inotify: make it configurable Robert Love
2004-09-27 19:53 ` [patch] inotify: doh Robert Love
2004-09-27 20:06 ` [RFC][PATCH] inotify 0.10.0 Robert Love
2004-09-27 20:39 ` [patch] inotify: don't check private_data Robert Love
2004-09-28 1:05 ` [patch] inotify: silly fix Robert Love
2004-09-28 17:38 ` [RFC][PATCH] inotify 0.10.0 Mike Waychison
2004-09-28 20:35 ` John McCutchan
2004-09-28 17:48 ` [patch] inotify: remove timer Robert Love
2004-09-28 21:46 ` [patch] inotify: use the idr layer Robert Love
2004-09-28 21:58 ` John McCutchan
2004-09-28 22:08 ` Robert Love
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1096350328.26742.52.camel@orca.madrabbit.org \
--to=ray-lk@madrabbit.org \
--cc=akpm@osdl.org \
--cc=gamin-list@gnome.org \
--cc=iggy@gentoo.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rml@novell.com \
--cc=ttb@tentacle.dhs.org \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.