362
363
364
365 _debug("intr");
366 ASSERTCMP(ret, ==, -ERESTARTSYS);
367
368 spin_lock(&vnode->lock);
369 if (fl->fl_u.afs.state <= AFS_LOCK_GRANTED) {
370 ret = fl->fl_u.afs.state;
371 if (ret < 0) {
372 spin_unlock(&vnode->lock);
373 goto error;
374 }
375 goto given_lock;
376 }
377
378abort_attempt:
379
380
381 _debug("abort");
382 if (list_empty(&vnode->granted_locks) &&
383 vnode->pending_locks.next == &fl->fl_u.afs.link) {
384 if (vnode->pending_locks.prev != &fl->fl_u.afs.link) {
385
386 list_del_init(&fl->fl_u.afs.link);
387 afs_lock_may_be_available(vnode);
388 }
389 } else {
390 list_del_init(&fl->fl_u.afs.link);
391 }
392 spin_unlock(&vnode->lock);
393 goto error;
394
395acquired_server_lock:
396
397
398 spin_lock(&vnode->lock);
399 afs_schedule_lock_extension(vnode);
400 if (type == AFS_LOCK_READ)
401 set_bit(AFS_VNODE_READLOCKED, &vnode->flags);
402 else