On Fri, Jan 15, 2010 at 02:30:11PM -0500, Theodore Ts'o wrote: > diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h > index 05eca81..dd58020 100644 > --- a/fs/ext4/ext4_jbd2.h > +++ b/fs/ext4/ext4_jbd2.h > @@ -304,4 +304,28 @@ static inline int ext4_should_writeback_data(struct inode *inode) > return 0; > } > > +/* > + * This function controls whether or not we should try to go down the > + * dioread_nolock code paths, which makes it safe to avoid taking > + * i_mutex for direct I/O reads. This only works for extent-based > + * files, and it doesn't work for nobh or if data journaling is > + * enabled, since the dioread_nolock code uses b_private to pass > + * information back to the I/O completion handler, and this conflicts > + * with the jbd's use of b_private. > + */ > +static inline int ext4_should_dioread_nolock(struct inode *inode) > +{ > + if (!test_opt(inode->i_sb, DIOREAD_NOLOCK)) > + return 0; > + if (test_opt(inode->i_sb, NOBH)) > + return 0; > + if (!S_ISREG(inode->i_mode)) > + return 0; > + if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) Oops, this was an embarassing typo. This should have been: + if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) Thanks to Jiaying for pointing this out. - Ted -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html