Age | Commit message (Collapse) | Author |
|
Clearing MAY_CACHE flag on a pager initiates a memory object
termination if this one is not referenced anymore. If the object has a
significant number of dirty pages (i.e. a file recently created was
unlinked before diskfs periodical sync) this operation generates a lot
of stress on the translator. This is one of the most common sources
for thread storms.
Sync'ing the pager before clearing that flag ensures that there aren't
dirty pages in the object before its termination.
* ext2fs/pager.c (drop_pager_softrefs): Sync pager before clearing
MAY_CACHE flag.
|
|
* Fix spelling with codespell[1] and manually review it.
[1] http://git.profusion.mobi/cgit.cgi/lucas/codespell/
|
|
fatfs/
2005-07-12 Marcus Brinkmann <marcus@gnu.org>
* pager.c (diskfs_get_filemap): Initialize upi->max_prot to PROT.
|
|
* ialloc.c (diskfs_free_node): Use %Ld format for ino_t/off_t values.
* pager.c (diskfs_grow, pager_unlock_page): Likewise.
* inode.c (read_node): Likewise.
* dir.c (diskfs_get_directs): Likewise.
|
|
* pager.c (diskfs_grow): Correctly recalculate NEW_SIZE.
|
|
* dir.c (dirscanblock): Use %z format.
(diskfs_get_directs): Likewise.
* ext2fs.c (main): Likewise.
* hyper.c (get_hypermetadata): Likewise.
* pager.c (pager_unlock_page): Likewise.
|
|
* pager.c (diskfs_grow): Fix inverted logic.
|
|
* pager.c (MAX_FREE_PAGE_BUFS): Remove obsolete macro.
(FREE_PAGE_BUFS): New macro.
(free_page_bufs_lock): Make this global variable local to
get_page_buf.
(free_page_bufs): Likewise.
(num_free_page_bufs): Likewise.
(get_page_buf): Reimplement using a new caching algorithm
based on preallocation of COW zero pages.
(free_page_buf): Likewise.
(find_block): Documentation fixes.
|
|
* pager.c: Include <errno.h>.
(create_disk_pager): Panic if malloc fails.
Reported by Igor Khavkine <i_khavki@alcor.concordia.ca>.
* inode.c (diskfs_get_translator): If malloc fails, set err to ENOMEM.
Initialize err with 0, and return it at the end of the function.
Reported by Igor Khavkine <i_khavki@alcor.concordia.ca>.
|
|
* balloc.c (ext2_free_blocks, ext2_new_block): Fix formats to avoid
-Wformat warnings.
* getblk.c (ext2_alloc_block, inode_getblk, ext2_getblk): Likewise.
* ialloc.c (ext2_count_free_inodes): Likewise.
* truncate.c (trunc_direct): Likewise.
* pager.c (pending_blocks_write, diskfs_grow): Likewise.
|
|
* pager.c (file_pager_write_page): Lock NODE->dn->alloc_lock
before accessing NODE->allocsize. Fixes Debian bug #40302.
|
|
|
|
* dir.c (diskfs_lookup_hard): Pass additional parameter to
diskfs_get_filemap.
(diskfs_dirempty): Likewise.
* truncate.c (force_delayed_copies): Likewise.
* pager.c (diskfs_get_filemap): Accept additional parameter.
|
|
* pager.c (file_pager_write_page): Don't report errors on writes
that extend past NODE->allocsize. This avoids a race between sync
and truncate. Reported by Mark Kettenis <kettenis@wins.uva.nl>.
|
|
* dir.c (diskfs_get_directs): Fix sloppy bugs in last change.
* hyper.c (allocate_mod_map): Likewise.
* pager.c (get_page_buf): Likewise.
|
|
* dir.c (diskfs_get_directs): Use mmap instead of vm_allocate.
* hyper.c (allocate_mod_map): Likewise.
(get_hypermetadata): Likewise.
* pager.c (get_page_buf): Likewise.
* hyper.c (diskfs_readonly_changed): Use mprotect instead of
vm_protect.
|
|
* dir.c (diskfs_lookup_hard): Use munmap instead of vm_deallocate.
(diskfs_direnter_hard): Likewise.
(diskfs_dirremove_hard): Likewise.
(diskfs_dirrewrite_hard): Likewise.
(diskfs_dirempty): Likewise.
(diskfs_drop_dirstat): Likewise.
(diskfs_get_directs): Likewise.
* hyper.c (allocate_mod_map): Likewise.
(get_hypermetadata): Likewise.
* pager.c (free_page_buf): Likewise.
* truncate.c (poke_pages): Likewise.
|
|
* pager.c (free_page_buf): Fix type cast.
|
|
* pager.c: Clamp the number of free pages we keep around to some
reasonably small value. Patch from Mark Kettenis
<kettenis@wins.uva.nl>.
1999-06-15 Thomas Bushnell, BSG <tb@mit.edu>
* inode.c (diskfs_validate_flags_change): Invert sense of test wrt
bits that haven't yet been defined. Reported by Kalle Olavi
Niemitalo <tosi@ees2.oulu.fi>.
|
|
* inode.c (diskfs_write_disknode): Add braces to silence warning.
* pager.c (file_pager_read_page): Likewise.
|
|
* pager.c: strings.h -> string.h; gets strerror decl.
|
|
* dir.c (diskfs_lookup_hard): Cope with error return from
diskfs_get_filemap.
(diskfs_dirempty): Cope (poorly) with error return from
diskfs_get_filemap.
* truncate.c (force_delayed_copies): Likewise.
* pager.c (diskfs_get_filemap): If pager_create fails, return
error to caller.
|
|
Initialize READ to 0 to force store_read to allocate a buffer.
|
|
disk_pager_read_page, disk_pager_write_page, pager_report_extent,
find_block, pager_unlock_page, diskfs_grow):
Use store_ operations instead of the old device ones, and some store
fields instead of globals.
(file_pager_read_page):
Make BUF void **, NEW_BUF void *, and LENGTH size_t.
Pass &LENGTH to store_read, not LENGTH.
(free_page_bufs, free_page_bufs_lock):
New variables.
(create_disk_pager):
Create PAGER_BUCKET.
Pass in new args to diskfs_pager_setup (renamed from disk_pager_setup).
(service_paging_request):
Function removed.
(struct pending_blocks):
Make BUF void *.
(disk_pager_write_page):
Make BUF void *, and LENGTH size_t.
Check amount written, and return EIO if it's wrong.
(disk_image):
New variable.
(get_page_buf, free_page_buf):
New functions.
(disk_pager_read_page):
Make BUF void **, and LENGTH size_t.
Check amount read, and return EIO if it's wrong.
(file_pager_write_pager):
Make BUF void *.
(diskfs_shutdown_pager):
Use DISKFS_DISK_PAGER instead of DISK_PAGER.
(pager_read_page, pager_read_page):
Convert BUF to a pointer when calling work functions.
(file_pager_read_page:do_pending_reads, pager_unlock_page,
pending_blocks_write, diskfs_grow, find_block):
Use filesystem blocks, not device blocks, in block<->offset/size
conversions.
(pending_blocks_write):
Make PAGE_BUF void *, and LENGTH size_t.
Check amount written, and return EIO if it's wrong.
<hurd/store.h>:
New include.
|
|
(file_pager_read_page): Use free_page_buf to deallocate pages.
|
|
|
|
diskfs_grow): Don't record debugging info.
|
|
Set NODE->dn->last_page_partially_writable if we return such a page.
(diskfs_grow):
Rename OLD_END_BLOCK to END_BLOCK.
Correctly determine whether to set DN->last_page_partially_writable
after allocating new blocks.
|
|
Pass NODE->dn, not &NODE->dn to RECORD_LAST.
|
|
file_pager_write_page):
Record debugging info.
|
|
|
|
(diskfs_sync_everything): Call sync_global instead of pokel_sync.
(final_sblock): Variable removed.
|
|
references to the CACHE_ID field in the node.
|
|
Try to make the logic a bit simpler and more robust.
|
|
beyond the allocsize and return EIO.
|
|
always be allocated, so don't.
(diskfs_grow, pager_unlock_page): Don't set last_block_allocated.
|
|
(create_disk_pager): Pass MAY_CACHE to disk_setup_pager.
|
|
|
|
Don't use the p field in a upi.
(diskfs_get_filemap): Update/initialize the max_prot field. Add the prot arg.
(drop_pager_softrefs): Declare PAGER, not UPI.
(enable_caching): The disk node is upi->node, not upi->np.
(diskfs_get_filemap_pager_struct, flush_node_pager,
diskfs_file_update, pager_clear_user_data, drop_pager_softrefs):
Use pager field, not fileinfo.
(flush_node_pager): New function.
(create_disk_pager): Store the actual pager into DISK_PAGER.
(diskfs_shutdown_pager, diskfs_sync_everything):
Use DISK_PAGER directly, not ->p.
|
|
|
|
active pagers.
(diskfs_shutdown_pager): shutdown_one gets passed a pager, not a upi.
(diskfs_sync_everything): sync_one gets passed a pager, not a upi.
|
|
(pager_clear_user_data): Only clear UPI->node->dn->fileinfo if it still
points to us.
|
|
|
|
|
|
|
|
(create_disk_pager): Make a new thread to service paging requests.
(pager_bucket): New variable.
(pager_list_lock, file_pager_list): Variables deleted.
(create_disk_pager): Create pager_bucket.
(create_disk_pager, diskfs_get_filemap): Pass pager_bucket to pager_create.
(pager_traverse): Function deleted.
(diskfs_get_filemap, pager_clear_user_data): Don't add/remove UPI to/from the
pager list, as there isn't any.
(diskfs_shutdown_pager, diskfs_sync_everything): Use ports_bucket_iterate on
pager_bucket to go through all the pagers, instead of pager_traverse.
(diskfs_file_update, pager_traverse, allow_pager_softrefs,
drop_pager_softrefs): Change pager [un]ref calls to use the new ports ref
calls directly instead.
(pager_dropweak): New function (does nothing).
|
|
crash.
|
|
|
|
|
|
|