commit eeb47d1234af1a9267836f680a8e114b2e88d0dc Author: Mark Fasheh Date: Wed Jun 6 16:15:24 2007 -0700 ocfs2: Fix invalid assertion during write on 64k pages The write path code intends to bug if a math error (or unhandled case) results in a write outside of the current cluster boundaries. The actual BUG_ON() statements however are incorrect, leading to a crash on kernels with 64k page size. Fix those by checking against the right variables. Also, move the assertions higher up within the functions so that they trip *before* the code starts to mark buffers. Signed-off-by: Mark Fasheh commit 59be7dc97bacc0fd8e22f0be6e2aebb5c9b4ff47 Author: Tiger Yang Date: Mon Jun 4 10:31:08 2007 +0800 ocfs2: Fix masklog breakage Some of the sysfs changes inadvertantly broke the simple runtime debug log filtering employed in ocfs2. Fix this by properly exporting the masklog category filter names. Signed-off-by: Tiger Yang Signed-off-by: Mark Fasheh commit d9b08b9efece1f397143378938e626d0de29e911 Author: Christoph Hellwig Date: Fri May 18 13:12:40 2007 +0200 [PATCH] ocfs2: use generic_segment_checks Signed-off-by: Christoph Hellwig Signed-off-by: Mark Fasheh commit 8fccfc829a66b8b879c6672940523a402a786ce1 Author: Mark Fasheh Date: Wed May 9 17:34:26 2007 -0700 ocfs2: fix inode leak We weren't cleaning up our inode reference on error in ocfs2_reserve_local_alloc_bits(). Add a check for error return and iput() if need be. Move the code to set the alloc context inode info to the end of the function so we don't have any possibility of passing back a bad pointer. Signed-off-by: Mark Fasheh commit 5c3c6bb7709bf2bf4132750124879b3d89183e46 Author: Nate Diller Date: Thu May 10 22:56:01 2007 -0700 [PATCH] ocfs2: use zero_user_page Use zero_user_page() instead of open-coding it. Signed-off-by: Nate Diller Signed-off-by: Andrew Morton Signed-off-by: Mark Fasheh commit 1024c902abdcbd2425aa850d7ef04e013ffb35f0 Author: Mark Fasheh Date: Mon May 14 11:39:40 2007 -0700 ocfs2: unmap_mapping_range() in ocfs2_truncate() We weren't calling this before, but since ocfs2 handles the entire truncate operation, we should. Signed-off-by: Mark Fasheh commit e9dfc0b2bc42761410e8db6c252c6c5889e178b8 Author: Mark Fasheh Date: Mon May 14 11:38:51 2007 -0700 ocfs2: trylock in ocfs2_readpage() Similarly to the page lock / cluster lock inversion in ocfs2_readpage, we can deadlock on ip_alloc_sem. We can down_read_trylock() instead and just return AOP_TRUNCATED_PAGE if the operation fails. Signed-off-by: Mark Fasheh commit a35afb830f8d71ec211531aeb9a621b09a2efb39 Author: Christoph Lameter Date: Wed May 16 22:10:57 2007 -0700 Remove SLAB_CTOR_CONSTRUCTOR SLAB_CTOR_CONSTRUCTOR is always specified. No point in checking it. Signed-off-by: Christoph Lameter Cc: David Howells Cc: Jens Axboe Cc: Steven French Cc: Michael Halcrow Cc: OGAWA Hirofumi Cc: Miklos Szeredi Cc: Steven Whitehouse Cc: Roman Zippel Cc: David Woodhouse Cc: Dave Kleikamp Cc: Trond Myklebust Cc: "J. Bruce Fields" Cc: Anton Altaparmakov Cc: Mark Fasheh Cc: Paul Mackerras Cc: Christoph Hellwig Cc: Jan Kara Cc: David Chinner Cc: "David S. Miller" Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit c4a7f5eb5f6a02dcc3a35e47c37c3d221ebc1cc2 Author: Randy Dunlap Date: Thu May 10 03:15:30 2007 -0700 ocfs2: kobject/kset foobar Fix gcc warning and Oops that it causes: fs/ocfs2/cluster/masklog.c:161: warning: assignment from incompatible pointer type [ 2776.204120] OCFS2 Node Manager 1.3.3 [ 2776.211729] BUG: spinlock bad magic on CPU#0, modprobe/4424 [ 2776.214269] lock: ffff810021c8fe18, .magic: ffffffff, .owner: /6394416, .owner_cpu: 0 [ 2776.217864] [ 2776.217865] Call Trace: [ 2776.219662] [] spin_bug+0x9e/0xe9 [ 2776.221921] [] _raw_spin_lock+0x23/0xf9 [ 2776.224417] [] _spin_lock+0x9/0xb [ 2776.226676] [] kobject_shadow_add+0x98/0x1ac [ 2776.229367] [] kobject_add+0xb/0xd [ 2776.231665] [] kset_add+0xd/0xf [ 2776.233845] [] kset_register+0x23/0x28 [ 2776.236309] [] :ocfs2_nodemanager:mlog_sys_init+0x68/0x6d [ 2776.239518] [] :ocfs2_nodemanager:o2cb_sys_init+0x32/0x4a [ 2776.242726] [] :ocfs2_nodemanager:init_o2nm+0xa6/0xd5 [ 2776.245772] [] sys_init_module+0x1471/0x15d2 [ 2776.248465] [] simple_strtoull+0x0/0xdc [ 2776.250959] [] system_call+0x7e/0x83 Signed-off-by: Randy Dunlap Acked-by: Mark Fasheh Cc: Greg KH Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit e63340ae6b6205fef26b40a75673d1c9c0c8bb90 Author: Randy Dunlap Date: Tue May 8 00:28:08 2007 -0700 header cleaning: don't include smp_lock.h when not used Remove includes of where it is not used/needed. Suggested by Al Viro. Builds cleanly on x86_64, i386, alpha, ia64, powerpc, sparc, sparc64, and arm (all 59 defconfigs). Signed-off-by: Randy Dunlap Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit 50953fe9e00ebbeffa032a565ab2f08312d51a87 Author: Christoph Lameter Date: Sun May 6 14:50:16 2007 -0700 slab allocators: Remove SLAB_DEBUG_INITIAL flag I have never seen a use of SLAB_DEBUG_INITIAL. It is only supported by SLAB. I think its purpose was to have a callback after an object has been freed to verify that the state is the constructor state again? The callback is performed before each freeing of an object. I would think that it is much easier to check the object state manually before the free. That also places the check near the code object manipulation of the object. Also the SLAB_DEBUG_INITIAL callback is only performed if the kernel was compiled with SLAB debugging on. If there would be code in a constructor handling SLAB_DEBUG_INITIAL then it would have to be conditional on SLAB_DEBUG otherwise it would just be dead code. But there is no such code in the kernel. I think SLUB_DEBUG_INITIAL is too problematic to make real use of, difficult to understand and there are easier ways to accomplish the same effect (i.e. add debug code before kfree). There is a related flag SLAB_CTOR_VERIFY that is frequently checked to be clear in fs inode caches. Remove the pointless checks (they would even be pointless without removeal of SLAB_DEBUG_INITIAL) from the fs constructors. This is the last slab flag that SLUB did not support. Remove the check for unimplemented flags from SLUB. Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit 6fe6900e1e5b6fa9e5c59aa5061f244fe3f467e2 Author: Nick Piggin Date: Sun May 6 14:49:04 2007 -0700 mm: make read_cache_page synchronous Ensure pages are uptodate after returning from read_cache_page, which allows us to cut out most of the filesystem-internal PageUptodate calls. I didn't have a great look down the call chains, but this appears to fixes 7 possible use-before uptodate in hfs, 2 in hfsplus, 1 in jfs, a few in ecryptfs, 1 in jffs2, and a possible cleared data overwritten with readpage in block2mtd. All depending on whether the filler is async and/or can return with a !uptodate page. Signed-off-by: Nick Piggin Cc: Hugh Dickins Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds commit fa24aa561a3cf91cf25b5d4066470b08a2d24206 Merge: 6cbf0c7... 9315f13... Author: Linus Torvalds Date: Fri May 4 20:44:54 2007 -0700 Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2 * 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2: ocfs2: Force use of GFP_NOFS in ocfs2_write() ocfs2: fix sparse warnings in fs/ocfs2/cluster ocfs2: fix sparse warnings in fs/ocfs2/dlm ocfs2: fix sparse warnings in fs/ocfs2 [PATCH] Copy i_flags to ocfs2 inode flags on write [PATCH] ocfs2: use __set_current_state() ocfs2: Wrap access of directory allocations with ip_alloc_sem. [PATCH] fs/ocfs2/: make 3 functions static ocfs2: Implement compat_ioctl() commit 823bccfc4002296ba88c3ad0f049e1abd8108d30 Author: Greg Kroah-Hartman Date: Fri Apr 13 13:15:19 2007 -0700 remove "struct subsystem" as it is no longer needed We need to work on cleaning up the relationship between kobjects, ksets and ktypes. The removal of 'struct subsystem' is the first step of this, especially as it is not really needed at all. Thanks to Kay for fixing the bugs in this patch. Signed-off-by: Greg Kroah-Hartman commit 9315f130e11249457f5c3a7f74ee82a7065bd854 Author: Mark Fasheh Date: Tue May 1 17:44:20 2007 -0700 ocfs2: Force use of GFP_NOFS in ocfs2_write() We can otherwise recurse into the file system. Signed-off-by: Mark Fasheh commit 5fdf1e677127cb460c38733b9586b772d657be43 Author: Mark Fasheh Date: Fri Apr 27 16:50:03 2007 -0700 ocfs2: fix sparse warnings in fs/ocfs2/cluster Signed-off-by: Mark Fasheh commit a7d25539fdd43fe962a0654542ba96e889ac62b5 Author: Mark Fasheh Date: Fri Apr 27 16:49:20 2007 -0700 ocfs2: fix sparse warnings in fs/ocfs2/dlm Signed-off-by: Mark Fasheh commit 1ca1a111b1e6be843c9ce5245dcd570312998d94 Author: Mark Fasheh Date: Fri Apr 27 16:01:25 2007 -0700 ocfs2: fix sparse warnings in fs/ocfs2 None of these are actually harmful, but the noise makes looking for real problems difficult. Signed-off-by: Mark Fasheh commit 6e4b0d5692cd27d3c9be893a9f5939a9cafbb09f Author: Jan Kara Date: Fri Apr 27 11:08:01 2007 -0700 [PATCH] Copy i_flags to ocfs2 inode flags on write Propagate flags such as S_APPEND, S_IMMUTABLE, etc. from i_flags into ocfs2-specific ip_attr. Hence, when someone sets these flags via a different interface than ioctl, they are stored correctly. Signed-off-by: Jan Kara Signed-off-by: Mark Fasheh commit 5c2c9d383ef7f7cfc02d6355798b95988de359b4 Author: Milind Arun Choudhary Date: Thu Apr 26 00:29:35 2007 -0700 [PATCH] ocfs2: use __set_current_state() use __set_current_state(TASK_*) instead of current->state = TASK_*, in fs/ocfs2 Signed-off-by: Milind Arun Choudhary Signed-off-by: Andrew Morton Signed-off-by: Mark Fasheh commit ee19a77956cb65c5da54d85a5efefe50b39fa6e5 Author: Joel Becker Date: Wed Mar 28 18:27:07 2007 -0700 ocfs2: Wrap access of directory allocations with ip_alloc_sem. OCFS2_I(inode)->ip_alloc_sem is a read-write semaphore protecting local concurrent access of ocfs2 inodes. However, ocfs2 directories were not taking the semaphore while they accessed or modified the allocation tree. ocfs2_extend_dir() needs to take the semaphore in a write mode when it adds to the allocation. All other directory users get there via ocfs2_bread(), which takes the semaphore in read mode. Signed-off-by: Joel Becker Signed-off-by: Mark Fasheh commit 6cb129f5675c39944e5fe18fd2530a2eb771b754 Author: Adrian Bunk Date: Thu Apr 26 00:29:35 2007 -0700 [PATCH] fs/ocfs2/: make 3 functions static This patch makes the following needlessly global functions static: - aops.c: ocfs2_write_data_page() - dlmglue.c: ocfs2_dump_meta_lvb_info() - file.c: ocfs2_set_inode_size() Signed-off-by: Adrian Bunk Signed-off-by: Andrew Morton Signed-off-by: Mark Fasheh commit 586d232b191b776a1c6d51c10c662b8b3e238fdf Author: Mark Fasheh Date: Fri Mar 9 15:56:28 2007 -0800 ocfs2: Implement compat_ioctl() We need this to support 32 bit system calls on 64 bit kernels. Signed-off-by: Mark Fasheh commit 83418978827324918a8cd25ce5227312de1d4468 Author: Mark Fasheh Date: Mon Apr 23 18:53:12 2007 -0700 ocfs2: Cache extent records The extent map code was ripped out earlier because of an inability to deal with holes. This patch adds back a simpler caching scheme requiring far less code. Our old extent map caching was designed back when meta data block caching in Ocfs2 didn't work very well, resulting in many disk reads. These days our metadata caching is much better, resulting in no un-necessary disk reads. As a result, extent caching doesn't have to be as fancy, nor does it have to cache as many extents. Keeping the last 3 extents seen should be sufficient to give us a small performance boost on some streaming workloads. Signed-off-by: Mark Fasheh commit 7cdfc3a1c3971c9125c317cb8c2525745851798e Author: Mark Fasheh Date: Mon Apr 16 17:28:51 2007 -0700 ocfs2: Remember rw lock level during direct io Cluster locking might have been redone because a direct write won't complete, so this needs to be reflected in the iocb. Signed-off-by: Mark Fasheh commit 8110b073a9135acf0a71bccfc20c0d1023f179c6 Author: Mark Fasheh Date: Thu Mar 22 16:53:23 2007 -0700 ocfs2: Fix up i_blocks calculation to know about holes Older file systems which didn't support holes did a dumb calculation of i_blocks based on i_size. This is no longer accurate, so fix things up to take actual allocation into account. Signed-off-by: Mark Fasheh commit 4f902c37727bbedbc0508a1477874c58ddcc9af8 Author: Mark Fasheh Date: Fri Mar 9 16:26:50 2007 -0800 ocfs2: Fix extent lookup to return true size of holes Initially, we had wired things to return a size '1' of holes. Cook up a small amount of code to find the next extent and calculate the number of clusters between the virtual offset and the next allocated extent. Signed-off-by: Mark Fasheh commit 49cb8d2d496ce06869ccca2ab368ed6b0b5b979d Author: Mark Fasheh Date: Fri Mar 9 16:21:46 2007 -0800 ocfs2: Read from an unwritten extent returns zeros Return an optional extent flags field from our lookup functions and wire up callers to treat unwritten regions as holes for the purpose of returning zeros to the user. Signed-off-by: Mark Fasheh commit e48edee2d8eab812f31f0ff62c6ba635ca2e1e21 Author: Mark Fasheh Date: Wed Mar 7 16:46:57 2007 -0800 ocfs2: make room for unwritten extents flag Due to the size of our group bitmaps, we'll never have a leaf node extent record with more than 16 bits worth of clusters. Split e_clusters up so that leaf nodes can get a flags field where we can mark unwritten extents. Interior nodes whose length references all the child nodes beneath it can't split their e_clusters field, so we use a union to preserve sizing there. Signed-off-by: Mark Fasheh commit 6af67d8205cf65fbaaa743edc7ebb46e486e34ff Author: Mark Fasheh Date: Tue Mar 6 17:24:46 2007 -0800 ocfs2: Use own splice write actor We need to fill holes during a splice write. Provide our own splice write actor which can call ocfs2_file_buffered_write() with a splice-specific callback. Signed-off-by: Mark Fasheh commit fa41045fcbf78269991d5aebb1820fc51534f05d Author: Mark Fasheh Date: Thu Mar 1 11:22:19 2007 -0800 ocfs2: Use do_sync_mapping_range() in ocfs2_zero_tail_for_truncate() Do this instead of filemap_fdatawrite() - this way we sync only the range between i_size and the cluster boundary. Signed-off-by: Mark Fasheh commit 60b11392f1a09433740bda3048202213daa27736 Author: Mark Fasheh Date: Fri Feb 16 11:46:50 2007 -0800 ocfs2: zero tail of sparse files on truncate Since we don't zero on extend anymore, truncate needs to be fixed up to zero the part of a file between i_size and and end of it's cluster. Otherwise a subsequent extend could expose bad data. This introduced a new helper, which can be used in ocfs2_write(). Signed-off-by: Mark Fasheh commit 25baf2da1473d9dcde1a4c7b0ab26e7d67d9bf62 Author: Mark Fasheh Date: Wed Feb 14 15:30:30 2007 -0800 ocfs2: Teach ocfs2_get_block() about holes ocfs2_get_block() didn't understand sparse files, fix that. Also remove some code that isn't really useful anymore. We can fix up ocfs2_direct_IO_get_blocks() at the same time. Signed-off-by: Mark Fasheh commit 5069120b7227fd323152a3755a0aa6bdeb361310 Author: Mark Fasheh Date: Fri Feb 9 20:52:53 2007 -0800 ocfs2: remove ocfs2_prepare_write() and ocfs2_commit_write() These are no longer used, and can't handle file systems with sparse file allocation. Signed-off-by: Mark Fasheh commit 9517bac6cc7a7aa4fee63cb38a32cb6014e264c7 Author: Mark Fasheh Date: Fri Feb 9 20:24:12 2007 -0800 ocfs2: teach ocfs2_file_aio_write() about sparse files Unfortunately, ocfs2 can no longer make use of generic_file_aio_write_nlock() because allocating writes will require zeroing of pages adjacent to the I/O for cluster sizes greater than page size. Implement a custom file write here, which can order page locks for zeroing. This also has the advantage that cluster locks can easily be ordered outside of the page locks. Signed-off-by: Mark Fasheh commit 89488984ac23b0580f959b9ee549f2fcb1c2f194 Author: Mark Fasheh Date: Wed Jan 17 13:10:55 2007 -0800 ocfs2: Turn off shared writeable mmap for local files systems with holes. This will be turned back on once we can do allocation in ->page_mkwrite(). Signed-off-by: Mark Fasheh commit abf8b1569415bb4a8915a4884943ecd39c510957 Author: Mark Fasheh Date: Wed Jan 17 13:07:24 2007 -0800 ocfs2: abstract out allocation locking Right now, file allocation for ocfs2 is done within ocfs2_extend_file(), which is either called from ->setattr() (for an i_size change), or at the top of ocfs2_file_aio_write(). Inodes on file systems with sparse file support will want to do their allocation during the actual write call. In either case the cluster locking decisions are the same. We abstract out that code into a new function, ocfs2_lock_allocators() which will be used by a later patch to enable writing to sparse files. This also provides a nice cleanup of ocfs2_extend_allocation(). Signed-off-by: Mark Fasheh commit 3a0782d09c07aa3ec767ba6089cd15cfbfbfc508 Author: Mark Fasheh Date: Wed Jan 17 12:53:31 2007 -0800 ocfs2: teach extend/truncate about sparse files For ocfs2_truncate_file(), we eliminate the "simple" truncate case which no longer exists since i_size is not tied to i_clusters. In ocfs2_extend_file(), we skip the allocation / page zeroing code for file systems which understand sparse files. The core truncate code is changed to do a bottom up tree traversal. This gets abstracted out into it's own function. To make things more readable, most of the special case handling for in-inode extents from ocfs2_do_truncate() is also removed. Though write support for sparse files comes in a later patch, we at least update ocfs2_prepare_inode_for_write() to skip allocation for sparse files. Signed-off-by: Mark Fasheh commit 363041a5f74b953ab6b705ac9c88e5eda218a24b Author: Mark Fasheh Date: Wed Jan 17 12:31:35 2007 -0800 ocfs2: temporarily remove extent map caching The code in extent_map.c is not prepared to deal with a subtree being rotated between lookups. This can happen when filling holes in sparse files. Instead of a lengthy patch to update the code (which would likely lose the benefit of caching subtree roots), we remove most of the algorithms and implement a simple path based lookup. A less ambitious extent caching scheme will be added in a later patch. Signed-off-by: Mark Fasheh commit dcd0538ff4e854fa9d7f4630b359ca8fdb5cb5a8 Author: Mark Fasheh Date: Tue Jan 16 11:32:23 2007 -0800 ocfs2: sparse b-tree support Introduce tree rotations into the b-tree code. This will allow ocfs2 to support sparse files. Much of the added code is designed to be generic (in the ocfs2 sense) so that it can later be re-used to implement large extended attributes. This patch only adds the rotation code and does minimal updates to callers of the extent api. Signed-off-by: Mark Fasheh commit 6f16bf655c5795586dd2ac96a7c70e0b9a378746 Author: Mark Fasheh Date: Tue Mar 20 17:17:54 2007 -0700 ocfs2: small cleanup of ocfs2_request_delete() There are two checks in there (one for inode newness, one for other mounted nodes) which are unnecessary, so remove them. The DLM will allow the trylock in either case without any messaging overhead. Removing these makes ocfs2_request_delete() a one liner function, so just move the trylock out one level into ocfs2_query_inode_wipe(). Signed-off-by: Mark Fasheh commit 68e2b740c4b5394680cfefccddbdb486c5866a4c Author: Tiger Yang Date: Tue Mar 20 16:42:10 2007 -0700 ocfs2: remove unused code Remove node messaging code that becomes unused with the delete inode vote removal. [Removed even more cruft which I spotted during review --Mark] Signed-off-by: Tiger Yang Signed-off-by: Mark Fasheh commit 500086300e6dc5308a7328990bd50d17e075162b Author: Tiger Yang Date: Tue Mar 20 16:01:38 2007 -0700 ocfs2: Remove delete inode vote Ocfs2 currently does cluster-wide node messaging to check the open state of an inode during delete. This patch removes that mechanism in favor of an inode cluster lock which is taken at shared read when an inode is first read and dropped in clear_inode(). This allows a deleting node to test the liveness of an inode by attempting to take an exclusive lock. Signed-off-by: Tiger Yang Signed-off-by: Mark Fasheh commit a9f5f70739363ccca2e771c274c4f015c5fb7a88 Author: Mark Fasheh Date: Thu Apr 26 11:43:43 2007 -0700 ocfs2: filter more error prints We don't want to print anything at all in ocfs2_lookup() when getting an error from ocfs2_iget() - it could be something as innocuous as a signal being detected in the dlm. ocfs2_permission() should filter on -ENOENT which ocfs2_meta_lock() can return if the inode was deleted on another node. Signed-off-by: Mark Fasheh commit bebe6f120b036349f7212205eeaf8248d4820c4b Author: Sunil Mushran Date: Tue Apr 17 13:53:38 2007 -0700 ocfs2: Replace panic() with emergency_restart() when fencing We have noticed panic() hanging leading us to a situation in which the node, while otherwise dead, is still disk heartbeating. This leads to a hung cluster as the other nodes are waiting for this node to stop disk heartbeating. This situation is only resolved by power resetting the box. Signed-off-by: Sunil Mushran Signed-off-by: Mark Fasheh commit 5d262cc7dd3d47784f8233ad4ec2cc5a08059b71 Author: Sunil Mushran Date: Tue Apr 17 13:49:19 2007 -0700 ocfs2: Silence compiler warnings Signed-off-by: Sunil Mushran Signed-off-by: Mark Fasheh commit be9e986b824b41c9d5cc5eca34ee3424c35fd162 Author: Mark Fasheh Date: Wed Apr 18 15:22:08 2007 -0700 ocfs2: Local mounts should skip inode updates We don't want the extent map and uptodate cache destruction in ocfs2_meta_lock_update() on a local mount, so skip that. This fixes several bugs with uptodate being cleared on buffers and extent maps being corrupted. Signed-off-by: Mark Fasheh commit 0d01af6e5dd6bc7abbcb6331021f8fee18005540 Author: Sunil Mushran Date: Tue Apr 17 13:32:20 2007 -0700 ocfs2_dlm: Call cond_resched_lock() once per hash bucket scan In dlm_migrate_all_locks(), we currently call cond_resched_lock() after processing each lockres in a hash bucket. Move it outside the loop so as to call it only after the entire hash bucket has been processed. Signed-off-by: Sunil Mushran Signed-off-by: Mark Fasheh commit 756a1501ddbbe73098aa031939460930f6edc9cd Author: Srinivas Eeda Date: Tue Apr 17 13:26:33 2007 -0700 ocfs2_dlm: fix race in dlm_remaster_locks There is a possibility that dlm_remaster_locks could overwride node->state with DLM_RECO_NODE_DATA_REQUESTED after dlm_reco_data_done_handler sets the node->state to DLM_RECO_NODE_DATA_DONE. This could lead to recovery getting stuck and requires a cluster reboot. Synchronize with dlm_reco_state_lock spinlock. Signed-off-by: Srinivas Eeda Signed-off-by: Mark Fasheh