Subject: Re: namei caching of newly created files?
To: None <ups@tree.com>
From: Havard Eidnes <he@uninett.no>
List: tech-perform
Date: 01/20/2005 01:43:55
> cache_enter() should not be used by file system independent code.
> ufs_makeinode() looks like (no warranty - you need to check) the righ=
t
> place to add the call.

OK, does this look any better?

Index: ufs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/src/sys/ufs/ufs/ufs_vnops.c,v
retrieving revision 1.123
diff -u -u -1 -0 -r1.123 ufs_vnops.c
--- ufs_vnops.c 21 Sep 2004 03:10:36 -0000      1.123
+++ ufs_vnops.c 20 Jan 2005 00:42:19 -0000
@@ -2107,20 +2107,21 @@
         * Make sure inode goes to disk before directory entry.
         */
        if ((error =3D VOP_UPDATE(tvp, NULL, NULL, UPDATE_DIROP)) !=3D =
0)
                goto bad;
        newdir =3D pool_get(&ufs_direct_pool, PR_WAITOK);
        ufs_makedirentry(ip, cnp, newdir);
        error =3D ufs_direnter(dvp, tvp, newdir, cnp, NULL);
        pool_put(&ufs_direct_pool, newdir);
        if (error)
                goto bad;
+       cache_enter(dvp, tvp, cnp);
        if ((cnp->cn_flags & SAVESTART) =3D=3D 0)
                PNBUF_PUT(cnp->cn_pnbuf);
        vput(dvp);
        *vpp =3D tvp;
        return (0);
 =

  bad:
        /*
         * Write error occurred trying to update the inode
         * or the directory so must deallocate the inode.

Regards,

- H=E5vard