FBSD, DFBSD (future) call afs_FakeOpen in the write path
[openafs.git] / src / afs / VNOPS / afs_vnop_write.c
index ac0894e..c0672e8 100644 (file)
@@ -110,6 +110,9 @@ afs_MemWrite(struct vcache *avc, struct uio *auio, int aio,
     volatile
 #endif
     afs_int32 error;
+#if defined(AFS_FBSD_ENV) || defined(AFS_DFBSD_ENV)
+    struct vnode *vp = AFSTOV(avc);
+#endif
 #ifdef AFS_DARWIN80_ENV
     uio_t tuiop = NULL;
 #else
@@ -182,7 +185,7 @@ afs_MemWrite(struct vcache *avc, struct uio *auio, int aio,
        return (EFBIG);
     }
 #endif
-#ifdef AFS_VM_RDWR_ENV
+#if defined(AFS_VM_RDWR_ENV) && !defined(AFS_FAKEOPEN_ENV)
     /*
      * If write is implemented via VM, afs_FakeOpen() is called from the
      * high-level write op.
@@ -268,6 +271,9 @@ afs_MemWrite(struct vcache *avc, struct uio *auio, int aio,
                       ICL_HANDLE_OFFSET(avc->f.m.Length), ICL_TYPE_OFFSET,
                       ICL_HANDLE_OFFSET(filePos));
            avc->f.m.Length = filePos;
+#if defined(AFS_FBSD_ENV) || defined(AFS_DFBSD_ENV)
+            vnode_pager_setsize(vp, filePos);
+#endif
        }
 #endif
        ReleaseWriteLock(&tdc->lock);
@@ -286,7 +292,7 @@ afs_MemWrite(struct vcache *avc, struct uio *auio, int aio,
        }
 #endif
     }
-#ifndef        AFS_VM_RDWR_ENV
+#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_FAKEOPEN_ENV)
     afs_FakeClose(avc, acred);
 #endif
     if (error && !avc->vc_error)
@@ -321,6 +327,9 @@ afs_UFSWrite(struct vcache *avc, struct uio *auio, int aio,
     volatile
 #endif
     afs_int32 error;
+#if defined(AFS_FBSD_ENV) || defined(AFS_DFBSD_ENV)
+    struct vnode *vp = AFSTOV(avc);
+#endif
 #ifdef AFS_DARWIN80_ENV
     uio_t tuiop = NULL;
 #else
@@ -397,7 +406,7 @@ afs_UFSWrite(struct vcache *avc, struct uio *auio, int aio,
        return (EFBIG);
     }
 #endif
-#ifdef AFS_VM_RDWR_ENV
+#if defined(AFS_VM_RDWR_ENV) && !defined(AFS_FAKEOPEN_ENV)
     /*
      * If write is implemented via VM, afs_FakeOpen() is called from the
      * high-level write op.
@@ -570,6 +579,9 @@ afs_UFSWrite(struct vcache *avc, struct uio *auio, int aio,
                       ICL_HANDLE_OFFSET(avc->f.m.Length), ICL_TYPE_OFFSET,
                       ICL_HANDLE_OFFSET(filePos));
            avc->f.m.Length = filePos;
+#if defined(AFS_FBSD_ENV) || defined(AFS_DFBSD_ENV)
+            vnode_pager_setsize(vp, filePos);
+#endif
        }
 #endif
        osi_UFSClose(tfile);
@@ -589,7 +601,7 @@ afs_UFSWrite(struct vcache *avc, struct uio *auio, int aio,
        }
 #endif
     }
-#ifndef        AFS_VM_RDWR_ENV
+#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_FAKEOPEN_ENV)
     afs_FakeClose(avc, acred);
 #endif
     error = afs_CheckCode(error, &treq, 7);