==> Regarding Re: [patch] get rid of is_mounted checks in cache_clean; Ian Kent <[EMAIL PROTECTED]> adds:
raven> On Mon, 25 Apr 2005, Jeff Moyer wrote: >> Hi, Ian, >> >> I'm not sure what purpose the following check serves in the cache_clean >> function: >> >> if (is_mounted(_PATH_MOUNTED, path)) { free(path); continue; } >> >> In the event that the map was updated, we signal the daemon to do a >> re-read of the entire map. If the mount finishes before the daemon is >> able to process this signal, we end up not pruning the old entry for the >> given path. Now, because we append entries to the cache, we end up with >> the stale entry first, followed by the updated entry. This means that >> subsequent lookups will give the old entry. raven> This was originally meant to stop busy (currently mounted) entries raven> from disappearing from the cache. raven> I'll check whether this is actually needed and get back. raven> One thing that comes to mind is that the direct mount rework design raven> might need this. Well, unfortunately I cannot comment on that. We had have a very precise definite of what it means to be in the cache, then, if there are to be side-effects of removing entries. Anyway, the patch I sent was somewhat incomplete. Look at this: if (me->age < age) { pred->next = me->next; free(me->key); free(me->mapent); free(me); me = pred; rmdir_path(path); } The rmdir_path is unneeded, and I would argue has no business being here. It is the job of the umount_multi code to clean up the directory tree, not the cache code. Lucky for us, the umount_multi path doesn't error out if a directory is removed for it (thinking of odd races, here). Anyway, the attached patch (diffed against current cvs) is more complete in this respect. It gets rid of these rmdir_path calls. -Jeff Index: lib/cache.c =================================================================== RCS file: /root/autofs/lib/cache.c,v retrieving revision 1.14 diff -u -p -r1.14 cache.c --- a/lib/cache.c 25 Apr 2005 03:42:08 -0000 1.14 +++ b/lib/cache.c 27 Apr 2005 00:22:41 -0000 @@ -312,18 +312,12 @@ void cache_clean(const char *root, time_ if (!path) return; - if (is_mounted(_PATH_MOUNTED, path)) { - free(path); - continue; - } - if (me->age < age) { pred->next = me->next; free(me->key); free(me->mapent); free(me); me = pred; - rmdir_path(path); } free(path); @@ -337,12 +331,8 @@ void cache_clean(const char *root, time_ if (!path) return; - if (is_mounted(_PATH_MOUNTED, path)) - continue; - if (me->age < age) { mapent_hash[i] = me->next; - rmdir_path(path); free(me->key); free(me->mapent); free(me); _______________________________________________ autofs mailing list autofs@linux.kernel.org http://linux.kernel.org/mailman/listinfo/autofs