On Tue, 2009-01-20 at 12:31 +1100, Paul Wankadia wrote:
> On Mon, Jan 19, 2009 at 11:24 PM, Ian Kent <ra...@themaw.net> wrote:

snip ...

>         @@ -391,7 +380,6 @@ int lookup_read_master(struct master
>         *master, time_t age, void *context)
>                int blen;
>                char *path;
>                char *ent;
>         -       struct stat st;
>                FILE *f;
>                int fd;
> 
> You should be able to get rid of `fd' and the fileno(3) call now.
> 
> 
>                unsigned int path_len, ent_len;
>         @@ -504,13 +492,6 @@ int lookup_read_master(struct master
>         *master, time_t age, void *context)
>                                break;
>                }
>         
>         -       if (fstat(fd, &st)) {
>         -               crit(logopt, MODPREFIX "file map %s, could not
>         stat",
>         -                      ctxt->mapname);
>         -               return NSS_STATUS_UNAVAIL;
>         -       }
>         -       ctxt->mtime = st.st_mtime;
>         -
>                fclose(f);
>         
>                return NSS_STATUS_SUCCESS;
>         @@ -642,7 +623,6 @@ int lookup_read_map(struct autofs_point
>         *ap, time_t age, void *context)
>                struct mapent_cache *mc;
>                char *key;
>                char *mapent;
>         -       struct stat st;
>                FILE *f;
>                int fd;
> 
> You should be able to get rid of `fd' and the fileno(3) call now.

Yep, quite right.

> 
> 
>                unsigned int k_len, m_len;
>         @@ -748,13 +728,6 @@ int lookup_read_map(struct autofs_point
>         *ap, time_t age, void *context)
>                                break;
>                }
>         
>         -       if (fstat(fd, &st)) {
>         -               crit(ap->logopt,
>         -                    MODPREFIX "file map %s, could not stat",
>         -                    ctxt->mapname);
>         -               return NSS_STATUS_UNAVAIL;
>         -       }
>         -       ctxt->mtime = st.st_mtime;
>                source->age = age;
>         
>                fclose(f);
>         @@ -951,9 +924,6 @@ static int check_map_indirect(struct
>         autofs_point *ap,
>                if (ret == CHE_FAIL)
>                        return NSS_STATUS_NOTFOUND;
>         
>         -       if (ret & CHE_UPDATED)
>         -               source->stale = 1;
>         -
>                pthread_cleanup_push(cache_lock_cleanup, mc);
>                cache_writelock(mc);
>                exists = cache_lookup_distinct(mc, key);
>         @@ -963,7 +933,6 @@ static int check_map_indirect(struct
>         autofs_point *ap,
>                                free(exists->mapent);
>                                exists->mapent = NULL;
>                                exists->status = 0;
>         -                       source->stale = 1;
>                        }
>                }
>                pthread_cleanup_pop(1);
>         @@ -985,14 +954,8 @@ static int check_map_indirect(struct
>         autofs_point *ap,
>                        we = cache_lookup_distinct(mc, "*");
>                        if (we) {
>                                /* Wildcard entry existed and is now
>         gone */
>         -                       if (we->source == source && (wild &
>         CHE_MISSING)) {
>         +                       if (we->source == source && (wild &
>         CHE_MISSING))
>                                        cache_delete(mc, "*");
>         -                               source->stale = 1;
>         -                       }
>         -               } else {
>         -                       /* Wildcard not in map but now is */
>         -                       if (wild & (CHE_OK | CHE_UPDATED))
>         -                               source->stale = 1;
>                        }
>                        pthread_cleanup_pop(1);
>         
>         @@ -1062,9 +1025,28 @@ int lookup_mount(struct autofs_point
>         *ap, const char *name, int name_len, void *
>                 * we never know about it.
>                 */
>                if (ap->type == LKP_INDIRECT && *key != '/') {
>         +               struct stat st;
>                        char *lkp_key;
>         
>         +               /*
>         +                * We can skip the map lookup and cache update
>         altogether
>         +                * if we know the map hasn't been modified
>         since it was
>         +                * last read. If it has then we can mark the
>         map stale
>         +                * so a re-read is triggered following the
>         lookup.
>         +                */
>         +               if (stat(ctxt->mapname, &st)) {
>         +                       error(ap->logopt, MODPREFIX
>         +                             "file map %s, could not stat",
>         ctxt->mapname);
>         +                       return NSS_STATUS_UNAVAIL;
>         +               }
>         +
>                        cache_readlock(mc);
>         +               me = cache_lookup_first(mc);
>         +               if (me && st.st_mtime <= me->age)
>         +                       goto do_cache_lookup;
>         +               else
>         +                       source->stale = 1;
> 
> Perhaps some output for debugging purposes wouldn't go astray?

Mmm .. I'll see what I can do.

> 
> 
>         +
>                        me = cache_lookup_distinct(mc, key);
>                        if (me && me->multi)
>                                lkp_key = strdup(me->multi->key);
>         @@ -1088,6 +1070,7 @@ int lookup_mount(struct autofs_point
>         *ap, const char *name, int name_len, void *
>                }
>         
>                cache_readlock(mc);
>         +do_cache_lookup:
>                me = cache_lookup(mc, key);
>                /* Stale mapent => check for entry in alternate source
>         or wildcard */
>                if (me && !me->mapent) {
>         
> 

_______________________________________________
autofs mailing list
autofs@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to