| Submitting patches to bcachefs |
| ============================== |
| |
| Here are suggestions for submitting patches to bcachefs subsystem. |
| |
| Submission checklist |
| -------------------- |
| |
| Patches must be tested before being submitted, either with the xfstests suite |
| [0]_, or the full bcachefs test suite in ktest [1]_, depending on what's being |
| touched. Note that ktest wraps xfstests and will be an easier method to running |
| it for most users; it includes single-command wrappers for all the mainstream |
| in-kernel local filesystems. |
| |
| Patches will undergo more testing after being merged (including |
| lockdep/kasan/preempt/etc. variants), these are not generally required to be |
| run by the submitter - but do put some thought into what you're changing and |
| which tests might be relevant, e.g. are you dealing with tricky memory layout |
| work? kasan, are you doing locking work? then lockdep; and ktest includes |
| single-command variants for the debug build types you'll most likely need. |
| |
| The exception to this rule is incomplete WIP/RFC patches: if you're working on |
| something nontrivial, it's encouraged to send out a WIP patch to let people |
| know what you're doing and make sure you're on the right track. Just make sure |
| it includes a brief note as to what's done and what's incomplete, to avoid |
| confusion. |
| |
| Rigorous checkpatch.pl adherence is not required (many of its warnings are |
| considered out of date), but try not to deviate too much without reason. |
| |
| Focus on writing code that reads well and is organized well; code should be |
| aesthetically pleasing. |
| |
| CI |
| -- |
| |
| Instead of running your tests locally, when running the full test suite it's |
| preferable to let a server farm do it in parallel, and then have the results |
| in a nice test dashboard (which can tell you which failures are new, and |
| presents results in a git log view, avoiding the need for most bisecting). |
| |
| That exists [2]_, and community members may request an account. If you work for |
| a big tech company, you'll need to help out with server costs to get access - |
| but the CI is not restricted to running bcachefs tests: it runs any ktest test |
| (which generally makes it easy to wrap other tests that can run in qemu). |
| |
| Other things to think about |
| --------------------------- |
| |
| - How will we debug this code? Is there sufficient introspection to diagnose |
| when something starts acting wonky on a user machine? |
| |
| We don't necessarily need every single field of every data structure visible |
| with introspection, but having the important fields of all the core data |
| types wired up makes debugging drastically easier - a bit of thoughtful |
| foresight greatly reduces the need to have people build custom kernels with |
| debug patches. |
| |
| More broadly, think about all the debug tooling that might be needed. |
| |
| - Does it make the codebase more or less of a mess? Can we also try to do some |
| organizing, too? |
| |
| - Do new tests need to be written? New assertions? How do we know and verify |
| that the code is correct, and what happens if something goes wrong? |
| |
| We don't yet have automated code coverage analysis or easy fault injection - |
| but for now, pretend we did and ask what they might tell us. |
| |
| Assertions are hugely important, given that we don't yet have a systems |
| language that can do ergonomic embedded correctness proofs. Hitting an assert |
| in testing is much better than wandering off into undefined behaviour la-la |
| land - use them. Use them judiciously, and not as a replacement for proper |
| error handling, but use them. |
| |
| - Does it need to be performance tested? Should we add new performance counters? |
| |
| bcachefs has a set of persistent runtime counters which can be viewed with |
| the 'bcachefs fs top' command; this should give users a basic idea of what |
| their filesystem is currently doing. If you're doing a new feature or looking |
| at old code, think if anything should be added. |
| |
| - If it's a new on disk format feature - have upgrades and downgrades been |
| tested? (Automated tests exists but aren't in the CI, due to the hassle of |
| disk image management; coordinate to have them run.) |
| |
| Mailing list, IRC |
| ----------------- |
| |
| Patches should hit the list [3]_, but much discussion and code review happens |
| on IRC as well [4]_; many people appreciate the more conversational approach |
| and quicker feedback. |
| |
| Additionally, we have a lively user community doing excellent QA work, which |
| exists primarily on IRC. Please make use of that resource; user feedback is |
| important for any nontrivial feature, and documenting it in commit messages |
| would be a good idea. |
| |
| .. rubric:: References |
| |
| .. [0] git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git |
| .. [1] https://evilpiepirate.org/git/ktest.git/ |
| .. [2] https://evilpiepirate.org/~testdashboard/ci/ |
| .. [3] linux-bcachefs@vger.kernel.org |
| .. [4] irc.oftc.net#bcache, #bcachefs-dev |