diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 9df1ab070fa541dcb4b3947eb6bac0de8580cf4b..b7c561ad38dd85d9333d015f0f8a11350aa341d9 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4277,6 +4277,12 @@ static int __ext4_get_inode_loc(struct super_block *sb, unsigned long ino,
 		goto has_buffer;
 
 	lock_buffer(bh);
+	if (ext4_buffer_uptodate(bh)) {
+		/* Someone brought it uptodate while we waited */
+		unlock_buffer(bh);
+		goto has_buffer;
+	}
+
 	/*
 	 * If we have all information of the inode in memory and this
 	 * is the only valid inode in the block, we need not read the