[Ocfs2-devel] [Patch] fix for continuous receiving
FLAG_VOTE_UPDATE_RETRY
Mark Fasheh
mark.fasheh at oracle.com
Mon Jul 5 11:58:09 CDT 2004
On Mon, Jul 05, 2004 at 05:27:15PM +0800, Ling, Xiaofeng wrote:
> It seems the inode lock system map file is not released after acquired.That causes when another node want to acquire it,
> this node found it is already holded.
Ahh, good catch! I saw that bug but hadn't had a chance to track it down.
It also looks like, down below that code we're not freeing the
inode_alloc_inode and the inode_alloc_free array.
> --------------------------------------------------------------------------------
> Index: alloc.c
> ===================================================================
> --- alloc.c (revision 1238)
> +++ alloc.c (working copy)
> @@ -482,6 +482,21 @@
> }
>
> for (i = 0; i < osb->max_nodes; i++) {
> + if (inode_alloc_free[i] != NULL) {
> + down_write(&OCFS_I(inode_alloc_inode[i])->ip_io_sem);
> + status = ocfs_release_lock (osb,
> + OCFS_LKM_EXMODE,
> + FLAG_FILE_CREATE,
> + NULL, inode_alloc_inode[i]);
> + up_write(&OCFS_I(inode_alloc_inode[i])->ip_io_sem);
> + if (status < 0) {
> + LOG_ERROR_STATUS (status);
> + goto finally;
> + }
> + }
> + }
> +
> + for (i = 0; i < osb->max_nodes; i++) {
> if (ext_alloc_free[i] != NULL) {
> down_write(&OCFS_I(ext_alloc_inode[i])->ip_io_sem);
> status = ocfs_release_lock (osb,
Hmm, since we loop on the same conditions (i < osb->max_nodes), could you
resend with both 'if' blocks within the same 'for' loop? Also, if you feel
like fixing the bug noted above in the same patch, that'd be just fine with
me :)
--Mark
--
Mark Fasheh
Software Developer, Oracle Corp
mark.fasheh at oracle.com
More information about the Ocfs2-devel
mailing list