diff --git a/kmod/src/lock_server.c b/kmod/src/lock_server.c index f4bf64a0..03460ef3 100644 --- a/kmod/src/lock_server.c +++ b/kmod/src/lock_server.c @@ -773,6 +773,10 @@ static void scoutfs_lock_server_recovery_timeout(struct work_struct *work) u64 rid; int ret; + ret = scoutfs_server_hold_commit(sb); + if (ret) + goto out; + /* we enter recovery if there are any client records */ for (rid = 0; ; rid++) { cbk.rid = cpu_to_be64(rid); @@ -802,7 +806,6 @@ static void scoutfs_lock_server_recovery_timeout(struct work_struct *work) scoutfs_err(sb, "client rid %016llx lock recovery timed out", rid); - /* XXX these aren't immediately committed */ cbk.rid = cpu_to_be64(rid); ret = scoutfs_btree_delete(sb, inf->alloc, inf->wri, &super->lock_clients, @@ -811,6 +814,8 @@ static void scoutfs_lock_server_recovery_timeout(struct work_struct *work) break; } + ret = scoutfs_server_apply_commit(sb, ret); +out: /* force processing all pending lock requests */ if (ret == 0) ret = finished_recovery(sb, 0, false);