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]