On Tue 01-08-17 16:24:30, Mimi Zohar wrote: > From: Christoph Hellwig <hch@xxxxxx> > > Add a new ->integrity_read file operation to read data for integrity > hash collection. This is defined to be equivalent to ->read_iter, > except that it will be called with the i_rwsem held exclusively. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Cc: Matthew Garrett <matthew.garrett@xxxxxxxxxx> > Cc: Jan Kara <jack@xxxxxxxx> > Cc: "Theodore Ts'o" <tytso@xxxxxxx> > Cc: Andreas Dilger <adilger.kernel@xxxxxxxxx> > Cc: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> > Cc: Chao Yu <yuchao0@xxxxxxxxxx> > Cc: Steven Whitehouse <swhiteho@xxxxxxxxxx> > Cc: Bob Peterson <rpeterso@xxxxxxxxxx> > Cc: David Woodhouse <dwmw2@xxxxxxxxxxxxx> > Cc: Dave Kleikamp <shaggy@xxxxxxxxxx> > Cc: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx> > Cc: Mark Fasheh <mfasheh@xxxxxxxxxxx> > Cc: Joel Becker <jlbec@xxxxxxxxxxxx> > Cc: Richard Weinberger <richard@xxxxxx> > Cc: "Darrick J. Wong" <darrick.wong@xxxxxxxxxx> > Cc: Hugh Dickins <hughd@xxxxxxxxxx> > Cc: Chris Mason <clm@xxxxxx> > Signed-off-by: Mimi Zohar <zohar@xxxxxxxxxxxxxxxxxx> ... > +static ssize_t ext4_file_integrity_read_iter(struct kiocb *iocb, > + struct iov_iter *to) > +{ > + struct inode *inode = file_inode(iocb->ki_filp); > + int o_direct = iocb->ki_flags & IOCB_DIRECT; > + > + lockdep_assert_held(&inode->i_rwsem); > + if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) > + return -EIO; > + > + if (!iov_iter_count(to)) > + return 0; /* skip atime */ > + > +#ifdef CONFIG_FS_DAX > + if (IS_DAX(inode)) > + return dax_iomap_rw(iocb, to, &ext4_iomap_ops); > +#endif > + if (o_direct) > + return -EINVAL; > + return generic_file_read_iter(iocb, to); > +} I have noticed this o_direct check - why is it only in ext4 and shouldn't rather higher layers make sure IOCB_DIRECT iocbs cannot reach .integrity_read() methods? Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR