Skip to content

Commit 392e317

Browse files
jtlaytonbrauner
authored andcommitted
filelock: add lease_dispose_list() helper
The lease-handling code paths always know they're disposing of leases, yet locks_dispose_list() checks flags at runtime to determine whether to call locks_free_lease() or locks_free_lock(). Split out a dedicated lease_dispose_list() helper for lease code paths. This makes the type handling explicit and prepares for the upcoming lease_manager enhancements where lease-specific operations are being consolidated. Reviewed-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Jeff Layton <jlayton@kernel.org> Link: https://patch.msgid.link/20251204-dir-deleg-ro-v2-1-22d37f92ce2c@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent ed61378 commit 392e317

1 file changed

Lines changed: 19 additions & 10 deletions

File tree

fs/locks.c

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,19 @@ locks_dispose_list(struct list_head *dispose)
369369
while (!list_empty(dispose)) {
370370
flc = list_first_entry(dispose, struct file_lock_core, flc_list);
371371
list_del_init(&flc->flc_list);
372-
if (flc->flc_flags & (FL_LEASE|FL_DELEG|FL_LAYOUT))
373-
locks_free_lease(file_lease(flc));
374-
else
375-
locks_free_lock(file_lock(flc));
372+
locks_free_lock(file_lock(flc));
373+
}
374+
}
375+
376+
static void
377+
lease_dispose_list(struct list_head *dispose)
378+
{
379+
struct file_lock_core *flc;
380+
381+
while (!list_empty(dispose)) {
382+
flc = list_first_entry(dispose, struct file_lock_core, flc_list);
383+
list_del_init(&flc->flc_list);
384+
locks_free_lease(file_lease(flc));
376385
}
377386
}
378387

@@ -1620,7 +1629,7 @@ int __break_lease(struct inode *inode, unsigned int flags)
16201629
spin_unlock(&ctx->flc_lock);
16211630
percpu_up_read(&file_rwsem);
16221631

1623-
locks_dispose_list(&dispose);
1632+
lease_dispose_list(&dispose);
16241633
error = wait_event_interruptible_timeout(new_fl->c.flc_wait,
16251634
list_empty(&new_fl->c.flc_blocked_member),
16261635
break_time);
@@ -1643,7 +1652,7 @@ int __break_lease(struct inode *inode, unsigned int flags)
16431652
out:
16441653
spin_unlock(&ctx->flc_lock);
16451654
percpu_up_read(&file_rwsem);
1646-
locks_dispose_list(&dispose);
1655+
lease_dispose_list(&dispose);
16471656
free_lock:
16481657
locks_free_lease(new_fl);
16491658
return error;
@@ -1727,7 +1736,7 @@ static int __fcntl_getlease(struct file *filp, unsigned int flavor)
17271736
spin_unlock(&ctx->flc_lock);
17281737
percpu_up_read(&file_rwsem);
17291738

1730-
locks_dispose_list(&dispose);
1739+
lease_dispose_list(&dispose);
17311740
}
17321741
return type;
17331742
}
@@ -1896,7 +1905,7 @@ generic_add_lease(struct file *filp, int arg, struct file_lease **flp, void **pr
18961905
out:
18971906
spin_unlock(&ctx->flc_lock);
18981907
percpu_up_read(&file_rwsem);
1899-
locks_dispose_list(&dispose);
1908+
lease_dispose_list(&dispose);
19001909
if (is_deleg)
19011910
inode_unlock(inode);
19021911
if (!error && !my_fl)
@@ -1932,7 +1941,7 @@ static int generic_delete_lease(struct file *filp, void *owner)
19321941
error = fl->fl_lmops->lm_change(victim, F_UNLCK, &dispose);
19331942
spin_unlock(&ctx->flc_lock);
19341943
percpu_up_read(&file_rwsem);
1935-
locks_dispose_list(&dispose);
1944+
lease_dispose_list(&dispose);
19361945
return error;
19371946
}
19381947

@@ -2727,7 +2736,7 @@ locks_remove_lease(struct file *filp, struct file_lock_context *ctx)
27272736
spin_unlock(&ctx->flc_lock);
27282737
percpu_up_read(&file_rwsem);
27292738

2730-
locks_dispose_list(&dispose);
2739+
lease_dispose_list(&dispose);
27312740
}
27322741

27332742
/*

0 commit comments

Comments
 (0)