--- linux-2.6.13/fs/autofs/autofs_i.h.orig 2005-08-29 03:41:01.000000000 +0400 +++ linux-2.6.13/fs/autofs/autofs_i.h 2005-09-02 20:10:59.000000000 +0400 @@ -105,6 +105,7 @@ struct autofs_sb_info { struct file *pipe; pid_t oz_pgrp; int catatonic; + struct super_block *sb; unsigned long exp_timeout; ino_t next_dir_ino; struct autofs_wait_queue *queues; /* Wait queue pointer */ @@ -134,7 +135,7 @@ void autofs_hash_insert(struct autofs_di void autofs_hash_delete(struct autofs_dir_ent *); struct autofs_dir_ent *autofs_hash_enum(const struct autofs_dirhash *,off_t *,struct autofs_dir_ent *); void autofs_hash_dputall(struct autofs_dirhash *); -void autofs_hash_nuke(struct autofs_dirhash *); +void autofs_hash_nuke(struct autofs_sb_info *); /* Expiration-handling functions */ --- linux-2.6.13/fs/autofs/inode.c.orig 2005-08-29 03:41:01.000000000 +0400 +++ linux-2.6.13/fs/autofs/inode.c 2005-09-02 20:13:43.000000000 +0400 @@ -27,7 +27,7 @@ static void autofs_put_super(struct supe if ( !sbi->catatonic ) autofs_catatonic_mode(sbi); /* Free wait queues, close pipe */ - autofs_hash_nuke(&sbi->dirhash); + autofs_hash_nuke(sbi); for ( n = 0 ; n < AUTOFS_MAX_SYMLINKS ; n++ ) { if ( test_bit(n, sbi->symlink_bitmap) ) kfree(sbi->symlink[n].data); @@ -148,6 +148,7 @@ int autofs_fill_super(struct super_block s->s_magic = AUTOFS_SUPER_MAGIC; s->s_op = &autofs_sops; s->s_time_gran = 1; + sbi->sb = s; root_inode = iget(s, AUTOFS_ROOT_INO); root = d_alloc_root(root_inode); --- linux-2.6.13/fs/autofs/dirhash.c.orig 2005-08-29 03:41:01.000000000 +0400 +++ linux-2.6.13/fs/autofs/dirhash.c 2005-09-02 20:10:59.000000000 +0400 @@ -232,13 +232,13 @@ void autofs_hash_dputall(struct autofs_d /* Delete everything. This is used on filesystem destruction, so we make no attempt to keep the pointers valid */ -void autofs_hash_nuke(struct autofs_dirhash *dh) +void autofs_hash_nuke(struct autofs_sb_info *sbi) { int i; struct autofs_dir_ent *ent, *nent; for ( i = 0 ; i < AUTOFS_HASH_SIZE ; i++ ) { - for ( ent = dh->h[i] ; ent ; ent = nent ) { + for ( ent = sbi->dirhash.h[i] ; ent ; ent = nent ) { nent = ent->next; if ( ent->dentry ) dput(ent->dentry); @@ -246,4 +246,5 @@ void autofs_hash_nuke(struct autofs_dirh kfree(ent); } } + shrink_dcache_sb(sbi->sb); }