linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Hugh Dickins <hughd@google.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 3/14] tmpfs: take control of its truncate_range
Date: Sun, 5 Jun 2011 22:37:08 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LSU.2.00.1106052206260.17330@sister.anvils> (raw)
In-Reply-To: <20110603051609.GC16721@infradead.org>

On Fri, 3 Jun 2011, Christoph Hellwig wrote:
> On Wed, Jun 01, 2011 at 09:58:18AM -0700, Hugh Dickins wrote:
> 
> > Fine, I'll add tmpfs PUNCH_HOLE later on.  And wire up madvise MADV_REMOVE
> > to fallocate PUNCH_HOLE, yes?
> 
> Yeah.  One thing I've noticed is that the hole punching doesn't seem
> to do the unmap_mapping_range.  It might be worth to audit that from the
> VM point of view.

I'd noticed that recently too.

At first I was alarmed, but it's actually an inefficiency rather than
a danger: because at some stage a safety unmap_mapping_range() call has
been added into truncate_inode_page().  I don't know what case that was
originally for, but it will cover fallocate() for now.

This is a call to unmap_mapping_range() with 0 for the even_cows arg
i.e. it will not remove COWed copies of the file page from private
mappings.  I think that's good semantics for hole punching (and it's
difficult to enforce the alternative, because we've neither i_size nor
page lock to prevent races); but it does differ from the (odd) POSIX
truncation behaviour, to unmap even the private COWs.

What do you think?  If you think we should unmap COWs, then it ought
to be corrrected sooner.  Otherwise I was inclined not to rush (I'm
also wondering about cleancache in truncation: that should be another
mail thread, but might call for passing down a flag useful here too).

You might notice that the alternate hole-punching's vmtruncate_range()
is passing even_cows 1: doesn't matter in practice, since that one has
been restricted to operating on shared writable mappings.  Oh, I
suppose there could also be a parallel private writable mapping,
whose COWs would get unmapped.  Hmm, worth worrying about if we
choose the opposite with fallocate hole punching?

> 
> > Would you like me to remove the ->truncate_range method from
> > inode_operations completely?
> 
> Doing that would be nice.  Do we always have the required file struct
> for ->fallocate in the callers?

Good point, but yes, no problem.

I'm carrying on using ->truncate_range for the moment, partly because
I don't want to get diverted by testing the ->fallocate alternative yet,
but also because removing ->truncate_range now would force an immediate
change on drm/i915: better use shmem_truncate_range() for the transition.

Hugh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2011-06-06  5:37 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-31  0:33 [PATCH 0/14] mm: tmpfs and trunc changes, affecting drm Hugh Dickins
2011-05-31  0:35 ` [PATCH 1/14] mm: invalidate_mapping_pages flush cleancache Hugh Dickins
2011-05-31 15:49   ` Dan Magenheimer
2011-05-31 17:05     ` Hugh Dickins
2011-05-31 21:08       ` Chris Mason
2011-05-31 22:01         ` Hugh Dickins
2011-05-31  0:36 ` [PATCH 2/14] mm: move vmtruncate_range to truncate.c Hugh Dickins
2011-06-01  0:36   ` Christoph Hellwig
2011-05-31  0:39 ` [PATCH 3/14] tmpfs: take control of its truncate_range Hugh Dickins
2011-06-01  0:39   ` Christoph Hellwig
2011-06-01 16:58     ` Hugh Dickins
2011-06-03  5:16       ` Christoph Hellwig
2011-06-06  5:37         ` Hugh Dickins [this message]
2011-05-31  0:40 ` [PATCH 4/14] tmpfs: add shmem_read_mapping_page_gfp Hugh Dickins
2011-06-01  0:42   ` Christoph Hellwig
2011-06-01 17:02     ` Hugh Dickins
2011-05-31  0:42 ` [PATCH 5/14] drm/ttm: use shmem_read_mapping_page Hugh Dickins
2011-05-31  0:43 ` [PATCH 6/14] drm/i915: " Hugh Dickins
2011-05-31  0:45 ` [PATCH 7/14] drm/i915: adjust to new truncate_range Hugh Dickins
2011-06-01  0:43   ` Christoph Hellwig
2011-06-01 17:04     ` Hugh Dickins
2011-05-31  0:46 ` [PATCH 8/14] drm/i915: more struct_mutex locking Hugh Dickins
2011-05-31  0:48 ` [PATCH 9/14] mm: cleanup descriptions of filler arg Hugh Dickins
2011-05-31  0:49 ` [PATCH 10/14] mm: truncate functions are in truncate.c Hugh Dickins
2011-05-31  0:51 ` [PATCH 11/14] mm: tidy vmtruncate_range and related functions Hugh Dickins
2011-05-31  0:52 ` [PATCH 12/14] mm: consistent truncate and invalidate loops Hugh Dickins
2011-05-31  0:54 ` [PATCH 13/14] mm: pincer in truncate_inode_pages_range Hugh Dickins
2011-05-31  0:55 ` [PATCH 14/14] tmpfs: no need to use i_lock Hugh Dickins
2011-05-31 16:08   ` Tim Chen
2011-06-06  4:21 [PATCH 0/14] mm: tmpfs and trunc changes, affecting drm Hugh Dickins
2011-06-06  4:26 ` [PATCH 3/14] tmpfs: take control of its truncate_range Hugh Dickins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LSU.2.00.1106052206260.17330@sister.anvils \
    --to=hughd@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox