Re: PERFORCE change 59573 for review
From: Poul-Henning Kamp (phk_at_phk.freebsd.dk)
Date: 08/13/04
- Previous message: Francois Tigeot: "Re: NO_YP_LIBC patch - please test/review"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
To: arch@freebsd.org Date: Fri, 13 Aug 2004 15:53:27 +0200
Can anybody shed light on this one ?
In message <200408131349.i7DDnaJY086691@repoman.freebsd.org>, Poul-Henning Kamp
writes:
>http://perforce.freebsd.org/chv.cgi?CH=59573
>
>Change 59573 by phk@phk_bang on 2004/08/13 13:48:38
>
> Bring back the first chunk of ffs_getpages().
>
> FFS cannot run with straight vnode_pager_generic_getpages()
> and I suspect that means that the first code in ffs_getpages
> really belong in vnode_pager_generic_getpages() where other
> filesystems would benefit as well, rather than being private
> to FFS.
>
>Affected files ...
>
>.. //depot/user/phk/phk_bufwork/sys/ufs/ffs/ffs_vnops.c#13 edit
>
>Differences ...
>
>==== //depot/user/phk/phk_bufwork/sys/ufs/ffs/ffs_vnops.c#13 (text+ko) ====
>
>@@ -81,6 +81,7 @@
> extern int ffs_rawread(struct vnode *vp, struct uio *uio, int *workdone);
> #endif
> static int ffs_fsync(struct vop_fsync_args *);
>+static int ffs_getpages(struct vop_getpages_args *);
> static int ffs_read(struct vop_read_args *);
> static int ffs_write(struct vop_write_args *);
> static int ffs_extread(struct vnode *vp, struct uio *uio, int ioflag);
>@@ -100,6 +101,7 @@
> static struct vnodeopv_entry_desc ffs_vnodeop_entries[] = {
> { &vop_default_desc, (vop_t *) ufs_vnoperate },
> { &vop_fsync_desc, (vop_t *) ffs_fsync },
>+ { &vop_getpages_desc, (vop_t *) ffs_getpages },
> { &vop_read_desc, (vop_t *) ffs_read },
> { &vop_reallocblks_desc, (vop_t *) ffs_reallocblks },
> { &vop_write_desc, (vop_t *) ffs_write },
>@@ -712,6 +714,50 @@
> }
>
> /*
>+ * get page routine
>+ */
>+static int
>+ffs_getpages(ap)
>+ struct vop_getpages_args *ap;
>+{
>+ int i;
>+ vm_page_t mreq;
>+ int pcount;
>+
>+ GIANT_REQUIRED;
>+
>+ pcount = round_page(ap->a_count) / PAGE_SIZE;
>+ mreq = ap->a_m[ap->a_reqpage];
>+
>+ /*
>+ * if ANY DEV_BSIZE blocks are valid on a large filesystem block,
>+ * then the entire page is valid. Since the page may be mapped,
>+ * user programs might reference data beyond the actual end of file
>+ * occuring within the page. We have to zero that data.
>+ */
>+ VM_OBJECT_LOCK(mreq->object);
>+ if (mreq->valid) {
>+ if (mreq->valid != VM_PAGE_BITS_ALL)
>+ vm_page_zero_invalid(mreq, TRUE);
>+ vm_page_lock_queues();
>+ for (i = 0; i < pcount; i++) {
>+ if (i != ap->a_reqpage) {
>+ vm_page_free(ap->a_m[i]);
>+ }
>+ }
>+ vm_page_unlock_queues();
>+ VM_OBJECT_UNLOCK(mreq->object);
>+ return VM_PAGER_OK;
>+ }
>+ VM_OBJECT_UNLOCK(mreq->object);
>+
>+ return vnode_pager_generic_getpages(ap->a_vp, ap->a_m,
>+ ap->a_count,
>+ ap->a_reqpage);
>+}
>+
>+
>+/*
> * Extended attribute area reading.
> */
> static int
>
-- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. _______________________________________________ freebsd-arch@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-arch To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
- Previous message: Francois Tigeot: "Re: NO_YP_LIBC patch - please test/review"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]