XFS Maintainer Entry Profile
============================

Overview
--------
XFS is a well known high-performance filesystem in the Linux kernel.
The aim of this project is to provide and maintain a robust and
performant filesystem.

Patches are generally merged to the for-next branch of the appropriate
git repository.
After a testing period, the for-next branch is merged to the master
branch.

Kernel code are merged to the xfs-linux tree[0].
Userspace code are merged to the xfsprogs tree[1].
Test cases are merged to the xfstests tree[2].
Ondisk format documentation are merged to the xfs-documentation tree[3].

All patchsets involving XFS *must* be cc'd in their entirety to the mailing
list linux-xfs@vger.kernel.org.

Roles
-----
There are eight key roles in the XFS project.
A person can take on multiple roles, and a role can be filled by
multiple people.
Anyone taking on a role is advised to check in with themselves and
others on a regular basis about burnout.

- **Outside Contributor**: Anyone who sends a patch but is not involved
  in the XFS project on a regular basis.
  These folks are usually people who work on other filesystems or
  elsewhere in the kernel community.

- **Developer**: Someone who is familiar with the XFS codebase enough to
  write new code, documentation, and tests.

  Developers can often be found in the IRC channel mentioned by the ``C:``
  entry in the kernel MAINTAINERS file.

- **Senior Developer**: A developer who is very familiar with at least
  some part of the XFS codebase and/or other subsystems in the kernel.
  These people collectively decide the long term goals of the project
  and nudge the community in that direction.
  They should help prioritize development and review work for each release
  cycle.

  Senior developers tend to be more active participants in the IRC channel.

- **Reviewer**: Someone (most likely also a developer) who reads code
  submissions to decide:

  0. Is the idea behind the contribution sound?
  1. Does the idea fit the goals of the project?
  2. Is the contribution designed correctly?
  3. Is the contribution polished?
  4. Can the contribution be tested effectively?

  Reviewers should identify themselves with an ``R:`` entry in the kernel
  and fstests MAINTAINERS files.

- **Testing Lead**: This person is responsible for setting the test
  coverage goals of the project, negotiating with developers to decide
  on new tests for new features, and making sure that developers and
  release managers execute on the testing.

  The testing lead should identify themselves with an ``M:`` entry in
  the XFS section of the fstests MAINTAINERS file.

- **Bug Triager**: Someone who examines incoming bug reports in just
  enough detail to identify the person to whom the report should be
  forwarded.

  The bug triagers should identify themselves with a ``B:`` entry in
  the kernel MAINTAINERS file.

- **Release Manager**: This person merges reviewed patchsets into an
  integration branch, tests the result locally, pushes the branch to a
  public git repository, and sends pull requests further upstream.
  The release manager is not expected to work on new feature patchsets.
  If a developer and a reviewer fail to reach a resolution on some point,
  the release manager must have the ability to intervene to try to drive a
  resolution.

  The release manager should identify themselves with an ``M:`` entry in
  the kernel MAINTAINERS file.

- **Community Manager**: This person calls and moderates meetings of as many
  XFS participants as they can get when mailing list discussions prove
  insufficient for collective decisionmaking.
  They may also serve as liaison between managers of the organizations
  sponsoring work on any part of XFS.

- **LTS Maintainer**: Someone who backports and tests bug fixes from
  uptream to the LTS kernels.
  There tend to be six separate LTS trees at any given time.

  The maintainer for a given LTS release should identify themselves with an
  ``M:`` entry in the MAINTAINERS file for that LTS tree.
  Unmaintained LTS kernels should be marked with status ``S: Orphan`` in that
  same file.

Submission Checklist Addendum
-----------------------------
Please follow these additional rules when submitting to XFS:

- Patches affecting only the filesystem itself should be based against
  the latest -rc or the for-next branch.
  These patches will be merged back to the for-next branch.

- Authors of patches touching other subsystems need to coordinate with
  the maintainers of XFS and the relevant subsystems to decide how to
  proceed with a merge.

- Any patchset changing XFS should be cc'd in its entirety to linux-xfs.
  Do not send partial patchsets; that makes analysis of the broader
  context of the changes unnecessarily difficult.

- Anyone making kernel changes that have corresponding changes to the
  userspace utilities should send the userspace changes as separate
  patchsets immediately after the kernel patchsets.

- Authors of bug fix patches are expected to use fstests[2] to perform
  an A/B test of the patch to determine that there are no regressions.
  When possible, a new regression test case should be written for
  fstests.

- Authors of new feature patchsets must ensure that fstests will have
  appropriate functional and input corner-case test cases for the new
  feature.

- When implementing a new feature, it is strongly suggested that the
  developers write a design document to answer the following questions:

  * **What** problem is this trying to solve?

  * **Who** will benefit from this solution, and **where** will they
    access it?

  * **How** will this new feature work?  This should touch on major data
    structures and algorithms supporting the solution at a higher level
    than code comments.

  * **What** userspace interfaces are necessary to build off of the new
    features?

  * **How** will this work be tested to ensure that it solves the
    problems laid out in the design document without causing new
    problems?

  The design document should be committed in the kernel documentation
  directory.
  It may be omitted if the feature is already well known to the
  community.

- Patchsets for the new tests should be submitted as separate patchsets
  immediately after the kernel and userspace code patchsets.

- Changes to the on-disk format of XFS must be described in the ondisk
  format document[3] and submitted as a patchset after the fstests
  patchsets.

- Patchsets implementing bug fixes and further code cleanups should put
  the bug fixes at the beginning of the series to ease backporting.

Key Release Cycle Dates
-----------------------
Bug fixes may be sent at any time, though the release manager may decide to
defer a patch when the next merge window is close.

Code submissions targeting the next merge window should be sent between
-rc1 and -rc6.
This gives the community time to review the changes, to suggest other changes,
and for the author to retest those changes.

Code submissions also requiring changes to fs/iomap and targeting the
next merge window should be sent between -rc1 and -rc4.
This allows the broader kernel community adequate time to test the
infrastructure changes.

Review Cadence
--------------
In general, please wait at least one week before pinging for feedback.
To find reviewers, either consult the MAINTAINERS file, or ask
developers that have Reviewed-by tags for XFS changes to take a look and
offer their opinion.

References
----------
| [0] https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git/
| [1] https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/
| [2] https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/
| [3] https://git.kernel.org/pub/scm/fs/xfs/xfs-documentation.git/
