File tree Expand file tree Collapse file tree 5 files changed +19
-7
lines changed Expand file tree Collapse file tree 5 files changed +19
-7
lines changed Original file line number Diff line number Diff line change @@ -254,6 +254,19 @@ void afs_put_read(struct afs_read *req)
254
254
}
255
255
}
256
256
257
+ static void afs_fetch_data_notify (struct afs_operation * op )
258
+ {
259
+ struct afs_read * req = op -> fetch .req ;
260
+ int error = op -> error ;
261
+
262
+ if (error == - ECONNABORTED )
263
+ error = afs_abort_to_error (op -> ac .abort_code );
264
+ req -> error = error ;
265
+
266
+ if (req -> done )
267
+ req -> done (req );
268
+ }
269
+
257
270
static void afs_fetch_data_success (struct afs_operation * op )
258
271
{
259
272
struct afs_vnode * vnode = op -> file [0 ].vnode ;
@@ -262,6 +275,7 @@ static void afs_fetch_data_success(struct afs_operation *op)
262
275
afs_vnode_commit_status (op , & op -> file [0 ]);
263
276
afs_stat_v (vnode , n_fetches );
264
277
atomic_long_add (op -> fetch .req -> actual_len , & op -> net -> n_fetch_bytes );
278
+ afs_fetch_data_notify (op );
265
279
}
266
280
267
281
static void afs_fetch_data_put (struct afs_operation * op )
@@ -275,6 +289,7 @@ static const struct afs_operation_ops afs_fetch_data_operation = {
275
289
.issue_yfs_rpc = yfs_fs_fetch_data ,
276
290
.success = afs_fetch_data_success ,
277
291
.aborted = afs_check_for_remote_deletion ,
292
+ .failed = afs_fetch_data_notify ,
278
293
.put = afs_fetch_data_put ,
279
294
};
280
295
Original file line number Diff line number Diff line change @@ -198,8 +198,10 @@ void afs_wait_for_operation(struct afs_operation *op)
198
198
case - ECONNABORTED :
199
199
if (op -> ops -> aborted )
200
200
op -> ops -> aborted (op );
201
- break ;
201
+ fallthrough ;
202
202
default :
203
+ if (op -> ops -> failed )
204
+ op -> ops -> failed (op );
203
205
break ;
204
206
}
205
207
Original file line number Diff line number Diff line change @@ -392,9 +392,6 @@ static int afs_deliver_fs_fetch_data(struct afs_call *call)
392
392
break ;
393
393
}
394
394
395
- if (req -> done )
396
- req -> done (req );
397
-
398
395
_leave (" = 0 [done]" );
399
396
return 0 ;
400
397
}
Original file line number Diff line number Diff line change @@ -742,6 +742,7 @@ struct afs_operation_ops {
742
742
void (* issue_yfs_rpc )(struct afs_operation * op );
743
743
void (* success )(struct afs_operation * op );
744
744
void (* aborted )(struct afs_operation * op );
745
+ void (* failed )(struct afs_operation * op );
745
746
void (* edit_dir )(struct afs_operation * op );
746
747
void (* put )(struct afs_operation * op );
747
748
};
Original file line number Diff line number Diff line change @@ -449,9 +449,6 @@ static int yfs_deliver_fs_fetch_data64(struct afs_call *call)
449
449
break ;
450
450
}
451
451
452
- if (req -> done )
453
- req -> done (req );
454
-
455
452
_leave (" = 0 [done]" );
456
453
return 0 ;
457
454
}
You can’t perform that action at this time.
0 commit comments