Messages in this thread |  | | | Date | Tue, 17 Apr 2012 19:28:26 +0100 | | From | Al Viro <> | | Subject | Re: [git pull] vfs and fs fixes |
| |
On Tue, Apr 17, 2012 at 07:01:29PM +0100, Al Viro wrote:
> It isn't. Hell knows - I wonder if taking s_vfs_rename_mutex in all cases > in lock_rename() would be the right thing to do; it would remove the > problem, but might cost us too much contention...
Actually, it's even worse. ext4_move_extents() locks a _pair_ of ->i_mutex (having checked that both are non-directories first). In i_ino order. So the only plausible ordering would be * directories by tree order (with s_vfs_rename_mutex held to stabilize the tree topology) * non-directories after all directories, ordered in some consistent way. Which would have to be by inumber if we want to leave ext4 code as-is.
Bruce: for now I'm dropping that patch. We _might_ take ext4 mutex_inode_double_lock() into fs/namei.c and have it used by vfs_rename_other(), but I'm not convinced that this is the right thing to do. Is there any other sane way to deal with nfsd problem? i_mutex is already used for more things than I'd like...
Linus: I've removed that sucker from the queue; it should propagate to git.kernel.org in a few. Could you pull the rest? Same place, the stats are below:
Shortlog: Al Viro (12): nfsd: fix b0rken error value for setattr on read-only mount nfsd: fix error values returned by nfsd4_lockt() when nfsd_open() fails nfsd: fix endianness breakage in TEST_STATEID handling nfsd: fix error value on allocation failure in nfsd4_decode_test_stateid() nfsd: fix compose_entry_fh() failure exits ext4: fix endianness breakage in ext4_split_extent_at() btrfs: btrfs_root_readonly() broken on big-endian ocfs2: ->l_next_free_req breakage on big-endian ocfs: ->rl_used breakage on big-endian ocfs2: ->rl_count endianness breakage ocfs2: ->e_leaf_clusters endianness breakage lockd: fix the endianness bug
Diffstat: fs/btrfs/ctree.h | 2 +- fs/ext4/extents.c | 2 +- fs/lockd/clnt4xdr.c | 2 +- fs/lockd/clntxdr.c | 2 +- fs/nfsd/nfs3xdr.c | 22 ++++++++-------------- fs/nfsd/nfs4proc.c | 7 ++++--- fs/nfsd/nfs4state.c | 23 +++++++++-------------- fs/nfsd/nfs4xdr.c | 4 ++-- fs/ocfs2/alloc.c | 2 +- fs/ocfs2/refcounttree.c | 12 ++++++------ fs/ocfs2/suballoc.c | 4 ++-- 11 files changed, 36 insertions(+), 46 deletions(-)
|  |