Author: Martin Fouts Date: To: yaffs Subject: [Yaffs] Porting yaffs to NetBSD
Hi,
Longtime yaffers may remember me from a couple of years ago when I was
at Palmsource and briefly helped out with yaffs on linux.
I've moved on and am now developing NetBSD for smartphones at Danger but
have found my way back to yaffs, since NetBSD lacks a solution for NAND
filesystems.
Basically, I've written the NetBSD equivalent of the Linux VFS layer for
yaffs and am now in the process of debugging it. If we decide to go
with yaffs, rather than our port of Reliance/FlashFx from Datalight, we
will license yaffs direct from Aleph1, and use my layer instead of
modifying the Linux layer, since we can't use GPL-ed code in this
project.
But that's not why I'm here. ;)
We're using yaffsfg2k.c, yaffs_ecc.c, yaffsfs.c, yaffs_guts.c,
yaffs_packedtags1.c, yaffs_tagscompa.c, yaffs_tagsvalidity.c,
yaffs_nand.c, yaffs_checkptrw.c and yaffs_qsort.c. We'll probably
eventual drop yaffs_qsort.c We're also using devextras.h,
yaffs_checkptrw.h, yaffs_ecc.h, yaffs_guts.h, yaffs_nand.h,
yaffs_packedtags1.h, yaffs_packedtags2.h, yaffs_qsort.h,
yaffs_tagscompat.h, yaffs_tagsvalidity.h, yaffscfg.h, yaffsfs.h,
yaffsinterface.h and yportenv.h
In porting to NetBSD, we're finding three different kinds of bugs:
1) porting bugs -- which I'd like to discuss later in this email
2) 'real' bugs -- which I think we should treat the same way anyone
would: by presenting on this list
And
3) coverity bugs.
For those not familiar with it, Coverity is a static code analyser that
finds certain kinds of programming bugs. Our first run of Coverity on
our yaffs port to NetBSD found about 40 of these "bugs". Coverity, of
course finds bugs that aren't really bugs (false positives) and bugs
that are "can't happen" bugs that could happen if certain conditions
appear, but that those conditions can't happen in real life, in addition
to finding real bugs, so it is likely that there are far fewer than 40
of these coverity bugs in yaffs.
My guess is that we should treat coverity bugs like 'real' bugs. That
is, if we examine a coverity bug report and believe it to be a real bug
in yaffs, we'll just bring it up on the list. Does that seem
reasonable?
And now, the meat of the email
The biggest 'porting' bug we've found so far is that yaffs uses the
list_head macros from the kernel and contains its own version of those
functions in devextras.h. This conflicts with the way in which those
are macros are defined in NetBSD, since we need to include the NetBSD
kernel header that defines them, and so we get conflicting definitions.
The approach we've taken was to use a *big* hammer: we simply added
yaffs_ in front of all the macro names in the code we get from yaffs.
I'd like to suggest that change for the cvs tree, and contribute a patch
with it, or work to figure out another solution if you'd like.
Beyond that large change, so far the only other changes I've made for
portability is to add some initializers so that gcc would shut about
about unitialized variable warnings, since NetBSD kernels are built with
warnings as errors. Do you want that sort of change back as a patch?
Also, I've just picked up the fsx test, and will start trying it on
NetBSD as soon as our VFS layer is stable enough.
We're also running a couple of file system benchmarks, most notably
bonnie as stress tests, and will report any problems we find.