Message ID | 20140319211000.A597C31C25A@corp2gmr1-1.hot.corp.google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Mar 19, 2014 at 02:10:00PM -0700, Andrew Morton wrote: > From: Wengang Wang <wen.gang.wang@oracle.com> > Subject: ocfs2: flock: drop cross-node lock when failed locally > > ocfs2_do_flock() calls ocfs2_file_lock() to get the cross-node clock and > then call flock_lock_file_wait() to compete with local processes. In case > flock_lock_file_wait() failed, say -ENOMEM, clean up work is not done. > This patch adds the cleanup --drop the cross-node lock which was just > granted. Out of curiousity was this a bug someone hit, or did you catch this via code review. Reviewed-by: Mark Fasheh <mfasheh@suse.de> --Mark -- Mark Fasheh
Hi Mark, I find it by code review. thanks, wengang ? 2014?03?31? 09:30, Mark Fasheh ??: > On Wed, Mar 19, 2014 at 02:10:00PM -0700, Andrew Morton wrote: >> From: Wengang Wang <wen.gang.wang@oracle.com> >> Subject: ocfs2: flock: drop cross-node lock when failed locally >> >> ocfs2_do_flock() calls ocfs2_file_lock() to get the cross-node clock and >> then call flock_lock_file_wait() to compete with local processes. In case >> flock_lock_file_wait() failed, say -ENOMEM, clean up work is not done. >> This patch adds the cleanup --drop the cross-node lock which was just >> granted. > Out of curiousity was this a bug someone hit, or did you catch this > via code review. > > Reviewed-by: Mark Fasheh <mfasheh@suse.de> > --Mark > > -- > Mark Fasheh > > _______________________________________________ > Ocfs2-devel mailing list > Ocfs2-devel@oss.oracle.com > https://oss.oracle.com/mailman/listinfo/ocfs2-devel
diff -puN fs/ocfs2/locks.c~ocfs2-flock-drop-cross-node-lock-when-failed-locally fs/ocfs2/locks.c --- a/fs/ocfs2/locks.c~ocfs2-flock-drop-cross-node-lock-when-failed-locally +++ a/fs/ocfs2/locks.c @@ -82,6 +82,8 @@ static int ocfs2_do_flock(struct file *f } ret = flock_lock_file_wait(file, fl); + if (ret) + ocfs2_file_unlock(file); out: mutex_unlock(&fp->fp_mutex);