Loading fs/ocfs2/dlmglue.c +0 −103 Original line number Diff line number Diff line Loading @@ -268,9 +268,6 @@ static int ocfs2_meta_lock_update(struct inode *inode, struct buffer_head **bh); static void ocfs2_drop_osb_locks(struct ocfs2_super *osb); static inline int ocfs2_highest_compat_lock_level(int level); static inline int ocfs2_can_downconvert_meta_lock(struct inode *inode, struct ocfs2_lock_res *lockres, int new_level); static void ocfs2_build_lock_name(enum ocfs2_lock_type type, u64 blkno, Loading Loading @@ -2538,106 +2535,6 @@ static int ocfs2_cancel_convert(struct ocfs2_super *osb, return ret; } static inline int ocfs2_can_downconvert_meta_lock(struct inode *inode, struct ocfs2_lock_res *lockres, int new_level) { int ret; mlog_entry_void(); BUG_ON(new_level != LKM_NLMODE && new_level != LKM_PRMODE); if (lockres->l_flags & OCFS2_LOCK_REFRESHING) { ret = 0; mlog(0, "lockres %s currently being refreshed -- backing " "off!\n", lockres->l_name); } else if (new_level == LKM_PRMODE) ret = !lockres->l_ex_holders && ocfs2_inode_fully_checkpointed(inode); else /* Must be NLMODE we're converting to. */ ret = !lockres->l_ro_holders && !lockres->l_ex_holders && ocfs2_inode_fully_checkpointed(inode); mlog_exit(ret); return ret; } static int ocfs2_do_unblock_meta(struct inode *inode, int *requeue) { int new_level; int set_lvb = 0; int ret = 0; struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres; unsigned long flags; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); mlog_entry_void(); spin_lock_irqsave(&lockres->l_lock, flags); BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BLOCKED)); mlog(0, "l_level=%d, l_blocking=%d\n", lockres->l_level, lockres->l_blocking); BUG_ON(lockres->l_level != LKM_EXMODE && lockres->l_level != LKM_PRMODE); if (lockres->l_flags & OCFS2_LOCK_BUSY) { *requeue = 1; ret = ocfs2_prepare_cancel_convert(osb, lockres); spin_unlock_irqrestore(&lockres->l_lock, flags); if (ret) { ret = ocfs2_cancel_convert(osb, lockres); if (ret < 0) mlog_errno(ret); } goto leave; } new_level = ocfs2_highest_compat_lock_level(lockres->l_blocking); mlog(0, "l_level=%d, l_blocking=%d, new_level=%d\n", lockres->l_level, lockres->l_blocking, new_level); if (ocfs2_can_downconvert_meta_lock(inode, lockres, new_level)) { if (lockres->l_level == LKM_EXMODE) set_lvb = 1; /* If the lock hasn't been refreshed yet (rare), then * our memory inode values are old and we skip * stuffing the lvb. There's no need to actually clear * out the lvb here as it's value is still valid. */ if (!(lockres->l_flags & OCFS2_LOCK_NEEDS_REFRESH)) { if (set_lvb) __ocfs2_stuff_meta_lvb(inode); } else mlog(0, "lockres %s: downconverting stale lock!\n", lockres->l_name); mlog(0, "calling ocfs2_downconvert_lock with l_level=%d, " "l_blocking=%d, new_level=%d\n", lockres->l_level, lockres->l_blocking, new_level); ocfs2_prepare_downconvert(lockres, new_level); spin_unlock_irqrestore(&lockres->l_lock, flags); ret = ocfs2_downconvert_lock(osb, lockres, new_level, set_lvb); goto leave; } if (!ocfs2_inode_fully_checkpointed(inode)) ocfs2_start_checkpoint(osb); *requeue = 1; spin_unlock_irqrestore(&lockres->l_lock, flags); ret = 0; leave: mlog_exit(ret); return ret; } static int ocfs2_generic_unblock_lock(struct ocfs2_super *osb, struct ocfs2_lock_res *lockres, struct ocfs2_unblock_ctl *ctl, Loading Loading
fs/ocfs2/dlmglue.c +0 −103 Original line number Diff line number Diff line Loading @@ -268,9 +268,6 @@ static int ocfs2_meta_lock_update(struct inode *inode, struct buffer_head **bh); static void ocfs2_drop_osb_locks(struct ocfs2_super *osb); static inline int ocfs2_highest_compat_lock_level(int level); static inline int ocfs2_can_downconvert_meta_lock(struct inode *inode, struct ocfs2_lock_res *lockres, int new_level); static void ocfs2_build_lock_name(enum ocfs2_lock_type type, u64 blkno, Loading Loading @@ -2538,106 +2535,6 @@ static int ocfs2_cancel_convert(struct ocfs2_super *osb, return ret; } static inline int ocfs2_can_downconvert_meta_lock(struct inode *inode, struct ocfs2_lock_res *lockres, int new_level) { int ret; mlog_entry_void(); BUG_ON(new_level != LKM_NLMODE && new_level != LKM_PRMODE); if (lockres->l_flags & OCFS2_LOCK_REFRESHING) { ret = 0; mlog(0, "lockres %s currently being refreshed -- backing " "off!\n", lockres->l_name); } else if (new_level == LKM_PRMODE) ret = !lockres->l_ex_holders && ocfs2_inode_fully_checkpointed(inode); else /* Must be NLMODE we're converting to. */ ret = !lockres->l_ro_holders && !lockres->l_ex_holders && ocfs2_inode_fully_checkpointed(inode); mlog_exit(ret); return ret; } static int ocfs2_do_unblock_meta(struct inode *inode, int *requeue) { int new_level; int set_lvb = 0; int ret = 0; struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres; unsigned long flags; struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); mlog_entry_void(); spin_lock_irqsave(&lockres->l_lock, flags); BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BLOCKED)); mlog(0, "l_level=%d, l_blocking=%d\n", lockres->l_level, lockres->l_blocking); BUG_ON(lockres->l_level != LKM_EXMODE && lockres->l_level != LKM_PRMODE); if (lockres->l_flags & OCFS2_LOCK_BUSY) { *requeue = 1; ret = ocfs2_prepare_cancel_convert(osb, lockres); spin_unlock_irqrestore(&lockres->l_lock, flags); if (ret) { ret = ocfs2_cancel_convert(osb, lockres); if (ret < 0) mlog_errno(ret); } goto leave; } new_level = ocfs2_highest_compat_lock_level(lockres->l_blocking); mlog(0, "l_level=%d, l_blocking=%d, new_level=%d\n", lockres->l_level, lockres->l_blocking, new_level); if (ocfs2_can_downconvert_meta_lock(inode, lockres, new_level)) { if (lockres->l_level == LKM_EXMODE) set_lvb = 1; /* If the lock hasn't been refreshed yet (rare), then * our memory inode values are old and we skip * stuffing the lvb. There's no need to actually clear * out the lvb here as it's value is still valid. */ if (!(lockres->l_flags & OCFS2_LOCK_NEEDS_REFRESH)) { if (set_lvb) __ocfs2_stuff_meta_lvb(inode); } else mlog(0, "lockres %s: downconverting stale lock!\n", lockres->l_name); mlog(0, "calling ocfs2_downconvert_lock with l_level=%d, " "l_blocking=%d, new_level=%d\n", lockres->l_level, lockres->l_blocking, new_level); ocfs2_prepare_downconvert(lockres, new_level); spin_unlock_irqrestore(&lockres->l_lock, flags); ret = ocfs2_downconvert_lock(osb, lockres, new_level, set_lvb); goto leave; } if (!ocfs2_inode_fully_checkpointed(inode)) ocfs2_start_checkpoint(osb); *requeue = 1; spin_unlock_irqrestore(&lockres->l_lock, flags); ret = 0; leave: mlog_exit(ret); return ret; } static int ocfs2_generic_unblock_lock(struct ocfs2_super *osb, struct ocfs2_lock_res *lockres, struct ocfs2_unblock_ctl *ctl, Loading