uipc_syscalls.c (cfe30d02adda7c3b5c76156ac52d50d8cab325d9) | uipc_syscalls.c (05d1f5bce0130b3220e260ca133b58cfa10a22a8) |
---|---|
1/*- 2 * Copyright (c) 1982, 1986, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * sendfile(2) and related extensions: 6 * Copyright (c) 1998, David Greenman. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 101 unchanged lines hidden (view full) --- 110static int accept1(struct thread *td, int s, struct sockaddr *uname, 111 socklen_t *anamelen, int flags); 112static int do_sendfile(struct thread *td, struct sendfile_args *uap, int compat); 113static int getsockname1(struct thread *td, struct getsockname_args *uap, 114 int compat); 115static int getpeername1(struct thread *td, struct getpeername_args *uap, 116 int compat); 117 | 1/*- 2 * Copyright (c) 1982, 1986, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * sendfile(2) and related extensions: 6 * Copyright (c) 1998, David Greenman. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 101 unchanged lines hidden (view full) --- 110static int accept1(struct thread *td, int s, struct sockaddr *uname, 111 socklen_t *anamelen, int flags); 112static int do_sendfile(struct thread *td, struct sendfile_args *uap, int compat); 113static int getsockname1(struct thread *td, struct getsockname_args *uap, 114 int compat); 115static int getpeername1(struct thread *td, struct getpeername_args *uap, 116 int compat); 117 |
118counter_u64_t sfstat[sizeof(struct sfstat) / sizeof(uint64_t)]; |
|
118/* 119 * NSFBUFS-related variables and associated sysctls 120 */ 121int nsfbufs; 122int nsfbufspeak; 123int nsfbufsused; 124 125SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufs, CTLFLAG_RDTUN, &nsfbufs, 0, 126 "Maximum number of sendfile(2) sf_bufs available"); 127SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufspeak, CTLFLAG_RD, &nsfbufspeak, 0, 128 "Number of sendfile(2) sf_bufs at peak usage"); 129SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufsused, CTLFLAG_RD, &nsfbufsused, 0, 130 "Number of sendfile(2) sf_bufs in use"); 131 | 119/* 120 * NSFBUFS-related variables and associated sysctls 121 */ 122int nsfbufs; 123int nsfbufspeak; 124int nsfbufsused; 125 126SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufs, CTLFLAG_RDTUN, &nsfbufs, 0, 127 "Maximum number of sendfile(2) sf_bufs available"); 128SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufspeak, CTLFLAG_RD, &nsfbufspeak, 0, 129 "Number of sendfile(2) sf_bufs at peak usage"); 130SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufsused, CTLFLAG_RD, &nsfbufsused, 0, 131 "Number of sendfile(2) sf_bufs in use"); 132 |
133static void 134sfstat_init(const void *unused) 135{ 136 137 COUNTER_ARRAY_ALLOC(sfstat, sizeof(struct sfstat) / sizeof(uint64_t), 138 M_WAITOK); 139} 140SYSINIT(sfstat, SI_SUB_MBUF, SI_ORDER_FIRST, sfstat_init, NULL); 141 142static int 143sfstat_sysctl(SYSCTL_HANDLER_ARGS) 144{ 145 struct sfstat s; 146 147 COUNTER_ARRAY_COPY(sfstat, &s, sizeof(s) / sizeof(uint64_t)); 148 if (req->newptr) 149 COUNTER_ARRAY_ZERO(sfstat, sizeof(s) / sizeof(uint64_t)); 150 return (SYSCTL_OUT(req, &s, sizeof(s))); 151} 152SYSCTL_PROC(_kern_ipc, OID_AUTO, sfstat, CTLTYPE_OPAQUE | CTLFLAG_RW, 153 NULL, 0, sfstat_sysctl, "I", "sendfile statistics"); |
|
132/* 133 * Convert a user file descriptor to a kernel file entry and check if required 134 * capability rights are present. 135 * A reference on the file entry is held upon returning. 136 */ 137static int 138getsock_cap(struct filedesc *fdp, int fd, cap_rights_t rights, 139 struct file **fpp, u_int *fflagp) --- 2096 unchanged lines hidden (view full) --- 2236 error = vn_rdwr(UIO_READ, vp, NULL, MAXBSIZE, 2237 trunc_page(off), UIO_NOCOPY, IO_NODELOCKED | 2238 IO_VMIO | ((MAXBSIZE / bsize) << IO_SEQSHIFT), 2239 td->td_ucred, NOCRED, &resid, td); 2240 VM_OBJECT_WLOCK(obj); 2241 vm_page_io_finish(pg); 2242 if (!error) 2243 VM_OBJECT_WUNLOCK(obj); | 154/* 155 * Convert a user file descriptor to a kernel file entry and check if required 156 * capability rights are present. 157 * A reference on the file entry is held upon returning. 158 */ 159static int 160getsock_cap(struct filedesc *fdp, int fd, cap_rights_t rights, 161 struct file **fpp, u_int *fflagp) --- 2096 unchanged lines hidden (view full) --- 2258 error = vn_rdwr(UIO_READ, vp, NULL, MAXBSIZE, 2259 trunc_page(off), UIO_NOCOPY, IO_NODELOCKED | 2260 IO_VMIO | ((MAXBSIZE / bsize) << IO_SEQSHIFT), 2261 td->td_ucred, NOCRED, &resid, td); 2262 VM_OBJECT_WLOCK(obj); 2263 vm_page_io_finish(pg); 2264 if (!error) 2265 VM_OBJECT_WUNLOCK(obj); |
2244 mbstat.sf_iocnt++; | 2266 SFSTAT_INC(sf_iocnt); |
2245 } 2246 if (error) { 2247 vm_page_lock(pg); 2248 vm_page_unwire(pg, 0); 2249 /* 2250 * See if anyone else might know about 2251 * this page. If not and it is not valid, 2252 * then free it. --- 15 unchanged lines hidden (view full) --- 2268 * can be interrupted. For consequent 2269 * buffers, do not sleep, since several 2270 * threads might exhaust the buffers and then 2271 * deadlock. 2272 */ 2273 sf = sf_buf_alloc(pg, (mnw || m != NULL) ? SFB_NOWAIT : 2274 SFB_CATCH); 2275 if (sf == NULL) { | 2267 } 2268 if (error) { 2269 vm_page_lock(pg); 2270 vm_page_unwire(pg, 0); 2271 /* 2272 * See if anyone else might know about 2273 * this page. If not and it is not valid, 2274 * then free it. --- 15 unchanged lines hidden (view full) --- 2290 * can be interrupted. For consequent 2291 * buffers, do not sleep, since several 2292 * threads might exhaust the buffers and then 2293 * deadlock. 2294 */ 2295 sf = sf_buf_alloc(pg, (mnw || m != NULL) ? SFB_NOWAIT : 2296 SFB_CATCH); 2297 if (sf == NULL) { |
2276 mbstat.sf_allocfail++; | 2298 SFSTAT_INC(sf_allocfail); |
2277 vm_page_lock(pg); 2278 vm_page_unwire(pg, 0); 2279 KASSERT(pg->object != NULL, 2280 ("kern_sendfile: object disappeared")); 2281 vm_page_unlock(pg); 2282 if (m == NULL) 2283 error = (mnw ? EAGAIN : EINTR); 2284 break; --- 628 unchanged lines hidden --- | 2299 vm_page_lock(pg); 2300 vm_page_unwire(pg, 0); 2301 KASSERT(pg->object != NULL, 2302 ("kern_sendfile: object disappeared")); 2303 vm_page_unlock(pg); 2304 if (m == NULL) 2305 error = (mnw ? EAGAIN : EINTR); 2306 break; --- 628 unchanged lines hidden --- |