Deleted Added
sdiff udiff text old ( 197953 ) new ( 207530 )
full compact
1/* $NetBSD: tmpfs_vnops.c,v 1.39 2007/07/23 15:41:01 jmmv Exp $ */
2
3/*-
4 * Copyright (c) 2005, 2006 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Julio M. Merino Vidal, developed as part of Google's Summer of Code

--- 20 unchanged lines hidden (view full) ---

29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33/*
34 * tmpfs vnode interface.
35 */
36#include <sys/cdefs.h>
37__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_vnops.c 197953 2009-10-11 07:03:56Z delphij $");
38
39#include <sys/param.h>
40#include <sys/fcntl.h>
41#include <sys/lockf.h>
42#include <sys/namei.h>
43#include <sys/priv.h>
44#include <sys/proc.h>
45#include <sys/resourcevar.h>

--- 465 unchanged lines hidden (view full) ---

511 if ((vobj == NULL) ||
512 (vobj->resident_page_count == 0 && vobj->cache == NULL))
513 goto nocache;
514
515 VM_OBJECT_LOCK(vobj);
516lookupvpg:
517 if (((m = vm_page_lookup(vobj, idx)) != NULL) &&
518 vm_page_is_valid(m, offset, tlen)) {
519 if (vm_page_sleep_if_busy(m, FALSE, "tmfsmr"))
520 goto lookupvpg;
521 vm_page_busy(m);
522 VM_OBJECT_UNLOCK(vobj);
523 error = uiomove_fromphys(&m, offset, tlen, uio);
524 VM_OBJECT_LOCK(vobj);
525 vm_page_wakeup(m);
526 VM_OBJECT_UNLOCK(vobj);
527 return (error);
528 } else if (m != NULL && uio->uio_segflg == UIO_NOCOPY) {
529 if (vm_page_sleep_if_busy(m, FALSE, "tmfsmr"))
530 goto lookupvpg;
531 vm_page_busy(m);
532 VM_OBJECT_UNLOCK(vobj);
533 sched_pin();
534 sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
535 ma = (char *)sf_buf_kva(sf);
536 error = tmpfs_nocacheread_buf(tobj, idx, offset, tlen,
537 ma + offset);
538 if (error == 0) {

--- 83 unchanged lines hidden (view full) ---

622 vpg = NULL;
623 goto nocache;
624 }
625
626 VM_OBJECT_LOCK(vobj);
627lookupvpg:
628 if (((vpg = vm_page_lookup(vobj, idx)) != NULL) &&
629 vm_page_is_valid(vpg, offset, tlen)) {
630 if (vm_page_sleep_if_busy(vpg, FALSE, "tmfsmw"))
631 goto lookupvpg;
632 vm_page_busy(vpg);
633 vm_page_lock_queues();
634 vm_page_undirty(vpg);
635 vm_page_unlock_queues();
636 VM_OBJECT_UNLOCK(vobj);
637 error = uiomove_fromphys(&vpg, offset, tlen, uio);
638 } else {
639 if (__predict_false(vobj->cache != NULL))

--- 927 unchanged lines hidden ---