diff --git a/fs/locks.c b/fs/locks.c
index 28270e74be3428be2b518d4c26daa04e353cff39..545e79d6eb70b9648766d5efff2adac1339e1ed1 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1459,7 +1459,7 @@ int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
 	ctx = smp_load_acquire(&inode->i_flctx);
 	if (!ctx) {
 		WARN_ON_ONCE(1);
-		return error;
+		goto free_lock;
 	}
 
 	percpu_down_read_preempt_disable(&file_rwsem);
@@ -1539,6 +1539,7 @@ int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
 	spin_unlock(&ctx->flc_lock);
 	percpu_up_read_preempt_enable(&file_rwsem);
 	locks_dispose_list(&dispose);
+free_lock:
 	locks_free_lock(new_fl);
 	return error;
 }