Showing error 1352

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: fs/jfs/namei.c
Line in file: 1177
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-05-21 20:30:05 UTC


Source:

1147        mutex_lock_nested(&JFS_IP(new_dir)->commit_mutex, COMMIT_MUTEX_PARENT);
1148        mutex_lock_nested(&JFS_IP(old_ip)->commit_mutex, COMMIT_MUTEX_CHILD);
1149        if (old_dir != new_dir)
1150                mutex_lock_nested(&JFS_IP(old_dir)->commit_mutex,
1151                                  COMMIT_MUTEX_SECOND_PARENT);
1152
1153        if (new_ip) {
1154                mutex_lock_nested(&JFS_IP(new_ip)->commit_mutex,
1155                                  COMMIT_MUTEX_VICTIM);
1156                /*
1157                 * Change existing directory entry to new inode number
1158                 */
1159                ino = new_ip->i_ino;
1160                rc = dtModify(tid, new_dir, &new_dname, &ino,
1161                              old_ip->i_ino, JFS_RENAME);
1162                if (rc)
1163                        goto out4;
1164                drop_nlink(new_ip);
1165                if (S_ISDIR(new_ip->i_mode)) {
1166                        drop_nlink(new_ip);
1167                        if (new_ip->i_nlink) {
1168                                mutex_unlock(&JFS_IP(new_ip)->commit_mutex);
1169                                if (old_dir != new_dir)
1170                                        mutex_unlock(&JFS_IP(old_dir)->commit_mutex);
1171                                mutex_unlock(&JFS_IP(old_ip)->commit_mutex);
1172                                mutex_unlock(&JFS_IP(new_dir)->commit_mutex);
1173                                if (!S_ISDIR(old_ip->i_mode) && new_ip)
1174                                        IWRITE_UNLOCK(new_ip);
1175                                jfs_error(new_ip->i_sb,
1176                                          "jfs_rename: new_ip->i_nlink != 0");
1177                                return -EIO;
1178                        }
1179                        tblk = tid_to_tblock(tid);
1180                        tblk->xflag |= COMMIT_DELETE;
1181                        tblk->u.ip = new_ip;
1182                } else if (new_ip->i_nlink == 0) {
1183                        assert(!test_cflag(COMMIT_Nolink, new_ip));
1184                        /* free block resources */
1185                        if ((new_size = commitZeroLink(tid, new_ip)) < 0) {
1186                                txAbort(tid, 1);        /* Marks FS Dirty */
1187                                rc = new_size;
Show full sources