On Thu, 2017-01-12 at 11:38 -0700, Toshi Kani wrote:
> DAX IO path does not support iostat, but its metadata IO path does.
> Therefore, iostat shows metadata IO statistics only, which has been
> confusing to users.
[]
> diff --git a/fs/dax.c b/fs/dax.c
[]
> @@ -1058,12 +1058,24 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter 
> *iter,
>  {
>       struct address_space *mapping = iocb->ki_filp->f_mapping;
>       struct inode *inode = mapping->host;
> +     struct gendisk *disk = inode->i_sb->s_bdev->bd_disk;
>       loff_t pos = iocb->ki_pos, ret = 0, done = 0;
>       unsigned flags = 0;
> +     unsigned long start = 0;
> +     int do_acct = blk_queue_io_stat(disk->queue);
>  
>       if (iov_iter_rw(iter) == WRITE)
>               flags |= IOMAP_WRITE;
>  
> +     if (do_acct) {
> +             sector_t sec = iov_iter_count(iter) >> 9;
> +
> +             start = jiffies;
> +             generic_start_io_acct(iov_iter_rw(iter),
> +                                   min_t(unsigned long, 1, sec),

I believe I mislead you with a thinko.

Your original code was
        (!sec) ? 1 : sec
and I suggested incorrectly using min_t

It should of course be max_t.  Sorry.

Also, as sec is now sector_t (u64), perhaps this
unsigned long cast is incorrect.


Reply via email to