ext4: add mutex_is_locked() assertion to ext4_truncate()
authorTheodore Ts'o <tytso@mit.edu>
Thu, 4 Apr 2013 01:58:52 +0000 (21:58 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 4 Apr 2013 01:58:52 +0000 (21:58 -0400)
[ Added fixup from Lukáš Czerner which only checks the assertion when
  the inode is not new and is not being freed. ]

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/inode.c

index 49c80e4ac5ac2b8e2d583ead48f624e799b7fcf0..56ebd662033b20b9606d4e0098ac35e241d5fe31 100644 (file)
@@ -3788,6 +3788,13 @@ void ext4_truncate(struct inode *inode)
        struct address_space *mapping = inode->i_mapping;
        loff_t page_len;
 
+       /*
+        * There is a possibility that we're either freeing the inode
+        * or it completely new indode. In those cases we might not
+        * have i_mutex locked because it's not necessary.
+        */
+       if (!(inode->i_state & (I_NEW|I_FREEING)))
+               WARN_ON(!mutex_is_locked(&inode->i_mutex));
        trace_ext4_truncate_enter(inode);
 
        if (!ext4_can_truncate(inode))