reassign 431940 nfs-kernel-server
notfound 431940 1.39+1.40-WIP-2006.11.14+dfsg-2
found 431940 nfs-utils/1:1.1.0-4
tags 431940 +patch
thanks

On Fri, Dec 07, 2007 at 10:38:45AM -0500, Brian J. Murrell wrote:
> Has any progress been made on this bug?  It seems to have stalled after
> Marcus sent Ted the information he requested.
> 
> Any progress update would be much appreciated.

Thanks for calling my attention to this; for some reason I apparently
never got Marcus's reply, for some reason, and I lost track of this bug.

So I just pulled down the the rpc.mountd sources, and I see the problem.

The issue is that every single time get_uuid() is getting called,
which is a *huge* number of times --- in nfsd_fh, there is a nested
set of loops that runs once for every MCL type (which is 7 types)
times once for the number of lines exported in the NFS server, and for
each call to get_uuid, it is calling blkid_probe_all_new().  This is
what is calling all of the DM ioctl's.

So if you have a large number of entries in /etc/exports, and you have
a large number of devicemapper devices, what's the result?  A **huge** number
of calls to blkid_probe_all_new(), resulting in even **huger** number of calls 
to the DM ioctl's.

And to add insult to injury, it's not necessary.  The blkid library
will reprobe if necessary; we don't have to force it to reprobe by
calling blkid_probe_all_new().

So the bug fix is very simple, actually; this should fix things.

                                                - Ted

Index: nfs-utils-1.1.1~git-20070709/utils/mountd/cache.c
===================================================================
--- nfs-utils-1.1.1~git-20070709.orig/utils/mountd/cache.c
+++ nfs-utils-1.1.1~git-20070709/utils/mountd/cache.c
@@ -175,8 +175,6 @@ int get_uuid(char *path, char *uuid, int
                if (cache == NULL)
                        blkid_get_cache(&cache, NULL);
 
-               blkid_probe_all_new(cache);
-
                if (stat(path, &stb) != 0)
                        return 0;
                devname = blkid_devno_to_devname(stb.st_dev);



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to