| From c2952d202f710d326ac36a8ea6bd216b20615ec8 Mon Sep 17 00:00:00 2001 |
| From: Steven Whitehouse <swhiteho@redhat.com> |
| Date: Thu, 14 Mar 2013 15:49:59 +0000 |
| Subject: GFS2: Fix unlock of fcntl locks during withdrawn state |
| |
| From: Steven Whitehouse <swhiteho@redhat.com> |
| |
| commit c2952d202f710d326ac36a8ea6bd216b20615ec8 upstream. |
| |
| When withdraw occurs, we need to continue to allow unlocks of fcntl |
| locks to occur, however these will only be local, since the node has |
| withdrawn from the cluster. This prevents triggering a VFS level |
| bug trap due to locks remaining when a file is closed. |
| |
| Signed-off-by: Steven Whitehouse <swhiteho@redhat.com> |
| Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/gfs2/file.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/fs/gfs2/file.c |
| +++ b/fs/gfs2/file.c |
| @@ -924,8 +924,11 @@ static int gfs2_lock(struct file *file, |
| cmd = F_SETLK; |
| fl->fl_type = F_UNLCK; |
| } |
| - if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) |
| + if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) { |
| + if (fl->fl_type == F_UNLCK) |
| + posix_lock_file_wait(file, fl); |
| return -EIO; |
| + } |
| if (IS_GETLK(cmd)) |
| return dlm_posix_get(ls->ls_dlm, ip->i_no_addr, file, fl); |
| else if (fl->fl_type == F_UNLCK) |