Call vnode_pager_setsize() before BALLOC rather than after.
authorMatthew Dillon <dillon@dragonflybsd.org>
Mon, 24 Apr 2006 21:45:47 +0000 (21:45 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Mon, 24 Apr 2006 21:45:47 +0000 (21:45 +0000)
sys/vfs/ufs/ufs_lookup.c
sys/vfs/ufs/ufs_vnops.c

index a0b78b6..41336dc 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)ufs_lookup.c        8.15 (Berkeley) 6/16/95
  * $FreeBSD: src/sys/ufs/ufs/ufs_lookup.c,v 1.33.2.7 2001/09/22 19:22:13 iedowse Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_lookup.c,v 1.21 2006/04/05 20:22:30 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_lookup.c,v 1.22 2006/04/24 21:45:47 dillon Exp $
  */
 
 #include "opt_ufs.h"
@@ -716,6 +716,7 @@ ufs_direnter(struct vnode *dvp, struct vnode *tvp, struct direct *dirp,
                 */
                if (dp->i_offset & (DIRBLKSIZ - 1))
                        panic("ufs_direnter: newblk");
+               vnode_pager_setsize(dvp, dp->i_offset + DIRBLKSIZ);
                flags = B_CLRBUF;
                if (!DOINGSOFTDEP(dvp) && !DOINGASYNC(dvp))
                        flags |= B_SYNC;
@@ -727,7 +728,6 @@ ufs_direnter(struct vnode *dvp, struct vnode *tvp, struct direct *dirp,
                }
                dp->i_size = dp->i_offset + DIRBLKSIZ;
                dp->i_flag |= IN_CHANGE | IN_UPDATE;
-               vnode_pager_setsize(dvp, (u_long)dp->i_size);
                dirp->d_reclen = DIRBLKSIZ;
                blkoff = dp->i_offset &
                    (VFSTOUFS(dvp->v_mount)->um_mountp->mnt_stat.f_iosize - 1);
index 68c2776..1b481f4 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95
  * $FreeBSD: src/sys/ufs/ufs/ufs_vnops.c,v 1.131.2.8 2003/01/02 17:26:19 bde Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_vnops.c,v 1.42 2006/04/07 06:38:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_vnops.c,v 1.43 2006/04/24 21:45:47 dillon Exp $
  */
 
 #include "opt_quota.h"
@@ -1429,12 +1429,12 @@ ufs_mkdir(struct vop_old_mkdir_args *ap)
        dirtemplate = *dtp;
        dirtemplate.dot_ino = ip->i_number;
        dirtemplate.dotdot_ino = dp->i_number;
+       vnode_pager_setsize(tvp, DIRBLKSIZ);
        error = VOP_BALLOC(tvp, 0LL, DIRBLKSIZ, cnp->cn_cred, B_CLRBUF, &bp);
        if (error)
                goto bad;
        ip->i_size = DIRBLKSIZ;
        ip->i_flag |= IN_CHANGE | IN_UPDATE;
-       vnode_pager_setsize(tvp, (u_long)ip->i_size);
        bcopy((caddr_t)&dirtemplate, (caddr_t)bp->b_data, sizeof dirtemplate);
        if (DOINGSOFTDEP(tvp)) {
                /*