linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] iomap: Add inline data support to iomap_readpage_actor
       [not found] <20180615130209.1970-2-hch@lst.de>
@ 2018-06-29 14:44 ` Andreas Gruenbacher
  2018-07-01  6:21   ` Christoph Hellwig
  0 siblings, 1 reply; 5+ messages in thread
From: Andreas Gruenbacher @ 2018-06-29 14:44 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: cluster-devel, linux-fsdevel, linux-ext4

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
---
 fs/iomap.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/fs/iomap.c b/fs/iomap.c
index 4f10c6b..d393bb0 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -155,6 +155,12 @@ struct iomap_readpage_ctx {
 	bool is_contig = false;
 	sector_t sector;
 
+	if (iomap->type == IOMAP_INLINE) {
+		iomap_read_inline_data(inode, page, iomap);
+		plen = PAGE_SIZE - poff;
+		goto done;
+	}
+
 	/* we don't support blocksize < PAGE_SIZE quite yet. */
 	WARN_ON_ONCE(pos != page_offset(page));
 	WARN_ON_ONCE(plen != PAGE_SIZE);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] iomap: Add inline data support to iomap_readpage_actor
  2018-06-29 14:44 ` [PATCH] iomap: Add inline data support to iomap_readpage_actor Andreas Gruenbacher
@ 2018-07-01  6:21   ` Christoph Hellwig
  2018-07-01 21:43     ` Andreas Gruenbacher
  0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2018-07-01  6:21 UTC (permalink / raw)
  To: Andreas Gruenbacher
  Cc: cluster-devel, linux-fsdevel, linux-ext4, Christoph Hellwig

Looks sensible, although I think it could use some more sanity checking
and a changelog.  Does the version below work for you?

---
>From e4603b7acde9b77e7a4aad6038c7ac42ca35772d Mon Sep 17 00:00:00 2001
From: Andreas Gruenbacher <agruenba@redhat.com>
Date: Fri, 29 Jun 2018 16:44:44 +0200
Subject: iomap: Add inline data support to iomap_readpage_actor

Just copy the inline data into the page using the existing helper.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/iomap.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/fs/iomap.c b/fs/iomap.c
index 4d8ff0f5ecc9..966ffad9706a 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -155,6 +155,13 @@ iomap_readpage_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
 	bool is_contig = false;
 	sector_t sector;
 
+	if (iomap->type == IOMAP_INLINE) {
+		WARN_ON_ONCE(poff);
+		WARN_ON_ONCE(plen != PAGE_SIZE);
+		iomap_read_inline_data(inode, page, iomap);
+		return PAGE_SIZE;
+	}
+
 	/* we don't support blocksize < PAGE_SIZE quite yet. */
 	WARN_ON_ONCE(pos != page_offset(page));
 	WARN_ON_ONCE(plen != PAGE_SIZE);
-- 
2.18.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] iomap: Add inline data support to iomap_readpage_actor
  2018-07-01  6:21   ` Christoph Hellwig
@ 2018-07-01 21:43     ` Andreas Gruenbacher
  2018-07-02 12:52       ` Christoph Hellwig
  0 siblings, 1 reply; 5+ messages in thread
From: Andreas Gruenbacher @ 2018-07-01 21:43 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: cluster-devel, linux-fsdevel, linux-ext4

On 1 July 2018 at 08:21, Christoph Hellwig <hch@lst.de> wrote:
> Looks sensible, although I think it could use some more sanity checking
> and a changelog.  Does the version below work for you?

Almost.

> ---
> From e4603b7acde9b77e7a4aad6038c7ac42ca35772d Mon Sep 17 00:00:00 2001
> From: Andreas Gruenbacher <agruenba@redhat.com>
> Date: Fri, 29 Jun 2018 16:44:44 +0200
> Subject: iomap: Add inline data support to iomap_readpage_actor
>
> Just copy the inline data into the page using the existing helper.
>
> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  fs/iomap.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/fs/iomap.c b/fs/iomap.c
> index 4d8ff0f5ecc9..966ffad9706a 100644
> --- a/fs/iomap.c
> +++ b/fs/iomap.c
> @@ -155,6 +155,13 @@ iomap_readpage_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
>         bool is_contig = false;
>         sector_t sector;
>
> +       if (iomap->type == IOMAP_INLINE) {
> +               WARN_ON_ONCE(poff);

This is ok.

> +               WARN_ON_ONCE(plen != PAGE_SIZE);

Inline mappings only extend to the end of the file (iomap->offset == 0
&& iomap->length == inode->i_size), so length and plen will be
inode->i_size here. This assertion should just be removed.

> +               iomap_read_inline_data(inode, page, iomap);
> +               return PAGE_SIZE;
> +       }
> +
>         /* we don't support blocksize < PAGE_SIZE quite yet. */
>         WARN_ON_ONCE(pos != page_offset(page));
>         WARN_ON_ONCE(plen != PAGE_SIZE);
> --
> 2.18.0
>

Thanks,
Andreas

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] iomap: Add inline data support to iomap_readpage_actor
  2018-07-01 21:43     ` Andreas Gruenbacher
@ 2018-07-02 12:52       ` Christoph Hellwig
  2018-07-02 15:05         ` Andreas Gruenbacher
  0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2018-07-02 12:52 UTC (permalink / raw)
  To: Andreas Gruenbacher
  Cc: cluster-devel, linux-fsdevel, linux-ext4, Christoph Hellwig

On Sun, Jul 01, 2018 at 11:43:43PM +0200, Andreas Gruenbacher wrote:
> > +               WARN_ON_ONCE(plen != PAGE_SIZE);
> 
> Inline mappings only extend to the end of the file (iomap->offset == 0
> && iomap->length == inode->i_size), so length and plen will be
> inode->i_size here. This assertion should just be removed.

But we should generally still return PAGE_SIZE from iomap_begin
because we cover the whole page and zero the rest, don't we?

Either way, I can remove the assert from now.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] iomap: Add inline data support to iomap_readpage_actor
  2018-07-02 12:52       ` Christoph Hellwig
@ 2018-07-02 15:05         ` Andreas Gruenbacher
  0 siblings, 0 replies; 5+ messages in thread
From: Andreas Gruenbacher @ 2018-07-02 15:05 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: cluster-devel, linux-fsdevel, linux-ext4

On 2 July 2018 at 14:52, Christoph Hellwig <hch@lst.de> wrote:
> On Sun, Jul 01, 2018 at 11:43:43PM +0200, Andreas Gruenbacher wrote:
>> > +               WARN_ON_ONCE(plen != PAGE_SIZE);
>>
>> Inline mappings only extend to the end of the file (iomap->offset == 0
>> && iomap->length == inode->i_size), so length and plen will be
>> inode->i_size here. This assertion should just be removed.
>
> But we should generally still return PAGE_SIZE from iomap_begin
> because we cover the whole page and zero the rest, don't we?

iomap_begin doesn't know when it's being called for readpage. Direct
I/O reads don't pad to the page size,  for example, so handling the
padding in the caller seems reasonable. If you compare with regular
block-based mappings, those are also block but not necessarily page
aligned.

For stuffed files, iomap_begin will return an IOMAP_HOLE mapping for
offsets beyond the end of the file, so iterating beyond the end of the
file is fine (even if readpage doesn't do that).

> Either way, I can remove the assert from now.

Yes, thanks.

Andreas

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-07-02 15:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20180615130209.1970-2-hch@lst.de>
2018-06-29 14:44 ` [PATCH] iomap: Add inline data support to iomap_readpage_actor Andreas Gruenbacher
2018-07-01  6:21   ` Christoph Hellwig
2018-07-01 21:43     ` Andreas Gruenbacher
2018-07-02 12:52       ` Christoph Hellwig
2018-07-02 15:05         ` Andreas Gruenbacher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).