| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
it has less overhead.
2. Avoid scheduling task if maximum number of I/O threads is reached.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
so other threads can not see it if we unlock the proc
lock (this can happen in knlist_delete). Don't do wakeup,
it is not necessary.
2. Decrease kaio_buffer_count in biohelper rather than
doing it in aio_bio_done_notify.
3. In aio_bio_done_notify, don't send notification if KAIO_RUNDOWN
was set, because the process is already in single thread mode.
4. Use assignment to initialize aiothreadflags.
5. AIOCBLIST_RUNDOWN is not useful, axe the code using it.
6. use LIO_NOP instead of zero.
|
|
|
|
|
|
| |
this eliminates a divided-by-zero fault.
Recommended by: phk
|
| |
|
| |
|
|
|
|
| |
in aio_return, unlock proc lock before suword.
|
|
|
|
| |
Temporarily fix a locking problem for socket I/O.
|
| |
|
|
|
|
|
|
|
|
|
| |
1) unregsiter kqueue filter for EVFILT_LIO.
2) free uma_zones.
3) call setsid directly to enter another session rather than
implementing by itself.
Submitted by: jhb
|
| |
|
| |
|
|
|
|
|
| |
so that lio_listio won't exceed the quota.
2) Remove lio_ref_count, it is no longer used.
|
| |
|
|
|
|
| |
after we notified it.
|
| |
|
|
|
|
|
|
|
| |
a valid kaioinfo structure. This avoids a potential NULL pointer dereference.
Found with: Coverity Prevent(tm)
MFC after: 2 weeks
|
|
|
|
|
|
| |
fget_write() DTRT.
Requested by: bde
|
|
|
|
|
|
|
|
|
|
|
| |
have started aio, instead, initialize aio management structure
if it hasn't been done, the reason to adjust this behavior is
to make it a bit friendly for threaded program, consider two
threads, one submits aio_write, and another just calls
aio_waitcomplete to wait any I/O to be completed and recycle the
aio requests, before submitter doing any I/O, the recycler wants
to wait in kernel. This also fixes inconsistency with other aio
syscalls.
|
|
|
|
|
|
|
|
|
|
|
| |
- Use curthread for calls to knlist_delete() and add a big comment
explaining why as well as appropriate assertions.
- Use TAILQ_FOREACH and TAILQ_FOREACH_SAFE instead of handrolling them.
- Use fget() family of functions to lookup file objects instead of
grovelling around in file descriptor tables.
- Destroy the aio_freeproc mutex if we are unloaded.
Tested on: i386
|
|
|
|
|
|
| |
sigval_int really should be sival_ptr and sival_int.
Also sigev_notify_function accepts a union sigval value but not a
pointer.
|
|
|
|
| |
signal memory is pre-allocated, so kernel can always notify user code.
|
|
|
|
|
|
|
| |
Other callers such as some rfork() cases weren't locking Giant anyway.
Reviewed by: csjp
MFC after: 1 week
|
|
|
|
|
|
|
| |
sigev_notify_function and sigev_notify_attributes. AIO syscalls
use sigevent, so they have to be adjusted.
Reviewed by: alc
|
|
|
|
|
|
| |
locking is required in for aio.
Pointed out by: imp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
notifications when LIO operations completed. These were the problems
with LIO event complete notification:
- Move all LIO/AIO event notification into one general function
so we don't have bugs in different data paths. This unification
got rid of several notification bugs one of which if kqueue was
used a SIGILL could get sent to the process.
- Change the LIO event accounting to count all AIO request that
could have been split across the fast path and daemon mode.
The prior accounting only kept track of AIO op's in that
mode and not the entire list of operations. This could cause
a bogus LIO event complete notification to occur when all of
the fast path AIO op's completed and not the AIO op's that
ended up queued for the daemon.
Suggestions from: alc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
make the b_iodone callback responsible for setting it if it is needed.
Previously, it was set unconditionally by bufdone() without holding
whichever lock is shared by the b_iodone callback and the corresponding
top-half function. Consequently, in a race, the top-half function could
conclude that operation was done before the b_iodone callback finished.
See, for example, aio_physwakeup() and aio_fphysio().
Note: I don't believe that the other, more widely-used b_iodone callbacks
are affected.
Discussed with: jeff
Reviewed by: phk
MFC after: 2 weeks
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Introducing the possibility of using locks different than mutexes
for the knlist locking. In order to do this, we add three arguments to
knlist_init() to specify the functions to use to lock, unlock and
check if the lock is owned. If these arguments are NULL, we assume
mtx_lock, mtx_unlock and mtx_owned, respectively.
- Using the vnode lock for the knlist locking, when doing kqueue operations
on a vnode. This way, we don't have to lock the vnode while holding a
mutex, in filt_vfsread.
Reviewed by: jmg
Approved by: re (scottl), scottl (mentor override)
Pointyhat to: ssouhlal
Will be happy: everyone
|
|
|
|
|
|
| |
lio_listio(LIO_WAIT, ...) works correctly on 64-bit architectures.
Reviewed by: tegge
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
aio_write(2) completion through kevent(2). This method does not work on
64-bit architectures. It was deprecated in FreeBSD 4.4. See revisions
1.87 and 1.70.2.7.
Change aio_physwakeup() to call psignal(9) directly rather than indirectly
through a timeout(9). Discussed with: bde
Correct a bug introduced in revision 1.65 that could result in premature
delivery of a signal if an lio_listio(2) consisted of a mixture of
direct/raw and queued I/O operations. Observed by: tegge
Eliminate a field from struct kaioinfo that is now unused.
Reviewed by: tegge
|
| |
|
| |
|
|
|
|
|
|
| |
calls.
Reduce the scope of Giant in aio_daemon().
|
| |
|
|
|
|
| |
Eliminate an unused flag, AIOP_SCHED; it's cleared but never set.
|
| |
|
| |
|
|
|
|
|
|
| |
soon.
Sponsored by: Isilon Systems, Inc.
|
|
|
|
|
|
|
|
|
|
|
|
| |
w/o problems than I was before... This simply brings back the knote_delete
as knlist_delete which will also drop the knote's, instead of just clearing
the list and seeing _ONESHOT...
Fix a race where if a note was _INFLUX and _DETACHED, it could end up being
modified... whoopse..
MFC after: 1 week
Prodded by: ambrisko and dwhite
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
buf->b-dev.
Put a bio between the buf passed to dev_strategy() and the device driver
strategy routine in order to not clobber fields in the buf.
Assert copyright on vfs_bio.c and update copyright message to canonical
text. There is no legal difference between John Dysons two-clause
abbreviated BSD license and the canonical text.
|
|
|
|
|
|
|
| |
We keep si_bsize_phys around for now as that is the simplest way to pull
the number out of disk device drivers in devfs_open(). The correct solution
would be to do an ioctl(DIOCGSECTORSIZE), but the point is probably mooth
when filesystems sit on GEOM, so don't bother for now.
|
| |
|
|
|
|
| |
Make dev_strategy() handle errors and departing devices properly.
|
|
|
|
|
|
| |
NET_NEEDS_GIANT().
RELENG_5 candidate.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a more complete subsystem, and removes the knowlege of how things are
implemented from the drivers. Include locking around filter ops, so a
module like aio will know when not to be unloaded if there are outstanding
knotes using it's filter ops.
Currently, it uses the MTX_DUPOK even though it is not always safe to
aquire duplicate locks. Witness currently doesn't support the ability
to discover if a dup lock is ok (in some cases).
Reviewed by: green, rwatson (both earlier versions)
|
| |
|