Showing error 1709

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: fs/xfs/xfs_vfsops.c
Line in file: 570
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-10 15:16:58 UTC


Source:

540                         * is already being flushed so don't bother waiting.
541                         *
542                         * If we can lock it then do a delwri flush so we can
543                         * combine multiple inode flushes in each disk write.
544                         */
545                        } else if (xfs_iflock_nowait(ip)) {
546                                error = xfs_iflush(ip, XFS_IFLUSH_DELWRI);
547                        } else if (bypassed) {
548                                (*bypassed)++;
549                        }
550                }
551
552                if (lock_flags != 0) {
553                        xfs_iunlock(ip, lock_flags);
554                }
555
556                if (vnode_refed) {
557                        /*
558                         * If we had to take a reference on the vnode
559                         * above, then wait until after we've unlocked
560                         * the inode to release the reference.  This is
561                         * because we can be already holding the inode
562                         * lock when IRELE() calls xfs_inactive().
563                         *
564                         * Make sure to drop the mount lock before calling
565                         * IRELE() so that we don't trip over ourselves if
566                         * we have to go for the mount lock again in the
567                         * inactive code.
568                         */
569                        if (mount_locked) {
570                                IPOINTER_INSERT(ip, mp);
571                        }
572
573                        IRELE(ip);
574
575                        vnode_refed = B_FALSE;
576                }
577
578                if (error) {
579                        last_error = error;
580                }
Show full sources