diff options
author | David Teigland <teigland@redhat.com> | 2012-11-15 15:01:51 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2012-11-16 11:20:42 -0600 |
commit | da8c66638ae684c99abcb30e89d2803402e7ca20 (patch) | |
tree | e14974b7eb69db1d1c595892c94298a3f547ae23 /fs/dlm/dlm_internal.h | |
parent | a3de56bdb980c63b01662cac05d430db60ff4374 (diff) | |
download | kernel_goldelico_gta04-da8c66638ae684c99abcb30e89d2803402e7ca20.zip kernel_goldelico_gta04-da8c66638ae684c99abcb30e89d2803402e7ca20.tar.gz kernel_goldelico_gta04-da8c66638ae684c99abcb30e89d2803402e7ca20.tar.bz2 |
dlm: fix lvb invalidation conditions
When a node is removed that held a PW/EX lock, the
existing master node should invalidate the lvb on the
resource due to the purged lock.
Previously, the existing master node was invalidating
the lvb if it found only NL/CR locks on the resource
during recovery for the removed node. This could lead
to cases where it invalidated the lvb and shouldn't
have, or cases where it should have invalidated and
didn't.
When recovery selects a *new* master node for a
resource, and that new master finds only NL/CR locks
on the resource after lock recovery, it should
invalidate the lvb. This case was handled correctly
(but was incorrectly applied to the existing master
case also.)
When a process exits while holding a PW/EX lock,
the lvb on the resource should be invalidated.
This was not happening.
The lvb contents and VALNOTVALID flag should be
recovered before granting locks in recovery so that
the recovered lvb state is provided in the callback.
The lvb was being recovered after the lock was granted.
Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/dlm_internal.h')
-rw-r--r-- | fs/dlm/dlm_internal.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/dlm/dlm_internal.h b/fs/dlm/dlm_internal.h index 871c1ab..77c0f70 100644 --- a/fs/dlm/dlm_internal.h +++ b/fs/dlm/dlm_internal.h @@ -337,6 +337,7 @@ enum rsb_flags { RSB_NEW_MASTER2, RSB_RECOVER_CONVERT, RSB_RECOVER_GRANT, + RSB_RECOVER_LVB_INVAL, }; static inline void rsb_set_flag(struct dlm_rsb *r, enum rsb_flags flag) |