J. Hannken-Illjes <hann...@eis.cs.tu-bs.de> wrote: > Ok -- if you want to use it, you have to implement it on the client side > as puffs has no idea how to allocate blocks -- right?
Here is my GOP_ALLOC so far. If available, use fallocate, otherwise write zeroes. puffs_vnop_write() was split into puffs_vnop_write_cache() and puffs_vnop_write_fs() int puffs_gop_alloc(struct vnode *vp, off_t off, off_t len, int flags, kauth_cred_t cred) { struct puffs_mount *pmp = MPTOPUFFSMP(vp->v_mount); int uflags = 0; void *zbuf; struct iovec iov; struct uio uio; int error; if (EXISTSOP(pmp, FALLOCATE)) { error = _puffs_vnop_fallocate(vp, off, len); goto out; } zbuf = kmem_alloc(len, KM_SLEEP); iov.iov_base = zbuf; iov.iov_len = len; UIO_SETUP_SYSSPACE(&uio); uio.uio_iov = &iov; uio.uio_iovcnt = 1; uio.uio_offset = off; uio.uio_resid = len; uio.uio_rw = UIO_WRITE; error = _puffs_vnop_write_fs(vp, &uio, IO_SYNC, cred, &uflags); if (error == 0) puffs_updatenode(VPTOPP(vp), uflags, vp->v_size); kmem_free(zbuf, len); out: return error; } -- Emmanuel Dreyfus http://hcpnet.free.fr/pubz m...@netbsd.org