Lines Matching refs:op

21 static bool afs_start_fs_iteration(struct afs_operation *op,
28 read_lock(&op->volume->servers_lock);
29 op->server_list = afs_get_serverlist(
30 rcu_dereference_protected(op->volume->servers,
31 lockdep_is_held(&op->volume->servers_lock)));
32 read_unlock(&op->volume->servers_lock);
34 op->untried = (1UL << op->server_list->nr_servers) - 1;
35 op->index = READ_ONCE(op->server_list->preferred);
40 for (i = 0; i < op->server_list->nr_servers; i++) {
41 server = op->server_list->servers[i].server;
43 op->index = i;
52 if (op->flags & AFS_OPERATION_CUR_ONLY) {
53 op->error = -ESTALE;
90 static bool afs_sleep_and_retry(struct afs_operation *op)
92 if (!(op->flags & AFS_OPERATION_UNINTR)) {
95 op->error = -ERESTARTSYS;
109 bool afs_select_fileserver(struct afs_operation *op)
113 struct afs_vnode *vnode = op->file[0].vnode;
116 int error = op->ac.error, i;
119 op->untried, op->index,
120 op->ac.tried, op->ac.index,
121 error, op->ac.abort_code);
123 if (op->flags & AFS_OPERATION_STOP) {
128 op->nr_iterations++;
138 op->error = error;
139 op->flags |= AFS_OPERATION_STOP;
147 switch (op->ac.abort_code) {
154 if (op->flags & AFS_OPERATION_VNOVOL) {
155 op->error = -EREMOTEIO;
159 write_lock(&op->volume->servers_lock);
160 op->server_list->vnovol_mask |= 1 << op->index;
161 write_unlock(&op->volume->servers_lock);
163 set_bit(AFS_VOLUME_NEEDS_UPDATE, &op->volume->flags);
164 error = afs_check_volume_status(op->volume, op);
168 if (test_bit(AFS_VOLUME_DELETED, &op->volume->flags)) {
169 op->error = -ENOMEDIUM;
176 if (rcu_access_pointer(op->volume->servers) == op->server_list) {
177 op->error = -EREMOTEIO;
182 op->flags |= AFS_OPERATION_VNOVOL;
192 op->error = afs_abort_to_error(op->ac.abort_code);
196 if (!test_and_set_bit(AFS_VOLUME_OFFLINE, &op->volume->flags)) {
197 afs_busy(op->volume, op->ac.abort_code);
198 clear_bit(AFS_VOLUME_BUSY, &op->volume->flags);
200 if (op->flags & AFS_OPERATION_NO_VSLEEP) {
201 op->error = -EADV;
204 if (op->flags & AFS_OPERATION_CUR_ONLY) {
205 op->error = -ESTALE;
216 if (op->flags & AFS_OPERATION_NO_VSLEEP) {
217 op->error = -EBUSY;
220 if (!test_and_set_bit(AFS_VOLUME_BUSY, &op->volume->flags)) {
221 afs_busy(op->volume, op->ac.abort_code);
222 clear_bit(AFS_VOLUME_OFFLINE, &op->volume->flags);
225 if (op->flags & AFS_OPERATION_CUR_ONLY) {
226 if (!afs_sleep_and_retry(op))
234 op->flags |= AFS_OPERATION_VBUSY;
245 if (op->flags & AFS_OPERATION_VMOVED) {
246 op->error = -EREMOTEIO;
249 op->flags |= AFS_OPERATION_VMOVED;
251 set_bit(AFS_VOLUME_WAIT, &op->volume->flags);
252 set_bit(AFS_VOLUME_NEEDS_UPDATE, &op->volume->flags);
253 error = afs_check_volume_status(op->volume, op);
266 if (rcu_access_pointer(op->volume->servers) == op->server_list) {
267 op->error = -ENOMEDIUM;
274 clear_bit(AFS_VOLUME_OFFLINE, &op->volume->flags);
275 clear_bit(AFS_VOLUME_BUSY, &op->volume->flags);
276 op->error = afs_abort_to_error(op->ac.abort_code);
282 if (op->error != -EDESTADDRREQ)
292 op->error = error;
296 pr_warn("kAFS: Peer reset %s (op=%x)\n",
297 op->type ? op->type->name : "???", op->debug_id);
301 op->error = error;
307 afs_end_cursor(&op->ac);
308 op->server = NULL;
309 afs_put_serverlist(op->net, op->server_list);
310 op->server_list = NULL;
316 error = afs_check_volume_status(op->volume, op);
320 if (!afs_start_fs_iteration(op, vnode))
323 _debug("__ VOL %llx __", op->volume->vid);
326 _debug("pick [%lx]", op->untried);
328 error = afs_wait_for_fs_probes(op->server_list, op->untried);
335 if (op->server) {
336 _debug("server %u", op->index);
337 if (test_bit(op->index, &op->untried))
339 op->server = NULL;
343 op->index = -1;
345 for (i = 0; i < op->server_list->nr_servers; i++) {
346 struct afs_server *s = op->server_list->servers[i].server;
348 if (!test_bit(i, &op->untried) ||
352 op->index = i;
357 if (op->index == -1)
361 _debug("use %d", op->index);
362 __clear_bit(op->index, &op->untried);
368 ASSERTCMP(op->ac.alist, ==, NULL);
369 server = op->server_list->servers[op->index].server;
371 if (!afs_check_server_record(op, server))
376 op->flags |= AFS_OPERATION_RETRY_SERVER;
377 op->server = server;
393 memset(&op->ac, 0, sizeof(op->ac));
395 if (!op->ac.alist)
396 op->ac.alist = alist;
400 op->ac.index = -1;
403 ASSERT(op->ac.alist);
407 if (!afs_iterate_addresses(&op->ac))
411 op->index, op->ac.index, op->ac.alist->nr_addrs,
412 &op->ac.alist->addrs[op->ac.index].transport);
421 afs_probe_fileserver(op->net, op->server);
422 if (op->flags & AFS_OPERATION_RETRY_SERVER) {
423 alist = op->ac.alist;
425 op->server, !(op->flags & AFS_OPERATION_UNINTR));
428 op->flags &= ~AFS_OPERATION_RETRY_SERVER;
440 afs_end_cursor(&op->ac);
447 if (op->flags & AFS_OPERATION_VBUSY)
452 for (i = 0; i < op->server_list->nr_servers; i++) {
453 struct afs_server *s = op->server_list->servers[i].server;
462 op->error = error;
464 op->flags |= AFS_OPERATION_STOP;
465 afs_end_cursor(&op->ac);
466 _leave(" = f [failed %d]", op->error);
473 void afs_dump_edestaddrreq(const struct afs_operation *op)
486 op->file[0].cb_break_before,
487 op->file[1].cb_break_before, op->flags, op->error);
489 op->untried, op->index, op->nr_iterations);
491 if (op->server_list) {
492 const struct afs_server_list *sl = op->server_list;
508 if (a == op->ac.alist)
515 op->ac.tried, op->ac.index, op->ac.abort_code, op->ac.error,
516 op->ac.responded, op->ac.nr_iterations);