History log of /dflybsd-src/sys/vfs/hammer/hammer_vfsops.c (Results 101 – 125 of 179)
Revision Date Author Comments
# 39d8fd63 20-Jun-2009 Matthew Dillon <dillon@apollo.backplane.com>

HAMER VFS - Cache additional b-tree nodes in directory.

* Cache inode record cursors in the directory at dip->cache[2] to reduce
cpu overhead when iterating a directory.

* Cache file object recor

HAMER VFS - Cache additional b-tree nodes in directory.

* Cache inode record cursors in the directory at dip->cache[2] to reduce
cpu overhead when iterating a directory.

* Cache file object record cursors in the file's governing directory at
dip->cache[3] after reading the last data record in a file, to reduce
cpu overhead when chain-reading files.

* Also add vfs.hammer.stats_btree_root_iterations, a counter which
is incremented whenever a B-Tree search is initiated from the root
node.

show more ...


# d40bfeca 20-Jan-2009 Matthew Dillon <dillon@apollo.backplane.com>

HAMMER: adjustments to flush on umount

Instead of waiting for up to 25 hammer sync sequences before giving up,
instead wait up to 25 seconds before giving up.

Reported-by: Thomas Nikolajsen <thomas

HAMMER: adjustments to flush on umount

Instead of waiting for up to 25 hammer sync sequences before giving up,
instead wait up to 25 seconds before giving up.

Reported-by: Thomas Nikolajsen <thomas.nikolajsen@mail.dk>

show more ...


# 82010f9f 28-Dec-2008 Matthew Dillon <dillon@apollo.backplane.com>

HAMMER performance and kernel memory issues.

* The flusher could stall-out due to deadlocks under certain heavy load
situations (blogbench -i1000 -o), causing the number of hammer inodes
to incr

HAMMER performance and kernel memory issues.

* The flusher could stall-out due to deadlocks under certain heavy load
situations (blogbench -i1000 -o), causing the number of hammer inodes
to increase slowly until the kernel runs out of memory.

Fix this by detecting the condition and stalling the threads
causing the deadlocks instead for a short while. Any user thread
which blocked performing B-Tree node I/O is a candidate.

* Improve the stability of the inode reclaim heuristic which slows
down the creation of new inodes when too many disconnected hammer
inodes are present.

* Remove vfs.hammer.limit_iqueued - this sysctl is no longer used.

Reported-by: YONETANI Tomokazu <qhwt+dfly@les.ath.cx>

show more ...


# bac808fe 10-Dec-2008 Matthew Dillon <dillon@apollo.backplane.com>

Use per-mount kmalloc pools for bulk data structures, particularly inodes
and records.


# 5e435c92 03-Dec-2008 Matthew Dillon <dillon@apollo.backplane.com>

HAMMER Filesystem changes:

* Add version checking to the hammer mount code.

* Add ioctls to fetch the hammer filesystem version and to upgrade it,
to support future filesystem revisions.

* Rewri

HAMMER Filesystem changes:

* Add version checking to the hammer mount code.

* Add ioctls to fetch the hammer filesystem version and to upgrade it,
to support future filesystem revisions.

* Rewrite the algorithm used to integrate reservations with the blockmap
allocate/free code to fix a bug. hammer_buffers were sometimes not
being properly destroyed causing conflicts with later reallocations.

* Add support for up to four directory hash algorithms. Add flexibility
to the namekey iterator API to allow the algorithm to control the
iteration space.

* When iterating memory with the CURSOR_DELETE_VISIBILITY flag set, ignore
the record deleted flags.

HAMMER Utilities changes:

* Add two new hammer directives, 'version' and 'version-upgrade'.

* Change hammer namekey directive to 'namekey1' and 'namekey2', to support
generating directory hashes for different hashing algorithms.

* Change hammer cleanup to still prune for existing snapshots even if
new snapshot generation is disabled.

* Change hammer cleanup's default snapshots config for temporary
filesystems from 'snapshots 0d 60d' to 'snapshots 0d 0d'.

Reported-by: "Justin C. Sherrill" <justin@shiningsilence.com> (blockmap bug)

show more ...


# 44a83111 13-Nov-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER:

* Add version management ioctls to allow continued work on the filesystem
without interfering with production systems.

* Refuse to mount an unsupported version.


# ab0bf4a3 22-Oct-2008 Matthew Dillon <dillon@dragonflybsd.org>

Raise the kmalloc limit for the M_HAMMER_INO pool based on desiredvnodes
to try to avoid kernel memory exhaustion panics.

Reported-by: Matthias Schmidt <matthias@dragonflybsd.org>, and others.


# 21fde338 23-Sep-2008 Matthew Dillon <dillon@dragonflybsd.org>

Change the autoflush code to autoflush when a flush group reaches a
certain point rather then trying to do it from the reclaim code. This
smooths out the flush sequences. The default is 2000, adjus

Change the autoflush code to autoflush when a flush group reaches a
certain point rather then trying to do it from the reclaim code. This
smooths out the flush sequences. The default is 2000, adjustable via
the vfs.hammer.autoflush sysctl.

Move hammer_inode_waitreclaims() calls. In particular, remove the calls
in the VOP_CLOSE() path. The problem with waiting for excessive reclaims to
drop in these paths is that the inode/vnode operation in question is probably
cached. Thus unrelated programs, even those just opening /dev/null (if /dev
is on a HAMMER filesystem), can wind up blocking in hmrrcm for no good reason.

Instead defer the hammer_inode_waitreclaims() call to the end of the
transaction code if a new inode had to be created during the transaction.
Thus we tend to block on operations that did not have previously cached
vnodes to work with instead of operations on cached vnodes.

Reported-by: Hasso Tepper <hasso@estpak.ee>

show more ...


# 67863d04 17-Sep-2008 Matthew Dillon <dillon@dragonflybsd.org>

* Implement the ability to export NULLFS mounts via NFS.

* Enforce PFS isolation when exporting a HAMMER PFS via a NULLFS mount.

NOTE: Exporting anything other then HAMMER PFS root's via nullfs doe

* Implement the ability to export NULLFS mounts via NFS.

* Enforce PFS isolation when exporting a HAMMER PFS via a NULLFS mount.

NOTE: Exporting anything other then HAMMER PFS root's via nullfs does
NOT protect the parent of the exported directory from being accessed via NFS.

Generally speaking this feature is implemented by giving each nullfs mount
a synthesized fsid based on what is being mounted and implementing the
NFS export infrastructure in the nullfs code instead of just bypassing those
functions to the underyling VFS.

show more ...


# 4889cbd4 31-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER: Mirroring, misc bug fixes

* Adjust hammer_flusher_async() to queue an extra flush if called twice
in quick succession. This fixes the 'sync' command to properly sync
the entire filesyte

HAMMER: Mirroring, misc bug fixes

* Adjust hammer_flusher_async() to queue an extra flush if called twice
in quick succession. This fixes the 'sync' command to properly sync
the entire filesytem. Previously two syncs were needed.

* Fix a bug where a user application could get stuck due to HAMMER
losing track of an inode flush.

* Mirroring masters now use the most recent fully committed transaction
id instead of the last flushed (but still subject to rollback) tid.

This fixes an issue where a mirror could pass information still subject
to crash recovery rollback to the slave. Now only fully committed
information is passed to the slave.

* Fix a transitory bug where the mirroring code would sometimes not
sync the correct delete state to the slave. The slave would always
be corrected in the next pass, however. Now the slave is correct
at all times.

* Fix a bug in hammer_mirror_write() where a delete-to operation could
livelock.

* Add a new HAMMER ioctl which waits for the committed data transaction
id to change. This will be used by the mirroring code to implement
continuous streaming operation.

Reported-by: Francois Tigeot <ftigeot@wolfpond.org>,
Michael Neumann <mneumann@crater.dragonflybsd.org>
(the user application freeze bug)

show more ...


# 9b45155d 27-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER - fix kmalloc exhaustion w/ 3G ram

* Give the hammer_inode structure its own kmalloc pool.


# 7c19b529 27-Jul-2008 Michael Neumann <mneumann@dragonflybsd.org>

Implement mounting of a Hammer filesystem as a root filesystem.

To mount a Hammer filesystem as root filesystem (e.g. /dev/ad0s1d),
you have to specify the following in /boot/loader.conf:

vfs.r

Implement mounting of a Hammer filesystem as a root filesystem.

To mount a Hammer filesystem as root filesystem (e.g. /dev/ad0s1d),
you have to specify the following in /boot/loader.conf:

vfs.root.mountfrom="hammer:ad0s1d"

show more ...


# 00f16fad 26-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER commit

* Discard recovered buffers when unmounting a read-only HAMMER mount.

* Discard recovered buffers when an attempted HAMMER mount fails.

* Clean up a transaction that was left open wh

HAMMER commit

* Discard recovered buffers when unmounting a read-only HAMMER mount.

* Discard recovered buffers when an attempted HAMMER mount fails.

* Clean up a transaction that was left open when a HAMMER mount fails to
locate the root inode.

* Check that an undo record is at least minimally sized so corruption
does not result in an infinite loop.

Reported-by: Dionysus Blazakis <dion.blazakis@gmail.com>,
Gergo Szakal <bastyaelvtars@gmail.com>

show more ...


# 732a1697 19-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 65/Many: PFS cleanups and confusion removal

* Simplify master/slave operation. Remove the master=, slave, and no-mirror
options from pfs-update. Retain pfs-master, pfs-slave, pfs-upgrade,

HAMMER 65/Many: PFS cleanups and confusion removal

* Simplify master/slave operation. Remove the master=, slave, and no-mirror
options from pfs-update. Retain pfs-master, pfs-slave, pfs-upgrade, and
pfs-downgrade for dealing with master and slave operation.

Move the master= and nomirror specifications back to hammer_mount. They
have to be mount-wide anyhow, the current code does not support different
master ID's on a PFS-by-PFS basis.

* Add some additional failsafes to the mount code. The master id cannot
be allowed to change by a mount update (-u).

* Fix a bug in hammer pfs-upgrade operation that could result in a livelock
during the B-Tree iteration.

show more ...


# cdb6e4e6 18-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 63/Many: IO Error handling features

This commit removes all the remaining Debugger() calls and KKASSERTs in the
I/O error path. Errors are now propagated up the call tree and properly
report

HAMMER 63/Many: IO Error handling features

This commit removes all the remaining Debugger() calls and KKASSERTs in the
I/O error path. Errors are now propagated up the call tree and properly
reported.

* Report I/O errors instead of asserting.

* Read or Write errors in the flush path disable flushing and force the mount
into read-only mode. Modified buffers are left locked in memory until
umount to provide a consistent snapshot of the state of the filesystem.

You must umount and remount to recover the filesystem. The filesystem
will automatically rollback to the last valid flush upon remounting.

* umount and umount -f are now able to unmount a HAMMER filesystem that has
catastrophic write errors (e.g. pulling the USB cable on an external
drive).

show more ...


# ce0138a6 14-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 61E/Many: Features

* Implement hammer iostats.


# 1b0ab2c3 14-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 61F/Many: Stabilization w/ simultanious pruning and reblocking

* BUG FIX: When doing direct-read check to see if any device buffers
are aliasing the disk block and flush any we find which a

HAMMER 61F/Many: Stabilization w/ simultanious pruning and reblocking

* BUG FIX: When doing direct-read check to see if any device buffers
are aliasing the disk block and flush any we find which are dirty.
This ensures that reblocked data gets to disk before a direct-read
tries to read them FROM the disk.

* BUG FIX: Fix a bug introduced in a recent commit where the flusher
wlll not always completely flush the UNDO FIFO or completely flush
all meta-data, resulting in a rollback after a normal umount/mount.

* BUG FIX: Direct-writes queue I/O independant of the in-memory record.
When the backend flusher flushes the record, making it available in the
B-Tree, make sure that the indepent I/O has completed. Otherwise
a later reblocking operation might read the media before the direct-write
has actually completed.

* BUG FIX: In-memory records are not subject direct-IO, since their data
is not yet on the media.

* BUG FIX: Do not allow mount to succeed unless all volumes have been found.
(Reported-by: Sascha Wildner <saw@online.de>)

* BUG FIX: The bd_heatup() call in the reblocker was in the wrong place,
potentially causing the cursor to shift unexpectedly.

* Reorient some of the buffer invalidation code by enhancing
the reservation code.

* Add read CRC verification logic for some direct-reads, but comment it out
because the VM system's bogus-page replacement breaks it.

show more ...


# 7a61b85d 12-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 61E/Many: Stabilization, Performance

* The UNDO FIFO could get over-full, causing an assertion. This was because
certain load tests could cuase directories to end up with tens of
thousan

HAMMER 61E/Many: Stabilization, Performance

* The UNDO FIFO could get over-full, causing an assertion. This was because
certain load tests could cuase directories to end up with tens of
thousands of directory entries and all of them were being flushed in
a single flush group.

Rewrite the flush group infrastructure to fix the issue. Instead of
having a two-stage flush we now have flush compartmentalization with
the new hammer_flush_group structure. Flushes can thus be broken down
into transactions that don't blow out the UNDO FIFO.

* Improve flush performance by quite a bit. The new infrastructure
generates fewer B-Tree conflicts and appears to flush the work more
smoothly, probably owing to the fact that the upper size of each
flush group is now bounded.

show more ...


# 6c1f89f4 10-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 61A/Many: Stabilization

* Fix a buffer exhaustion issue. When creating large numbers of empty files
a single inode sync of the directory can exhaust the buffer cache because
not enough o

HAMMER 61A/Many: Stabilization

* Fix a buffer exhaustion issue. When creating large numbers of empty files
a single inode sync of the directory can exhaust the buffer cache because
not enough other things get dirty enough to force a flush.

Put a check in the record syncing code and do a partial finalization if
necessary to avoid deadlocking the buffer cache.

* Fix a panic caused by a missing call to hammer_cursor_deleted_element().

Reported-by: Michael Neumann <mneumann@ntecs.de>,
Gergo Szakal <bastyaelvtars@gmail.com>

show more ...


# adf01747 07-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 60E/Many: Mirroring, bug fixes

* Work on the mirror_tid propagation code. The code now retries on
EDEADLK so propagation is guaranteed to reach the root.

* Get most of the mirror_write co

HAMMER 60E/Many: Mirroring, bug fixes

* Work on the mirror_tid propagation code. The code now retries on
EDEADLK so propagation is guaranteed to reach the root.

* Get most of the mirror_write code working.

* Add PFS support for NFS exports. Change fid_reserved to fid_ext and use
it to store the localization parameter that selects the PFS. This isn't
well tested yet.

* BUGFIX: Fix a bug in vol0_last_tid updates. Flush sequences might
not always update the field, creating issues with mirroring and snapshots.

* BUGFIX: Properly update the volume header CRC.

* CLEANUP: Fix some obj_id's that were u_int64_t's. They should be int64_t's.

* CLEANUP: #if 0 out unused code, remove other bits of unused code.

show more ...


# a7e9bef1 03-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 60B/many: Stabilization

* Redo the estimated space usage calculation, it was horribly broken.
There may still be issues with read+write memory maps.

* Fix a bug in the reblocker that allow

HAMMER 60B/many: Stabilization

* Redo the estimated space usage calculation, it was horribly broken.
There may still be issues with read+write memory maps.

* Fix a bug in the reblocker that allowed it to exhaust all available
space on the media. While the reblocker eventually compacts the media
it can actually require additional disk space while running.

Note that file deletions in normal history retention mode do not recover
any space unless followed by pruning, and may even require additional space.
If worse comes to worse a full filesystem might have to be remounted in
nohistory mode to recover space.

Reported-by: Gergo Szakal <bastyaelvtars@gmail.com>

show more ...


# 5fa5c92f 02-Jul-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 60A/many: Mirroring work

* Add a pseudo-fs structure for tracking pseudo-fs configurations.

* Add pseudo-fs status and configuration ioctls

* Fix a b-tree node deletion race that could resu

HAMMER 60A/many: Mirroring work

* Add a pseudo-fs structure for tracking pseudo-fs configurations.

* Add pseudo-fs status and configuration ioctls

* Fix a b-tree node deletion race that could result in an
assertion (reported by Rumko <rumcic@gmail.com>)

show more ...


# 3098dc2f 30-Jun-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 59F/Many: Stabilization pass

* Use kmalloc_limit() to calculate a better record limit. This fixes an
issue on machines with limited system memory where HAMMER could blow
out its kmalloc

HAMMER 59F/Many: Stabilization pass

* Use kmalloc_limit() to calculate a better record limit. This fixes an
issue on machines with limited system memory where HAMMER could blow
out its kmalloc pool by allocating too many records.

show more ...


# f5a07a7a 28-Jun-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 59D/Many: Sync with buffer cache changes in HEAD.

* Adjust hammer to limit dirty meta-data buffers based on total bytes
rather then total buffers.

* Limit to 1/4 the buffer cache limit (fo

HAMMER 59D/Many: Sync with buffer cache changes in HEAD.

* Adjust hammer to limit dirty meta-data buffers based on total bytes
rather then total buffers.

* Limit to 1/4 the buffer cache limit (for now)... a better solution
is needed.

show more ...


# 06ad81ff 27-Jun-2008 Matthew Dillon <dillon@dragonflybsd.org>

HAMMER 59B/Many: Stabilization pass - fixes for large file issues

* The flusher was trying to flush whole inodes in one pass. If a large
(in the 100GB range) file is deleted or truncated this sin

HAMMER 59B/Many: Stabilization pass - fixes for large file issues

* The flusher was trying to flush whole inodes in one pass. If a large
(in the 100GB range) file is deleted or truncated this single pass could
blow out the UNDO FIFO and cause a panic.

Detect the case and only do a partial flush, then requeue the inode to
the next flush group and reflush. This continues until the file is
completely eradicated or the truncation has completed.

* In addition, the same flusher issue could exhaust the kernel's buffer
cache with unflushable dirty buffers. The same fix applies.

* The UNDO FIFO code was calculating available space based on the next
flush's start position instead of the last flush's start position,
allowing areas of the UNDO FIFO still subject to a recovery pass
(if a crash were to occur right then) to be overwritten too soon.

* The pruner and reblocker were doing insufficient UNDO FIFO space checks
and could blow out the UNDO FIFO. Fixed.

show more ...


12345678