diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-22 12:52:16 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-22 12:52:16 -0700 |
commit | 3e59ddff2b8dfe42b15520c4f8f2486bd9f9708e (patch) | |
tree | 10587a53ab093fc498fa52651f8a7c1b2b99af60 /fs/ocfs2/alloc.c | |
parent | 6bbd9b6d694ff7242d63cda2faac4bd59ee4328e (diff) | |
parent | eb35746ca5e2211569b91ebb44d55b88ec91f3b0 (diff) | |
download | op-kernel-dev-3e59ddff2b8dfe42b15520c4f8f2486bd9f9708e.zip op-kernel-dev-3e59ddff2b8dfe42b15520c4f8f2486bd9f9708e.tar.gz |
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: Remove overzealous BUG_ON()
ocfs2: Don't print on unknown remote blocking call
ocfs2: Remove EXPERIMENTAL dependency
ocfs2: implement directory read-ahead
ocfs2: properly update i_mtime on buffered write
ocfs2: Fix directory link count checks in ocfs2_link()
ocfs2: move nlink check in ocfs2_mknod()
ocfs2: Fix heartbeat sector calculation
[PATCH] fs/ocfs2/ioctl.c should #include "ioctl.h"
ocfs2: add ext2 attributes
configfs: Prevent duplicate subsystem names.
Diffstat (limited to 'fs/ocfs2/alloc.c')
-rw-r--r-- | fs/ocfs2/alloc.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index edaab05..f43bc5f 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c @@ -1717,17 +1717,29 @@ static int ocfs2_do_truncate(struct ocfs2_super *osb, ocfs2_remove_from_cache(inode, eb_bh); - BUG_ON(eb->h_suballoc_slot); BUG_ON(el->l_recs[0].e_clusters); BUG_ON(el->l_recs[0].e_cpos); BUG_ON(el->l_recs[0].e_blkno); - status = ocfs2_free_extent_block(handle, - tc->tc_ext_alloc_inode, - tc->tc_ext_alloc_bh, - eb); - if (status < 0) { - mlog_errno(status); - goto bail; + if (eb->h_suballoc_slot == 0) { + /* + * This code only understands how to + * lock the suballocator in slot 0, + * which is fine because allocation is + * only ever done out of that + * suballocator too. A future version + * might change that however, so avoid + * a free if we don't know how to + * handle it. This way an fs incompat + * bit will not be necessary. + */ + status = ocfs2_free_extent_block(handle, + tc->tc_ext_alloc_inode, + tc->tc_ext_alloc_bh, + eb); + if (status < 0) { + mlog_errno(status); + goto bail; + } } } brelse(eb_bh); |