public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Eric Sandeen <sandeen@sandeen.net>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 10/55] libxfs: sync dir2 kernel differences
Date: Wed, 18 Sep 2013 15:03:10 +1000	[thread overview]
Message-ID: <20130918050310.GQ19103@dastard> (raw)
In-Reply-To: <20130918033645.GN19103@dastard>

On Wed, Sep 18, 2013 at 01:36:45PM +1000, Dave Chinner wrote:
> On Tue, Sep 17, 2013 at 10:14:10AM -0500, Eric Sandeen wrote:
> > On 9/4/13 5:05 PM, Dave Chinner wrote:
> > > From: Dave Chinner <dchinner@redhat.com>
> > > 
> > > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > > ---
> > >  libxfs/xfs_dir2.c      | 45 +++++++++++++++++++++++++++++++++++++++++++++
> > >  libxfs/xfs_dir2_data.c | 20 ++++++++++----------
> > >  libxfs/xfs_dir2_leaf.c |  4 ++--
> > >  libxfs/xfs_dir2_node.c | 26 ++++++++++++--------------
> > >  4 files changed, 69 insertions(+), 26 deletions(-)
> > > 
> > > diff --git a/libxfs/xfs_dir2.c b/libxfs/xfs_dir2.c
> > > index 6a4027f..830fe3e 100644
> > > --- a/libxfs/xfs_dir2.c
> > > +++ b/libxfs/xfs_dir2.c
> > > @@ -392,6 +392,51 @@ xfs_dir_replace(
> > >  }
> > >  
> > >  /*
> > > + * See if this entry can be added to the directory without allocating space.
> > > + * First checks that the caller couldn't reserve enough space (resblks = 0).
> > > + */
> > > +int
> > > +xfs_dir_canenter(
> > 
> > Retroactive, post-merge question.  :)  This function isn't used in userspace,
> > AFAICT.  What's the intended libxfs philosophy - keep files as identical to
> > kernelspace as possible, used code or not, or remove things which aren't used
> > in userspace?
> 
> A bit of history here. Going back to when the GPL'd version of
> xfscmds was created, the intention was that libxfs would be a
> minimal, cut down version of the kernel code that only had the exact
> functionality that the userspace tools required. That lasted while
> Nathan was the maintainer - most of the changes were being made by
> SGI, and were being made to both Irix and GPL'd code bases and so
> there was significant amounts of code shuffling internally and so a
> minimal implementation made sense.
> 
> With the demise of Irix, there was much less code shuffling going
> on, and all development work moved over to Linux, leading to the
> situation where there was only one kernel code base to maintain, and
> one userspace to maintain.
> 
> When Nathan left, regular updates to the libxfs code pretty much
> stopped - there weren't a lot of people that grokked the libxfs
> codebase and so it was mostly left alone. There was a major update
> for ~2.9.13 with all the xfs repair work that was done back in 2008
> done by Barry Naujok, and since then there's only been sporadic,
> massive kernel code syncs that have involved diffs > +/-10000 lines
> that are impossible to review.
> 
> So, come the CRC work, another major sync was needed, and I decided
> to make such sycnhronisation work easy in a way that Christoph had
> mentioned a few times over the past couple of years. That is, libxfs
> basically becomes a shared copy of the code with minimal differences
> and we separate all the kernel code out into kernel-only and
> shared-libxfs code.
> 
> That's where we are now - with almost all the libxfs code synced in
> user and kernel space.
> 
> Yes, this means that there are some dead functions in userspace, but
> it means that it is trivial to spot differences between the user and
> kernel code, and that is far more important from a maintenance
> perspective that having a bit of dead code lying around.
> 
> Once this started to fall into place, I started finding lots of
> little differences that needed fixing that were hidden by the
> verbosity of previous sync efforts. Indeed, this command points out
> interesting little things like:
> 
> $ for f in `ls libxfs |grep xfs_ |grep -v trace`; do diff -u
> libxfs/$f ../kern/xfsdev/fs/xfs/$f; done |less
> ....
> @@ -612,6 +635,7 @@
>         xfs_trans_log_buf(tp, bp, 0, size - 1);
>  
>         bp->b_ops = blk1->bp->b_ops;
> +       xfs_trans_buf_copy_type(bp, blk1->bp);
>         blk1->bp = bp;
>         blk1->blkno = blkno;
>  
> Which indicate that some bug fixes from teh kernel code haven't been
> brought across.
> 
> There's still more work to do - xfs-rtalloc.c still needs splitting,
> and xfs_btree.c has some readahead differences that need to be
> sorted, but overall the idea is that libxfs and the include/xfs_*h
> files are as close to identical to the kernel code as possible....
> 
> The other advantage of this is that patches made to the kernel apply
> with a minimum of massaging to userspace, which makes keeping the
> userspace code up to data a lot easier.
> 
> I've mentioned it before - I'd like to end up with a fs/xfs/libxfs/
> directory in the kernel that is essentially identical in all ways to
> the userspace libxfs, so all we need to do is copy files to keep
> them in sync. We're not there yet, but it's definitely getting
> closer to being a reality. If we get to this stage, then getting
> userspace support up and running for new features will not require
> any kernel patch ftuzing at all - just copy the files, and start
> working on tool support...

>From the horse's mouth:

$ $ head -44 libxfs/xfs.h |tail -27

/*
 * This header is effectively a "namespace multiplexor" for the
 * user level XFS code.  It provides all of the necessary stuff
 * such that we can build some parts of the XFS kernel code in
 * user space in a controlled fashion, and translates the names
 * used in the kernel into the names which libxfs is going to
 * make available to user tools.
 *
 * It should only ever be #include'd by XFS "kernel" code being
 * compiled in user space.
 *
 * Our goals here are to...
 *      o  "share" large amounts of complex code between user and
 *         kernel space;
 *      o  shield the user tools from changes in the bleeding
 *         edge kernel code, merging source changes when
 *         convenient and not immediately (no symlinks);
 *      o  i.e. be able to merge changes to the kernel source back
 *         into the affected user tools in a controlled fashion;
 *      o  provide a _minimalist_ life-support system for kernel
 *         code in user land, not the "everything + the kitchen
 *         sink" model which libsim had mutated into;
 *      o  allow the kernel code to be completely free of code
 *         specifically there to support the user level build.
 */

$

FYI, the symlink model was what the irix source tree used to link
the XFS kernel code to the xfscmds userspace source tree.
Libsim was the "ifdef SIM" hackery all through the Irix
kernel code used to exclude kernel-only code from the xfscmds
build....

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2013-09-18  5:03 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-04 22:05 [PATCH 00/55] xfsprogs: bring code up to date with kernel Dave Chinner
2013-09-04 22:05 ` [PATCH 01/55] xfsprogs: introduce xfs_icreate.h Dave Chinner
2013-09-05 14:35   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 02/55] xfsprogs: port inode create transaction changes Dave Chinner
2013-09-05 15:25   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 03/55] xfsprogs: teach logprint about icreate transaction Dave Chinner
2013-09-05 15:29   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 04/55] libxfs: fix directory/attribute format issues Dave Chinner
2013-09-05 15:36   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 05/55] libxfs: ensure btree root split sets blkno correctly Dave Chinner
2013-09-05 15:37   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 06/55] libxfs: fix byte swapping on constants Dave Chinner
2013-09-05 15:41   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 07/55] libxfs: sync xfs_da_btree.c Dave Chinner
2013-09-05 15:46   ` Mark Tinguely
2013-09-05 15:52   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 08/55] libxfs: update xfs_alloc to current kernel version Dave Chinner
2013-09-05 15:53   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 09/55] libxfs: sync attr code with kernel Dave Chinner
2013-09-05 15:59   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 10/55] libxfs: sync dir2 kernel differences Dave Chinner
2013-09-05 16:32   ` Mark Tinguely
2013-09-17 15:14   ` Eric Sandeen
2013-09-18  3:36     ` Dave Chinner
2013-09-18  5:03       ` Dave Chinner [this message]
2013-09-04 22:05 ` [PATCH 11/55] libxfs: sync xfs_ialloc.c to the kernel code Dave Chinner
2013-09-05 18:46   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 12/55] xfsprogs: define min/max once and use them everywhere Dave Chinner
2013-09-05 18:47   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 13/55] libxfs: fix compile warnings Dave Chinner
2013-09-05 18:50   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 14/55] xfs: remove local fork format handling from xfs_bmapi_write() Dave Chinner
2013-09-05 18:55   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 15/55] libxfs: local to remote format support of remote symlinks Dave Chinner
2013-09-05 18:56   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 16/55] xfs: separate out log format definitions Dave Chinner
2013-09-05 19:01   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 17/55] xfs: split out inode log item format definition Dave Chinner
2013-09-05 19:14   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 18/55] xfs: split out buf log item format definitions Dave Chinner
2013-09-05 19:18   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 19/55] xfs: split out inode log item format definition Dave Chinner
2013-09-05 19:20   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 20/55] xfs: separate dquot on disk format definitions out of xfs_quota.h Dave Chinner
2013-09-05 19:33   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 21/55] xfs: separate icreate log format definitions from xfs_icreate_item.h Dave Chinner
2013-09-05 21:12   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 22/55] xfs: split out on-disk transaction definitions Dave Chinner
2013-09-05 21:21   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 23/55] xfs: introduce xfs_rtalloc_defs.h Dave Chinner
2013-09-05 21:26   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 24/55] xfs: introduce xfs_quota_defs.h Dave Chinner
2013-09-05 21:29   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 25/55] libxfs: introduce xfs_trans_resv.c Dave Chinner
2013-09-05 21:45   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 26/55] libxfs: move transaction code to trans.c Dave Chinner
2013-09-05 21:51   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 27/55] xfs: move inode fork definitions to a new header file Dave Chinner
2013-09-05 21:55   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 28/55] xfs: move unrealted definitions out of xfs_inode.h Dave Chinner
2013-09-05 22:05   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 29/55] xfs: introduce xfs_inode_buf.c for inode buffer operations Dave Chinner
2013-09-05 22:27   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 30/55] xfs: split out the remote symlink handling Dave Chinner
2013-09-06 15:13   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 31/55] libxfs: switch over to xfs_sb.c and remove xfs_mount.c Dave Chinner
2013-09-06 18:15   ` Mark Tinguely
2013-09-06 21:40     ` Dave Chinner
2013-09-06 21:43       ` Mark Tinguely
2013-09-10  1:02         ` [PATCH 31/55 V2] " Dave Chinner
2013-09-10 14:11           ` Mark Tinguely
2013-09-10 21:32             ` [PATCH 31/55 V3] " Dave Chinner
2013-09-11 13:25               ` Mark Tinguely
2013-09-11 14:24                 ` Mark Tinguely
2013-09-13 14:17                   ` Mark Tinguely
2013-09-15  3:27                   ` Dave Chinner
2013-09-11 15:11                 ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 32/55] xfs: create xfs_bmap_util.[ch] Dave Chinner
2013-09-06 15:30   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 33/55] xfsprogs: sync minor kernel header differences Dave Chinner
2013-09-06 15:44   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 34/55] xfs: don't special case shared superblock mounts Dave Chinner
2013-09-06 15:48   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 35/55] xfs: move swap extent code to xfs_extent_ops Dave Chinner
2013-09-06 17:13   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 36/55] xfs: kill __KERNEL__ check for debug code in allocation code Dave Chinner
2013-09-06 17:20   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 37/55] xfs: remove __KERNEL__ from debug code Dave Chinner
2013-09-06 17:28   ` Mark Tinguely
2013-09-06 21:41     ` Dave Chinner
2013-09-06 21:42       ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 38/55] xfs: remove __KERNEL__ check from xfs_dir2_leaf.c Dave Chinner
2013-09-06 17:29   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 39/55] xfs: move kernel specific type definitions to xfs.h Dave Chinner
2013-09-06 17:31   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 40/55] xfs: make struct xfs_perag kernel only Dave Chinner
2013-09-06 18:06   ` Mark Tinguely
2013-09-06 21:50     ` Dave Chinner
2013-09-04 22:05 ` [PATCH 41/55] xfs: Introduce a new structure to hold transaction reservation items Dave Chinner
2013-09-06 18:20   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 42/55] xfs: Introduce tr_fsyncts to m_reservation Dave Chinner
2013-09-06 18:20   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 43/55] xfs: Make writeid transaction use tr_writeid Dave Chinner
2013-09-06 18:21   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 44/55] xfs: refactor xfs_trans_reserve() interface Dave Chinner
2013-09-06 18:21   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 45/55] xfs: Get rid of all XFS_XXX_LOG_RES() macro Dave Chinner
2013-09-06 18:22   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 46/55] xfs: Add xfs_log_rlimit.c Dave Chinner
2013-09-06 18:22   ` Mark Tinguely
2013-10-06 17:56   ` Eric Sandeen
2013-10-07  1:46     ` Eric Sandeen
2013-10-07 13:48       ` Mark Tinguely
2014-02-21 19:47         ` Eric Sandeen
2014-02-21 20:40           ` Mark Tinguely
2014-02-21 20:56             ` Eric Sandeen
2014-02-21 21:46               ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 47/55] xfs: Add read-only support for dirent filetype field Dave Chinner
2013-09-06 18:23   ` Mark Tinguely
2013-09-10 21:34   ` [PATCH 47/55 V2] " Dave Chinner
2013-09-04 22:05 ` [PATCH 48/55] xfs: Add write " Dave Chinner
2013-09-06 18:24   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 49/55] xfsprogs: add dtype support to mkfs and db Dave Chinner
2013-09-06 18:25   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 50/55] xfs: di_flushiter considered harmful Dave Chinner
2013-09-06 18:43   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 51/55] xfs: fix calculation of the number of node entries in a dir3 node Dave Chinner
2013-09-06 18:53   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 52/55] xfs: btree block LSN escaping to disk uninitialised Dave Chinner
2013-09-06 18:54   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 53/55] xfs: inode log reservations are too small Dave Chinner
2013-09-06 18:58   ` Mark Tinguely
2013-09-04 22:05 ` [PATCH 54/55] repair: fix segv on directory block read failure Dave Chinner
2013-09-04 23:33   ` Eric Sandeen
2013-09-04 22:05 ` [PATCH 55/55] xfsprogs: cleanup miscellaneous merge faults Dave Chinner
2013-09-06 19:03   ` Mark Tinguely

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=20130918050310.GQ19103@dastard \
    --to=david@fromorbit.com \
    --cc=sandeen@sandeen.net \
    --cc=xfs@oss.sgi.com \
    /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