Yiannis Pericleous [Tue, 22 May 2007 20:14:45 +0000 (16:14 -0400)]
added odf/sr to odf structure, that will contain odf silly renamed files
Yiannis Pericleous [Tue, 22 May 2007 20:08:01 +0000 (16:08 -0400)]
rename bug:
if the dst dentry exists at the start of the rename, then at the end
we need to purge its inode's lower inode pointers if it is not used
by anyone else, since it might remain in the cache and the odf might
give this inode number to a new inode, resulting in the new inode
having the old inode's pointers.
Yiannis Pericleous [Tue, 22 May 2007 19:27:52 +0000 (15:27 -0400)]
rename bug: return EXDEV when destinations parent is opaque at a branch to the left of
source's start branch
Yiannis Pericleous [Tue, 22 May 2007 16:33:10 +0000 (12:33 -0400)]
link and rename invariants when new_dentry is negative and link/rename happens on
a branch other than leftmost
Yiannis Pericleous [Sun, 20 May 2007 22:59:13 +0000 (18:59 -0400)]
smaller odf cached dir dirents, and also rearranged dirent contents
to more closely resemble the ext2 dirent structure
Yiannis Pericleous [Sun, 20 May 2007 22:43:18 +0000 (18:43 -0400)]
looukup bug: moved check if nameidata is null before check for odf whiteout
Yiannis Pericleous [Sun, 20 May 2007 20:59:15 +0000 (16:59 -0400)]
readdir bug, set fpos back to previous dirent if buffer overflows
Yiannis Pericleous [Sun, 20 May 2007 19:29:37 +0000 (15:29 -0400)]
fixed opaque dirs invariancy issue
Yiannis Pericleous [Sun, 20 May 2007 19:25:19 +0000 (15:25 -0400)]
removed unneeded inodeinfo that got left over from last cherry-pick
Yiannis Pericleous [Sun, 20 May 2007 18:54:57 +0000 (14:54 -0400)]
mmap: file revalidation and fanout invariant validation
Added the newer checks to file revalidation and fanout invariants to the
newly merged mmap code. Also minor mmap related comments added.
Conflicts:
fs/unionfs/commonfops.c
fs/unionfs/file.c
Yiannis Pericleous [Sun, 20 May 2007 18:49:22 +0000 (14:49 -0400)]
applied ezk changes to d_splice fix so both branches are synced
Yiannis Pericleous [Sun, 20 May 2007 18:44:45 +0000 (14:44 -0400)]
rename invariant issues fix
Erez_Zadok [Sun, 20 May 2007 03:57:46 +0000 (23:57 -0400)]
documentaion: say in odf.txt where file came from
Yiannis Pericleous [Sat, 19 May 2007 22:35:21 +0000 (18:35 -0400)]
debug: left out a line from the previous fix
Yiannis Pericleous [Sat, 19 May 2007 22:30:03 +0000 (18:30 -0400)]
debug: remove unnecessarily verbose debugging printk's
Yiannis Pericleous [Sat, 19 May 2007 22:27:47 +0000 (18:27 -0400)]
cleanup: consistent printk messages
Yiannis Pericleous [Sat, 19 May 2007 22:25:39 +0000 (18:25 -0400)]
bugfix: check if dentry is returned by lookup_backend
Yiannis Pericleous [Sat, 19 May 2007 21:15:54 +0000 (17:15 -0400)]
fixed some minor issues after applying erez's patches
Yiannis Pericleous [Sat, 19 May 2007 21:04:49 +0000 (17:04 -0400)]
whitespace cleanup
Yiannis Pericleous [Sat, 19 May 2007 21:03:20 +0000 (17:03 -0400)]
cleanup: eliminate wrapper function create_parents
Eliminate simple wrapper function create_parents which trivially called
create_parents_named with one more arg derived from the caller. Instead,
remove the wrapper, rename create_parents_named to create_parents, and make
everyone call create_parents directly. This clarifies the code a bit more
and saves a bit on stack space.
Conflicts:
fs/unionfs/inode.c
fs/unionfs/subr.c
Yiannis Pericleous [Sat, 19 May 2007 20:52:03 +0000 (16:52 -0400)]
cleanup: eliminate wrapper function copyup_dentry
Eliminate simple wrapper function copyup_dentry which trivially called
copyup_named_dentry with 2 more args derived from the caller. Instead,
remove the wrapper, rename copyup_named_dentry to copyup_dentry, and make
everyone call copyup_dentry directly. This clarifies the code a bit more
and saves a bit on stack space.
Conflicts:
fs/unionfs/inode.c
fs/unionfs/rename.c
Erez Zadok [Fri, 18 May 2007 07:07:37 +0000 (03:07 -0400)]
cleanup: rewrite do_delayed_copyup more cleanly and clearly
Erez Zadok [Fri, 18 May 2007 06:18:44 +0000 (02:18 -0400)]
debugging: small fix to Makefile to correct #define typo
Erez Zadok [Fri, 18 May 2007 05:56:08 +0000 (01:56 -0400)]
cleanup: remove unnecessary macro used in only one place
Remove the UNIONFS_TMPNAM_LEN macro and just use the actual length of the
string file name in question, which is more efficient (and correct).
Erez Zadok [Fri, 18 May 2007 05:53:12 +0000 (01:53 -0400)]
bug fix: don't revalidate dropped dentries
This fixes a harmless but annoying message that unionfs prints if a dropped
dentry is being revalidated, which could happen if you unlink open files.
Erez Zadok [Fri, 18 May 2007 05:45:18 +0000 (01:45 -0400)]
bug fix: retry lookup for different silly-renamed files
When we have to copyup an open-but-unlinked file, we have to give it a
temporary name, similar to NFS's silly-renamed files. So we generate
temporary file names until we find one that doesn't exist, and use it. The
code had a bug where if the silly-renamed file name already existed, Unionfs
would oops upon copyup to that temp name.
Erez Zadok [Fri, 18 May 2007 05:41:04 +0000 (01:41 -0400)]
Documentation: better comments for copyup-related code
Yiannis Pericleous [Sat, 19 May 2007 20:41:10 +0000 (16:41 -0400)]
Verify and maintain fanout invariants.
This somewhat long patch calls various invariant-checking (debugging)
functions in all places where the fanout invariants should hold. The three
invariant-checking functions, __unionfs_check_{inode,dentry,file}, perform
exhaustive sanity checking on the fan-out of various Unionfs objects. We
check that no lower objects exist outside the start/end branch range; that
all objects within are non-NULL (with some allowed exceptions); that for
every lower file there's a lower dentry+inode; that the start/end ranges
match for all corresponding lower objects; that open files/symlinks have
only one lower objects, but directories can have several; and more.
The rest of this patch actually fixes many places where these invariants did
not hold, which could lead to bugs or corruptions under heavy loads,
multi-threaded workloads, dynamic branch-management, and mmap operations.
Most of the bugs related to actions involving copyups and whiteouts. With
these fixes, the entire Unionfs regression suite passes without a single
invariant violated.
Conflicts:
fs/unionfs/commonfops.c
fs/unionfs/file.c
fs/unionfs/inode.c
fs/unionfs/unlink.c
Erez Zadok [Fri, 18 May 2007 05:31:14 +0000 (01:31 -0400)]
Post-copyup helper functions
Two functions which are very useful to execute common actions needed after a
copy-up had taken place.
Yiannis Pericleous [Sat, 19 May 2007 20:27:25 +0000 (16:27 -0400)]
Introduce compile-time debugging support to Unionfs
Similar to other file systems, to turn on debugging, one is asked to change
the Makefile slightly. The vast majority of the debugging utility functions
are in debug.c. They are useful for developers and users to report to
developers. The main code has some very useful hooks left behind that are
non-intrusive and cleaner (i.e., no "ifdef DEBUG" clutter).
Conflicts:
fs/unionfs/union.h
Yiannis Pericleous [Sat, 19 May 2007 20:16:11 +0000 (16:16 -0400)]
fixed some rebase conflicts
Yiannis Pericleous [Sat, 19 May 2007 19:23:22 +0000 (15:23 -0400)]
mmap: sync_page bug, call sync_page on lower page, not unionfs page
Yiannis Pericleous [Sat, 19 May 2007 17:10:00 +0000 (13:10 -0400)]
correct readdir implementation: keep calling filldir until it overflows
Yiannis Pericleous [Fri, 18 May 2007 15:57:26 +0000 (11:57 -0400)]
unionfs_readdir to ingore EINVAL error from filldir so that nfs_readdir does not fail
Yiannis Pericleous [Fri, 18 May 2007 15:54:01 +0000 (11:54 -0400)]
export: dget root when parent in get_parent is root
Yiannis Pericleous [Tue, 15 May 2007 22:33:32 +0000 (18:33 -0400)]
export: get_parent now can handle disconnected dentries returned from odf's get_parent
In such cases, get_parent is called on the odf until we get to the odf_root
Yiannis Pericleous [Tue, 15 May 2007 01:28:00 +0000 (21:28 -0400)]
export: fixed some reference leaks
Yiannis Pericleous [Mon, 14 May 2007 23:22:46 +0000 (19:22 -0400)]
bugfix: fixed interpose to check if d_splice_alias returns a dentry
and make sure this new dentry's pd is corrent.
unionfs_interpose now returns a dentry if d_splice_alias has returned
a dentry
Yiannis Pericleous [Sun, 13 May 2007 02:05:33 +0000 (22:05 -0400)]
store unionfs inum in cached dir, not lower inum
Yiannis Pericleous [Sun, 13 May 2007 02:03:31 +0000 (22:03 -0400)]
export: get_name export op
Yiannis Pericleous [Sat, 12 May 2007 00:42:14 +0000 (20:42 -0400)]
export: get_parent: build the route to the parent using the parent from odf
Yiannis Pericleous [Fri, 11 May 2007 23:46:40 +0000 (19:46 -0400)]
moved dentry_stack declarations in union.h so it can be used by get_parent
Yiannis Pericleous [Fri, 11 May 2007 21:31:23 +0000 (17:31 -0400)]
export: export ops get_parent, get the parent inode from odf fs's get_parent
Yiannis Pericleous [Fri, 11 May 2007 19:39:22 +0000 (15:39 -0400)]
export: added export.o in Makefile, and include correct .h in export.c
Erez_Zadok [Fri, 11 May 2007 06:20:44 +0000 (02:20 -0400)]
bugfix: release read lock in file_revalidate properly if error
Erez_Zadok [Fri, 11 May 2007 06:19:40 +0000 (02:19 -0400)]
mmap: also revalidate file passed to unionfs_release
Conflicts:
fs/unionfs/commonfops.c
Erez_Zadok [Fri, 11 May 2007 05:55:19 +0000 (01:55 -0400)]
bugfixes: correctly decrement refcounts of mnt's upon branch management
The old logic was broken in one place, which another place tried to "fix"
incorrectly. Also added detailed comments to explain the new/correct logic.
Erez_Zadok [Fri, 11 May 2007 05:51:48 +0000 (01:51 -0400)]
bugfix in BUG_ON use: actually catch bad use of unionfs_mntput
Yiannis Pericleous [Fri, 11 May 2007 00:14:24 +0000 (20:14 -0400)]
export: added empty export.c using default export operations
Yiannis Pericleous [Fri, 11 May 2007 00:05:59 +0000 (20:05 -0400)]
readdir: set file pos to max possible value on EOF, so
that its bigger than both the union dir file and the odf
cached dirent file
Yiannis Pericleous [Sun, 6 May 2007 17:02:51 +0000 (13:02 -0400)]
bugfix: was setting uid to oldgid and gid to olduid
Erez_Zadok [Sun, 6 May 2007 00:41:46 +0000 (20:41 -0400)]
mmap: update atime upon successful file reading (via mmap or otherwise)
Erez_Zadok [Sat, 5 May 2007 23:27:33 +0000 (19:27 -0400)]
mmap: proper locking to interoperate with branch-management code
Include proper read un/lock calls as in file.c. Make unionfs_do_readpage
static as no one else should call this helper function.
Erez_Zadok [Sat, 5 May 2007 23:15:28 +0000 (19:15 -0400)]
mmap: remove unnecessary unionfs_bmap method
Unionfs is not a block-based file system, so it should not define ->bmap.
Erez_Zadok [Sat, 5 May 2007 23:10:00 +0000 (19:10 -0400)]
mmap: trivial sendfile support
Yiannis Pericleous [Sat, 5 May 2007 21:47:51 +0000 (17:47 -0400)]
small rename bug fix
Erez_Zadok [Sat, 5 May 2007 20:22:57 +0000 (16:22 -0400)]
mmap: minor code and comment reformatting
Yiannis Pericleous [Sat, 5 May 2007 20:33:52 +0000 (16:33 -0400)]
permission related bugfixes
Yiannis Pericleous [Sat, 5 May 2007 20:03:50 +0000 (16:03 -0400)]
bugfix: ignore notify_change error when updating mtime in unlink and rmvdir
Erez_Zadok [Fri, 4 May 2007 18:49:33 +0000 (14:49 -0400)]
bugfix: remove defunct unionfs_put_inode method
Removed old workaround code that was needed to get mmap working, is no
longer needed with recent kernels.
Erez_Zadok [Fri, 4 May 2007 18:44:10 +0000 (14:44 -0400)]
optimize branch overlapping test a bit
Yiannis Pericleous [Fri, 4 May 2007 02:20:59 +0000 (22:20 -0400)]
cleanup: removed some unneeded rdstate code
Yiannis Pericleous [Fri, 4 May 2007 01:42:11 +0000 (21:42 -0400)]
bugfix: removed unionfs_put_inode which does not apply anymore (must have been
done for very old kernels) and causes dirty pages not to be written on umounts
Yiannis Pericleous [Tue, 1 May 2007 23:11:53 +0000 (19:11 -0400)]
mmap: #if 0 unneeded code instead of commenting it out
Yiannis Pericleous [Tue, 1 May 2007 19:18:39 +0000 (15:18 -0400)]
mmap: read upper file instead of lower file
dont touch atimes on reads
Erez_Zadok [Mon, 30 Apr 2007 21:33:07 +0000 (17:33 -0400)]
Documentation update regarding overlapping branches and new lookup code.
Added detailed comment and updated documentation (issues.txt) to explain why
overlapping branches are disallowed, better explain cache coherency issues,
and mention upcoming do_lookup_lookup changes.
Yiannis Pericleous [Mon, 30 Apr 2007 21:29:23 +0000 (17:29 -0400)]
readded odf_reclaim
Erez_Zadok [Mon, 30 Apr 2007 20:53:50 +0000 (16:53 -0400)]
fsstack: 4th case to do_path_lookup
Signed-off-by: Josef 'Jeff' Sipek <jsipek@cs.sunysb.edu>
Erez_Zadok [Mon, 30 Apr 2007 20:48:20 +0000 (16:48 -0400)]
branch management: disallow setting leftmost branch to readonly
Unionfs requires the leftmost branch to be writeable for copyup to work
properly and simply. If, through branch-management commands (add, delete,
or mode change), the leftmost branch will becomes readonly, then return an
error (and tell the user to use "remount,ro" if they want a readonly union).
Yiannis Pericleous [Mon, 30 Apr 2007 17:53:17 +0000 (13:53 -0400)]
more duplicate code
Yiannis Pericleous [Mon, 30 Apr 2007 01:30:48 +0000 (21:30 -0400)]
removed duplicate/uneeded defines as result of rebasing
Yiannis Pericleous [Mon, 30 Apr 2007 01:23:51 +0000 (21:23 -0400)]
removed leftover trailing whitespace and uneeded comments as a result of rebasing with master
Yiannis Pericleous [Sun, 29 Apr 2007 02:06:46 +0000 (22:06 -0400)]
cleanup: removed a trailing whitespace
Yiannis Pericleous [Sun, 29 Apr 2007 02:04:54 +0000 (22:04 -0400)]
mmap: coding style: reformated a line longer than 80 chars
Erez_Zadok [Sun, 29 Apr 2007 01:04:05 +0000 (21:04 -0400)]
mmap: remove defunct comments
Yiannis Pericleous [Fri, 27 Apr 2007 22:13:29 +0000 (18:13 -0400)]
mmap: file revalidation
Yiannis Pericleous [Fri, 27 Apr 2007 20:08:10 +0000 (16:08 -0400)]
odf bug: dget odf/sb when reading/writting sb file
Yiannis Pericleous [Thu, 26 Apr 2007 20:11:37 +0000 (16:11 -0400)]
applied mmap patch
Yiannis Pericleous [Tue, 24 Apr 2007 19:31:16 +0000 (15:31 -0400)]
removed c++ style comments
Yiannis Pericleous [Tue, 24 Apr 2007 19:09:13 +0000 (15:09 -0400)]
removed duplicate BUG_ON's
Yiannis Pericleous [Mon, 23 Apr 2007 18:31:20 +0000 (14:31 -0400)]
removed unneeded #defines
Yiannis Pericleous [Mon, 23 Apr 2007 18:27:07 +0000 (14:27 -0400)]
cleanup trailing whitespace
Erez_Zadok [Thu, 19 Apr 2007 22:40:36 +0000 (18:40 -0400)]
bugfix: don't leak resources when copyup fails partially
Erez_Zadok [Wed, 18 Apr 2007 06:08:14 +0000 (02:08 -0400)]
cleanup: call our unionfs_{unlock,lock}_dentry instead of mutex ops.
This is for consistency with the rest of the code, which helps us place
debugging code when un/locking our special "info" mutex in our dentries.
Yiannis Pericleous [Sat, 21 Apr 2007 16:06:11 +0000 (12:06 -0400)]
cleanup: rename our "do_rename" to __unionfs_rename.
To avoid confusion with the VFS-named function do_rename, and to help ctags,
rename our utility (static) function "do_rename" to "__unionfs_rename".
Conflicts:
fs/unionfs/rename.c
Erez Zadok [Sun, 15 Apr 2007 21:37:40 +0000 (17:37 -0400)]
cleanup: rename prefix our version of double_lock_dentry with "unionfs_"
To avoid potential confusion with the VFS function of the same name (and
also confusion with ctags), rename our special version of double_lock_dentry
to unionfs_double_lock_dentry.
Erez_Zadok [Fri, 13 Apr 2007 22:33:41 +0000 (18:33 -0400)]
Cleanup: ensure space between every comma-delimited function argument list
Erez_Zadok [Wed, 28 Mar 2007 16:42:37 +0000 (12:42 -0400)]
cleanup: rewrite long while(1) loop more cleanly
Yiannis Pericleous [Sat, 21 Apr 2007 16:02:51 +0000 (12:02 -0400)]
Move one function off of branchman.c and remove source file.
After branch-management support was added, branchman.c became obsolete: it
used to hold the old ioctl-based branch-management commands, but now we do
those commands via remount (in super.c). So move the only remaining small
query-file ioctl from branchman.c to commonfops.c, close to unionfs_ioctl;
and remove any leftover extern's which referred to old code in branchman.c
Conflicts:
fs/unionfs/Makefile
Erez Zadok [Sun, 25 Mar 2007 05:29:41 +0000 (01:29 -0400)]
cleanup: consistent pointer declaration spacing.
Change instances of "foo * var" to "foo *var" for consistency.
Erez Zadok [Sun, 25 Mar 2007 05:24:54 +0000 (01:24 -0400)]
Merge unionfs_write with __unionfs_write.
Merge the two functions because unionfs_write was a small function and the
only one which called the __unionfs_write. This saves on stack space and
clarifies code a bit.
Yiannis Pericleous [Sat, 21 Apr 2007 15:58:59 +0000 (11:58 -0400)]
Commenting the code.
Audited entire code for documentation. Added comments at top of functions
where it felt necessary (i.e., function's name and size don't make it clear
what it may be doing precisely). Reformatted some long comments. Fixed a
few comment typos and spelling errors.
Conflicts:
fs/unionfs/lookup.c
fs/unionfs/rename.c
fs/unionfs/subr.c
Yiannis Pericleous [Sat, 21 Apr 2007 15:57:41 +0000 (11:57 -0400)]
cleanup: prefix external functions with 'extern' properly
Conflicts:
fs/unionfs/sioq.h
fs/unionfs/union.h
Erez_Zadok [Sun, 25 Mar 2007 03:01:13 +0000 (23:01 -0400)]
cleanup: one more trailing whitespace removed.
Yiannis Pericleous [Sat, 21 Apr 2007 15:55:24 +0000 (11:55 -0400)]
cleanup: spell check all strings and comments
Conflicts:
fs/unionfs/inode.c
fs/unionfs/rename.c
Yiannis Pericleous [Sat, 21 Apr 2007 15:54:02 +0000 (11:54 -0400)]
cleanup: use consistent style for multi-line comments
Conflicts:
fs/unionfs/commonfops.c
fs/unionfs/dirfops.c
fs/unionfs/dirhelper.c
fs/unionfs/inode.c
fs/unionfs/lookup.c
fs/unionfs/rename.c
fs/unionfs/subr.c
fs/unionfs/union.h
Yiannis Pericleous [Sat, 21 Apr 2007 15:51:11 +0000 (11:51 -0400)]
cleanup: keep all top-of-function automatic variables clustered together
Conflicts:
fs/unionfs/dirhelper.c
fs/unionfs/lookup.c
Yiannis Pericleous [Sat, 21 Apr 2007 15:48:37 +0000 (11:48 -0400)]
cleanup: remove unnecessary blank lines in short code blocks
Conflicts:
fs/unionfs/inode.c
fs/unionfs/subr.c
fs/unionfs/unlink.c
Erez_Zadok [Sat, 24 Mar 2007 23:21:51 +0000 (19:21 -0400)]
cleanup: add missing copyright notices
Yiannis Pericleous [Sat, 21 Apr 2007 15:46:07 +0000 (11:46 -0400)]
coding-style: reformat lines longer than 80 chars (accounting for TABs)
Conflicts:
fs/unionfs/dirfops.c
fs/unionfs/dirhelper.c
fs/unionfs/inode.c
fs/unionfs/lookup.c
fs/unionfs/rename.c
fs/unionfs/subr.c