bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mountlist: libmount support on Linux


From: Karel Zak
Subject: Re: mountlist: libmount support on Linux
Date: Wed, 27 Aug 2014 21:18:33 +0200
User-agent: Mutt/1.5.22.1 (2013-10-16)

On Wed, Aug 27, 2014 at 01:06:02PM -0600, Eric Blake wrote:
> On 08/27/2014 10:15 AM, Pádraig Brady wrote:
> > On 08/27/2014 03:08 PM, Fridolin Pokorny wrote:
> >> diff --git a/lib/mountlist.c b/lib/mountlist.c
> > 
> > Cool, this fits well.
> > It would be good to mention the functionality and
> > performance benefits in the changelog.
> > 
> >> +#ifdef MOUNTED_PROC_MOUNTINFO
> >> +static const char *
> >> +mountinfo_path (void) {
> >> +  static char filename[sizeof ("/proc//mountinfo") + 13]; /* 13 to hold a 
> >> PID */
> 
> The magic number 13 is gross, compared to using <intprops.h> from gnulib
> and using INT_STRLEN_BOUND(pid_t) (which should evaluate to 13) instead.
> 
> >> +
> >> +  sprintf (filename, "/proc/%u/mountinfo", getpid ());
> >> +
> >> +  return filename;
> >> +}
> > 
> > I dislike the above as it precludes concurrent usage.
> > You could avoid that issue by allocating on the heap,
> 
> or by setting up a witness so that sprintf is called only once by the
> first caller, and all later callers wait until the first caller is complete.
> 
> > but can't this be simplified by using /proc/self/mountinfo ?
> 
> The argument here was that the kernel is slightly slower in order to
> resolve the symlink of /proc/self in all cases - but is that penalty
> going to be noticeable?

 Well, we have /proc/self is everywhere, including libmount, findmnt, 
 mount, ... systemd sources:

   $ git grep "/proc/self" | wc -l
   51

 please, don't try to be more smart then kernel, it's premature
 optimization to care about such things in userspace.

 
 BTW, there will be /proc/thread-self
 (http://lwn.net/Articles/607422/)


    Karel

-- 
 Karel Zak  <address@hidden>
 http://karelzak.blogspot.com



reply via email to

[Prev in Thread] Current Thread [Next in Thread]