From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joel Becker Subject: Re: [RFC PATCH 3/3] ocfs2: only return the shared extents if FIEMAP_FLAG_COW is set Date: Sat, 2 Mar 2013 02:47:46 -0800 Message-ID: <20130302104742.GD22177@localhost> References: <51244A21.5090601@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: ocfs2-devel@oss.oracle.com, "linux-fsdevel@vger.kernel.org" , "viro@zeniv.linux.org.uk" , Andreas Dilger , Dave Chinner , Mark Fasheh , Jan Kara , Chris Mason , Christoph Hellwig To: Jeff Liu Return-path: Received: from zeniv.linux.org.uk ([195.92.253.2]:55818 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751486Ab3CBKrw (ORCPT ); Sat, 2 Mar 2013 05:47:52 -0500 Content-Disposition: inline In-Reply-To: <51244A21.5090601@oracle.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Discussing this on another thread, but officially I'll NAK this here. Joel On Wed, Feb 20, 2013 at 11:59:29AM +0800, Jeff Liu wrote: > Teach OCFS2 to be aware of FIEMAP_FLAG_COW - fill the extent map array with > those extents that have OCFS2_EXT_REFCOUNTED in rec.re_flags. > > Signed-off-by: Jie Liu > Cc: Alexander Viro > Cc: Andreas Dilger > Cc: Dave Chinner > Cc: Mark Fasheh > Cc: Joel Becker > Cc: Jan Kara > Cc: Chris Mason > Cc: Christoph Hellwig > > --- > fs/ocfs2/extent_map.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c > index f487aa3..1eaae3f 100644 > --- a/fs/ocfs2/extent_map.c > +++ b/fs/ocfs2/extent_map.c > @@ -745,7 +745,7 @@ static int ocfs2_fiemap_inline(struct inode *inode, struct buffer_head *di_bh, > return 0; > } > > -#define OCFS2_FIEMAP_FLAGS (FIEMAP_FLAG_SYNC) > +#define OCFS2_FIEMAP_FLAGS (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_COW) > > int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, > u64 map_start, u64 map_len) > @@ -810,11 +810,20 @@ int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, > phys_bytes = le64_to_cpu(rec.e_blkno) << osb->sb->s_blocksize_bits; > virt_bytes = (u64)le32_to_cpu(rec.e_cpos) << osb->s_clustersize_bits; > > + /* > + * If the FIEMAP_FLAG_COW is set, fill the fiemap_extent array > + * with the extents in copy-on-write state only. > + */ > + if ((fieinfo->fi_flags & FIEMAP_FLAG_COW) && > + !(fe_flags & FIEMAP_EXTENT_SHARED)) > + goto next_map; > + > ret = fiemap_fill_next_extent(fieinfo, virt_bytes, phys_bytes, > len_bytes, fe_flags); > if (ret) > break; > > +next_map: > cpos = le32_to_cpu(rec.e_cpos)+ le16_to_cpu(rec.e_leaf_clusters); > } > > -- > 1.7.9.5 -- Life's Little Instruction Book #306 "Take a nap on Sunday afternoons." http://www.jlbec.org/ jlbec@evilplan.org