Fstrans(9) is currently implemented with rwlocks. Unfortunately we have to take and release the rwlock for every vnode operation even when the file system is not suspending or suspended. Attached is a complete rewrite based on passive serialization and condvars. The fast paths (fstrans_start/fstrans_done on a file system not suspended or suspending and fscow_run) now run without locks or other atomic operations. Suspension and cow handler insertion and removal is done with mutex / condvars. As the API remains unchanged it could be pulled up to NetBSD-6. Will commit by end of week -- comments? -- J. Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig (Germany)
Attachment:
vfs_trans.c
Description: Binary data