diff mbox

DAX: use proper length when the range is not aligned to PAGE_SIZE

Message ID 1478287031-3303-1-git-send-email-bo.li.liu@oracle.com (mailing list archive)
State New, archived
Headers show

Commit Message

Liu Bo Nov. 4, 2016, 7:17 p.m. UTC
Currently if we write to [2k, 6k] where pos is 2k and end is 6k,
get_block() will be called twice, but we can save one get_block
by sending two blocks together to get_block.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
---
 fs/dax.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jan Kara Nov. 4, 2016, 9:48 p.m. UTC | #1
On Fri 04-11-16 12:17:11, Liu Bo wrote:
> Currently if we write to [2k, 6k] where pos is 2k and end is 6k,
> get_block() will be called twice, but we can save one get_block
> by sending two blocks together to get_block.
> 
> Signed-off-by: Liu Bo <bo.li.liu@oracle.com>

Thanks for the patch but this code is going to be ripped out soon (in the
next merge window) in favor of iomap DAX implementation. So there's not
much point in fixing this...

								Honza

> ---
>  fs/dax.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/dax.c b/fs/dax.c
> index 53eb6a0..8d4bd5f 100644
> --- a/fs/dax.c
> +++ b/fs/dax.c
> @@ -172,7 +172,7 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter,
>  			long size;
>  
>  			if (pos == bh_max) {
> -				bh->b_size = PAGE_ALIGN(end - pos);
> +				bh->b_size = PAGE_ALIGN(end - (pos - first));
>  				bh->b_state = 0;
>  				rc = get_block(inode, block, bh, rw == WRITE);
>  				if (rc)
> -- 
> 2.5.5
>
Liu Bo Nov. 4, 2016, 11:55 p.m. UTC | #2
On Fri, Nov 04, 2016 at 10:48:22PM +0100, Jan Kara wrote:
> On Fri 04-11-16 12:17:11, Liu Bo wrote:
> > Currently if we write to [2k, 6k] where pos is 2k and end is 6k,
> > get_block() will be called twice, but we can save one get_block
> > by sending two blocks together to get_block.
> > 
> > Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
> 
> Thanks for the patch but this code is going to be ripped out soon (in the
> next merge window) in favor of iomap DAX implementation. So there's not
> much point in fixing this...

I see, thanks for the explanation.

Thanks,

-liubo
> 
> 								Honza
> 
> > ---
> >  fs/dax.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/fs/dax.c b/fs/dax.c
> > index 53eb6a0..8d4bd5f 100644
> > --- a/fs/dax.c
> > +++ b/fs/dax.c
> > @@ -172,7 +172,7 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter,
> >  			long size;
> >  
> >  			if (pos == bh_max) {
> > -				bh->b_size = PAGE_ALIGN(end - pos);
> > +				bh->b_size = PAGE_ALIGN(end - (pos - first));
> >  				bh->b_state = 0;
> >  				rc = get_block(inode, block, bh, rw == WRITE);
> >  				if (rc)
> > -- 
> > 2.5.5
> > 
> -- 
> Jan Kara <jack@suse.com>
> SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/dax.c b/fs/dax.c
index 53eb6a0..8d4bd5f 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -172,7 +172,7 @@  static ssize_t dax_io(struct inode *inode, struct iov_iter *iter,
 			long size;
 
 			if (pos == bh_max) {
-				bh->b_size = PAGE_ALIGN(end - pos);
+				bh->b_size = PAGE_ALIGN(end - (pos - first));
 				bh->b_state = 0;
 				rc = get_block(inode, block, bh, rw == WRITE);
 				if (rc)