summaryrefslogtreecommitdiff
path: root/fs/afs/fs_operation.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/afs/fs_operation.c')
-rw-r--r--fs/afs/fs_operation.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/afs/fs_operation.c b/fs/afs/fs_operation.c
index e760e11d5bcb..8c6d827f999d 100644
--- a/fs/afs/fs_operation.c
+++ b/fs/afs/fs_operation.c
@@ -228,6 +228,7 @@ void afs_wait_for_operation(struct afs_operation *op)
*/
int afs_put_operation(struct afs_operation *op)
{
+ struct afs_endpoint_state *estate = op->estate;
struct afs_addr_list *alist;
int i, ret = afs_op_error(op);
@@ -251,14 +252,16 @@ int afs_put_operation(struct afs_operation *op)
kfree(op->more_files);
}
- alist = op->alist;
- if (alist) {
- if (op->call_responded &&
- op->addr_index != alist->preferred &&
- test_bit(alist->preferred, &op->addr_tried))
- WRITE_ONCE(alist->preferred, op->addr_index);
- afs_put_addrlist(alist, afs_alist_trace_put_operation);
- op->alist = NULL;
+ if (estate) {
+ alist = estate->addresses;
+ if (alist) {
+ if (op->call_responded &&
+ op->addr_index != alist->preferred &&
+ test_bit(alist->preferred, &op->addr_tried))
+ WRITE_ONCE(alist->preferred, op->addr_index);
+ }
+ afs_put_endpoint_state(estate, afs_estate_trace_put_operation);
+ op->estate = NULL;
}
afs_put_serverlist(op->net, op->server_list);