Showing error 607

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: fs/afs/flock.c
Line in file: 392
Project: Linux Kernel
Project version: 2.6.28
Confirmation: Fixed by f7c2df9b55212d5ec94169a4de11e44c683e0af4
Tools: Stanse (1.2)
Entered: 2011-11-07 22:20:57 UTC


Source:

362
363        /* we were interrupted, but someone may still be in the throes of
364         * giving us the lock */
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        /* we aren't going to get the lock, either because we're unwilling to
380         * wait, or because some signal happened */
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                        /* kick the next pending lock into having a go */
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        /* we've acquired a server lock, but it needs to be renewed after 5
397         * mins */
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
Show full sources