linux/fs/ocfs2
Mark Fasheh 97b8f4a9df ocfs2: Fix orphan add in ocfs2_create_inode_in_orphan
ocfs2_create_inode_in_orphan() is used by reflink to create the newly
reflinked inode simultaneously in the orphan dir. This allows us to easily
handle partially-reflinked files during recovery cleanup.

We have a problem though - the orphan dir stringifies inode # to determine
a unique name under which the orphan entry dirent can be created. Since
ocfs2_create_inode_in_orphan() needs the space allocated in the orphan dir
before it can allocate the inode, we currently call into the orphan code:

       /*
        * We give the orphan dir the root blkno to fake an orphan name,
        * and allocate enough space for our insertion.
        */
       status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
                                         osb->root_blkno,
                                         orphan_name, &orphan_insert);

Using osb->root_blkno might work fine on unindexed directories, but the
orphan dir can have an index.  When it has that index, the above code fails
to allocate the proper index entry.  Later, when we try to remove the file
from the orphan dir (using the actual inode #), the reflink operation will
fail.

To fix this, I created a function ocfs2_alloc_orphaned_file() which uses the
newly split out orphan and inode alloc code to figure out what the inode
block number will be (once allocated) and then prepare the orphan dir from
that data.

Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Signed-off-by: Tao Ma <tao.ma@oracle.com>
2010-09-08 14:26:00 +08:00
..
cluster O2net: Disallow o2net accept connection request from itself. 2010-08-07 10:50:33 -07:00
dlm Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2010-08-13 10:43:50 -07:00
dlmfs Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 2010-08-10 11:26:52 -07:00
acl.c Fix the nested PR lock calling issue in ACL 2010-08-07 10:46:46 -07:00
acl.h ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00
alloc.c ocfs2: Fix deadlock when allocating page 2010-09-08 14:25:57 +08:00
alloc.h Merge branch 'discontig-bg' of git://oss.oracle.com/git/tma/linux-2.6 into ocfs2-merge-window 2010-05-18 16:40:42 -07:00
aops.c sort out blockdev_direct_IO variants 2010-08-09 16:47:29 -04:00
aops.h ocfs2: Add CoW support. 2009-09-22 20:09:36 -07:00
blockcheck.c ocfs2: Fix metaecc error messages 2010-09-08 14:25:53 +08:00
blockcheck.h ocfs2: Add statistics for the checksum and ecc operations. 2009-06-03 19:15:36 -07:00
buffer_head_io.c Merge branch 'skip_delete_inode' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2-mark into ocfs2-fixes 2010-04-30 13:37:29 -07:00
buffer_head_io.h ocfs2: Take the inode out of the metadata read/write paths. 2009-09-04 16:07:48 -07:00
dcache.c ocfs2: invalidate dentry if its dentry_lock isn't initialized. 2009-08-27 18:10:54 -07:00
dcache.h ocfs2: Fix deadlock on umount 2009-07-21 15:47:55 -07:00
dir.c Merge branch 'discontig-bg' of git://oss.oracle.com/git/tma/linux-2.6 into ocfs2-merge-window 2010-05-18 16:40:42 -07:00
dir.h ocfs2: Introduce dir free space list 2009-04-03 11:39:16 -07:00
dlmglue.c fs/ocfs2: Remove unnecessary casts of private_data 2010-07-20 17:20:08 +02:00
dlmglue.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
export.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
export.h exportfs: make struct export_operations const 2007-10-22 08:13:21 -07:00
extent_map.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
extent_map.h ocfs2: Return extent flags for xattr value tree. 2009-09-22 20:09:39 -07:00
file.c Ocfs2: Fix a regression bug from mainline commit(6b933c8e6f). 2010-09-08 14:25:57 +08:00
file.h ocfs2: Zero the tail cluster when extending past i_size. 2010-07-08 13:25:35 -07:00
heartbeat.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
heartbeat.h ocfs2: Move o2hb functionality into the stack glue. 2008-04-18 08:56:04 -07:00
inode.c ocfs2: Fix incorrect checksum validation error 2010-09-08 14:25:54 +08:00
inode.h Make ->drop_inode() just return whether inode needs to be dropped 2010-08-09 16:48:35 -04:00
ioctl.c ocfs2: Use compat_ptr in reflink_arguments. 2010-02-02 18:56:37 -08:00
ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
journal.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4 2010-08-07 13:03:53 -07:00
journal.h ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
Kconfig ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00
localalloc.c ocfs2: Limit default local alloc size within bitmap range. 2010-06-15 16:50:43 -07:00
localalloc.h ocfs2: increase the default size of local alloc windows 2010-05-05 18:18:07 -07:00
locks.c [PATCH] Skip check for mandatory locks when unlocking 2010-03-17 12:07:16 -07:00
locks.h ocfs2: POSIX file locks support 2008-10-13 13:57:57 -07:00
Makefile ocfs2: allocation reservations 2010-05-05 18:17:30 -07:00
mmap.c ocfs2: make __ocfs2_page_mkwrite handle file end properly. 2010-09-08 14:25:55 +08:00
mmap.h
namei.c ocfs2: Fix orphan add in ocfs2_create_inode_in_orphan 2010-09-08 14:26:00 +08:00
namei.h ocfs2: Create reflinked file in orphan dir. 2009-09-22 20:09:48 -07:00
ocfs1_fs_compat.h fs/: Spelling fixes 2008-02-03 17:33:42 +02:00
ocfs2_fs.h ocfs2: increase the default size of local alloc windows 2010-05-05 18:18:07 -07:00
ocfs2_ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
ocfs2_lockid.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
ocfs2_lockingver.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
ocfs2.h ocfs2: Add dir_resv_level mount option 2010-05-05 18:18:07 -07:00
quota_global.c ocfs2: Zero the tail cluster when extending past i_size. 2010-07-08 13:25:35 -07:00
quota_local.c ocfs2: Zero the tail cluster when extending past i_size. 2010-07-08 13:25:35 -07:00
quota.h ocfs2: Fix NULL pointer deref when writing local dquot 2010-05-21 19:30:48 +02:00
refcounttree.c ocfs2: Fix deadlock when allocating page 2010-09-08 14:25:57 +08:00
refcounttree.h Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
reservations.c ocfs2: update gfp/slab.h includes 2010-06-28 10:19:19 +10:00
reservations.h ocfs2: make ocfs2_adjust_resv_from_alloc simple. 2010-05-05 18:18:09 -07:00
resize.c ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
resize.h [PATCH 2/2] ocfs2: Implement group add for online resize 2008-01-25 15:04:24 -08:00
slot_map.c ocfs2: Take the inode out of the metadata read/write paths. 2009-09-04 16:07:48 -07:00
slot_map.h ocfs2: De-magic the in-memory slot map. 2008-04-18 08:56:03 -07:00
stack_o2cb.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
stack_user.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
stackglue.c ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
stackglue.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
suballoc.c ocfs2: allow return of new inode block location before allocation of the inode 2010-09-08 14:25:59 +08:00
suballoc.h ocfs2: allow return of new inode block location before allocation of the inode 2010-09-08 14:25:59 +08:00
super.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 2010-08-10 11:26:52 -07:00
super.h ocfs2: Wrap signal blocking in void functions. 2010-05-10 11:50:10 -07:00
symlink.c ocfs2: Fix refcnt leak on ocfs2_fast_follow_link() error path 2010-01-11 15:38:50 -08:00
symlink.h
sysfile.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sysfile.h
uptodate.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
uptodate.h ocfs2: Pass struct ocfs2_caching_info to the journal functions. 2009-09-04 16:07:50 -07:00
ver.c ocfs2: bump version number 2008-01-25 15:05:46 -08:00
ver.h
xattr.c ocfs2: Make xattr reflink work with new local alloc reservation. 2010-07-12 13:57:50 -07:00
xattr.h ocfs: constify xattr_handler 2010-05-21 18:31:20 -04:00