In the branch named EXT3_IOC_SETFLAGS, inode->mutex was lock firstly, a handle with 1 journal-blocks was started consequently via ext3_journal_start().
i investigated the code of ext3_journal_start(), found that if there were no journal blocks left at it happens the process who call ext3_journal_start would be hung up unless some journal block were released.
i want to confirm whether such a situation would happen : there are no journal blocks left when ext3_journal_start() called and other processes could not release the journal blocks they currently holding for an unkown reason. so, when a process who called ext3_ioctl with command "EXT3_IOC_SETFLAGS" will be hung up even though the inode->i_mutex was of locked. in such a situation, the inode->i_mutex would not be released.