From: Dave Chinner <david@fromorbit.com>
To: Amit Sahrawat <amit.sahrawat83@gmail.com>
Cc: Adil Mujeeb <mujeeb.adil@gmail.com>, xfs@oss.sgi.com
Subject: Re: Cyclic Code?
Date: Tue, 10 Jan 2012 08:39:25 +1100 [thread overview]
Message-ID: <20120109213925.GF4198@dastard> (raw)
In-Reply-To: <CADDb1s38ts-NAhzqyt2ZiN8m6mBVzS97uACb0XVKEKrKmV=YJA@mail.gmail.com>
On Mon, Jan 09, 2012 at 11:10:30PM +0530, Amit Sahrawat wrote:
> On Mon, Jan 9, 2012 at 12:22 PM, Adil Mujeeb <mujeeb.adil@gmail.com> wrote:
> > Hi list,
> >
> > i am new to XFS.
> >
> > I was going through XFS code (2.4 based) for study purpose. Its old but
> > assuming its bit simple as compare to latest one. Moreover the XFS code /
> > design structure documents available on the internet is 2.4 based.
> May be if you switch to a version around 2.6.20 nearabout - it will
> make it easier to understand the code. Prior to that the complete XFS
> source code seemed like traversing through a lot of macros... I
> started with 2.6.18 and it was really hard to understand from that
> version...
I'd recommend starting with the current top of tree code - it is
much, much cleaner that the code base even from 2.6.20. Remember, 2.6.20
was released almost 5 years ago (Feb 4 2007), and there's been a
*lot* of cleanup work done since then....
> > The following code snippet is not clear to me (seems cyclic):
> >
> > ---------
> > ...
> > ...
> > #define XFS_IFORK_NEXTENTS(ip,w) xfs_ifork_nextents(ip,w)
> > ...
> > xfs_ifork_nextents(xfs_inode_t *ip, int w)
> > {
> > return XFS_IFORK_NEXTENTS(ip, w);
> > }
> I guess you missed something while reading the code.... I tried to
> look at the repositry.. this is how the code looks...
> #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IFORK_NEXTENTS)
> int xfs_ifork_nextents(xfs_inode_t *ip, int w);
> #define XFS_IFORK_NEXTENTS(ip,w) xfs_ifork_nextents(ip,w)
> #else
> #define XFS_IFORK_NEXTENTS(ip,w) XFS_CFORK_NEXTENTS(&ip->i_d, w)
> #endif
> ....
> #define XFS_CFORK_NEXTENTS(dcp,w) \
> ((w) == XFS_DATA_FORK ? (dcp)->di_nextents : (dcp)->di_anextents)
Yup, that XFS_WANT_FUNCS crap was for debugging the macros because
they were too complex to debug in line. That went long ago.
FYI, macros were very popular in Irix code - desite SGI having an
awesome compiler, the SGI kernel engineers believed that function
calls were just too expensive to call and so macros that expanded
out to 300 lines of code were common. Hence the need to have some
way of debugging them.
Hell, I know one engineer used to compile the code and then
disassemble in the debugger on the running machine because that was
the *simplest way* to work out what code the macros actually
compiled in. :-O
I'm glad we've got rid of most of the macro-instead-of-function
usage now...
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2012-01-09 21:39 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-09 6:52 Cyclic Code? Adil Mujeeb
2012-01-09 17:40 ` Amit Sahrawat
2012-01-09 21:39 ` Dave Chinner [this message]
2012-01-10 6:55 ` Adil Mujeeb
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=20120109213925.GF4198@dastard \
--to=david@fromorbit.com \
--cc=amit.sahrawat83@gmail.com \
--cc=mujeeb.adil@gmail.com \
--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