Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/fs/smbfs g/c smbfs_getpages()/smbfs_putpages() we don't ...
details: https://anonhg.NetBSD.org/src/rev/e9338cb9f222
branches: trunk
changeset: 543339:e9338cb9f222
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Sun Feb 23 17:28:01 2003 +0000
description:
g/c smbfs_getpages()/smbfs_putpages() we don't use on NetBSD
diffstat:
sys/fs/smbfs/smbfs_io.c | 231 +-----------------------------------------------
1 files changed, 1 insertions(+), 230 deletions(-)
diffs (245 lines):
diff -r 59bfe6f8b3e9 -r e9338cb9f222 sys/fs/smbfs/smbfs_io.c
--- a/sys/fs/smbfs/smbfs_io.c Sun Feb 23 16:38:01 2003 +0000
+++ b/sys/fs/smbfs/smbfs_io.c Sun Feb 23 17:28:01 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: smbfs_io.c,v 1.4 2003/02/21 20:19:00 jdolecek Exp $ */
+/* $NetBSD: smbfs_io.c,v 1.5 2003/02/23 17:28:01 jdolecek Exp $ */
/*
* Copyright (c) 2000-2001, Boris Popov
@@ -392,235 +392,6 @@
return error;
}
-#ifndef __NetBSD__
-/*
- * Vnode op for VM getpages.
- * Wish wish .... get rid from multiple IO routines
- */
-int
-smbfs_getpages(ap)
- struct vop_getpages_args /* {
- struct vnode *a_vp;
- vm_page_t *a_m;
- int a_count;
- int a_reqpage;
- vm_ooffset_t a_offset;
- } */ *ap;
-{
-#ifdef SMBFS_RWGENERIC
- return vop_stdgetpages(ap);
-#else
- int i, error, nextoff, size, toff, npages, count;
- struct uio uio;
- struct iovec iov;
- vm_offset_t kva;
- struct buf *bp;
- struct vnode *vp;
- struct proc *p;
- struct ucred *cred;
- struct smbmount *smp;
- struct smbnode *np;
- struct smb_cred scred;
- vm_page_t *pages;
-
- vp = ap->a_vp;
- p = curproc;
- cred = td->td_proc->p_ucred; /* XXX */
- np = VTOSMB(vp);
- smp = VFSTOSMBFS(vp->v_mount);
- pages = ap->a_m;
- count = ap->a_count;
-
- if (vp->v_object == NULL) {
- printf("smbfs_getpages: called with non-merged cache vnode??\n");
- return VM_PAGER_ERROR;
- }
- smb_makescred(&scred, td, cred);
-
-#if __FreeBSD_version >= 400000
- bp = getpbuf(&smbfs_pbuf_freecnt);
-#else
- bp = getpbuf();
-#endif
- npages = btoc(count);
- kva = (vm_offset_t) bp->b_data;
- pmap_qenter(kva, pages, npages);
- cnt.v_vnodein++;
- cnt.v_vnodepgsin += count;
-
- iov.iov_base = (caddr_t) kva;
- iov.iov_len = count;
- uio.uio_iov = &iov;
- uio.uio_iovcnt = 1;
- uio.uio_offset = IDX_TO_OFF(pages[0]->pindex);
- uio.uio_resid = count;
- uio.uio_segflg = UIO_SYSSPACE;
- uio.uio_rw = UIO_READ;
- uio.uio_td = td;
-
- error = smb_read(smp->sm_share, np->n_fid, &uio, &scred);
- pmap_qremove(kva, npages);
-
-#if __FreeBSD_version >= 400000
- relpbuf(bp, &smbfs_pbuf_freecnt);
-#else
- relpbuf(bp);
-#endif
-
- if (error && (uio.uio_resid == count)) {
- printf("smbfs_getpages: error %d\n",error);
- for (i = 0; i < npages; i++) {
- if (ap->a_reqpage != i)
- vm_page_free(pages[i]);
- }
- return VM_PAGER_ERROR;
- }
-
- size = count - uio.uio_resid;
-
- for (i = 0, toff = 0; i < npages; i++, toff = nextoff) {
- vm_page_t m;
- nextoff = toff + PAGE_SIZE;
- m = pages[i];
-
- m->flags &= ~PG_ZERO;
-
- if (nextoff <= size) {
- m->valid = VM_PAGE_BITS_ALL;
- vm_page_undirty(m);
- } else {
- int nvalid = ((size + DEV_BSIZE - 1) - toff) & ~(DEV_BSIZE - 1);
- vm_page_set_validclean(m, 0, nvalid);
- }
-
- if (i != ap->a_reqpage) {
- /*
- * Whether or not to leave the page activated is up in
- * the air, but we should put the page on a page queue
- * somewhere (it already is in the object). Result:
- * It appears that emperical results show that
- * deactivating pages is best.
- */
-
- /*
- * Just in case someone was asking for this page we
- * now tell them that it is ok to use.
- */
- if (!error) {
- if (m->flags & PG_WANTED)
- vm_page_activate(m);
- else
- vm_page_deactivate(m);
- vm_page_wakeup(m);
- } else {
- vm_page_free(m);
- }
- }
- }
- return 0;
-#endif /* SMBFS_RWGENERIC */
-}
-
-/*
- * Vnode op for VM putpages.
- * possible bug: all IO done in sync mode
- * Note that vop_close always invalidate pages before close, so it's
- * not necessary to open vnode.
- */
-int
-smbfs_putpages(ap)
- struct vop_putpages_args /* {
- struct vnode *a_vp;
- vm_page_t *a_m;
- int a_count;
- int a_sync;
- int *a_rtvals;
- vm_ooffset_t a_offset;
- } */ *ap;
-{
- int error;
- struct vnode *vp = ap->a_vp;
- struct thread *td;
- struct ucred *cred;
-
-#ifdef SMBFS_RWGENERIC
- td = curthread; /* XXX */
- cred = td->td_proc->p_ucred; /* XXX */
- VOP_OPEN(vp, FWRITE, cred, td);
- error = vop_stdputpages(ap);
- VOP_CLOSE(vp, FWRITE, cred, td);
- return error;
-#else
- struct uio uio;
- struct iovec iov;
- vm_offset_t kva;
- struct buf *bp;
- int i, npages, count;
- int *rtvals;
- struct smbmount *smp;
- struct smbnode *np;
- struct smb_cred scred;
- vm_page_t *pages;
-
- td = curthread; /* XXX */
- cred = td->td_proc->p_ucred; /* XXX */
-/* VOP_OPEN(vp, FWRITE, cred, td);*/
- np = VTOSMB(vp);
- smp = VFSTOSMBFS(vp->v_mount);
- pages = ap->a_m;
- count = ap->a_count;
- rtvals = ap->a_rtvals;
- npages = btoc(count);
-
- for (i = 0; i < npages; i++) {
- rtvals[i] = VM_PAGER_AGAIN;
- }
-
-#if __FreeBSD_version >= 400000
- bp = getpbuf(&smbfs_pbuf_freecnt);
-#else
- bp = getpbuf();
-#endif
- kva = (vm_offset_t) bp->b_data;
- pmap_qenter(kva, pages, npages);
- cnt.v_vnodeout++;
- cnt.v_vnodepgsout += count;
-
- iov.iov_base = (caddr_t) kva;
- iov.iov_len = count;
- uio.uio_iov = &iov;
- uio.uio_iovcnt = 1;
- uio.uio_offset = IDX_TO_OFF(pages[0]->pindex);
- uio.uio_resid = count;
- uio.uio_segflg = UIO_SYSSPACE;
- uio.uio_rw = UIO_WRITE;
- uio.uio_td = td;
- SMBVDEBUG("ofs=%d,resid=%d\n",(int)uio.uio_offset, uio.uio_resid);
-
- smb_makescred(&scred, td, cred);
- error = smb_write(smp->sm_share, np->n_fid, &uio, &scred);
-/* VOP_CLOSE(vp, FWRITE, cred, td);*/
- SMBVDEBUG("paged write done: %d\n", error);
-
- pmap_qremove(kva, npages);
-#if __FreeBSD_version >= 400000
- relpbuf(bp, &smbfs_pbuf_freecnt);
-#else
- relpbuf(bp);
-#endif
-
- if (!error) {
- int nwritten = round_page(count - uio.uio_resid) / PAGE_SIZE;
- for (i = 0; i < nwritten; i++) {
- rtvals[i] = VM_PAGER_OK;
- vm_page_undirty(pages[i]);
- }
- }
- return rtvals[0];
-#endif /* SMBFS_RWGENERIC */
-}
-#endif /* !__NetBSD__ */
-
/*
* Flush and invalidate all dirty buffers. If another process is already
* doing the flush, just wait for completion.
Home |
Main Index |
Thread Index |
Old Index