public inbox for kdevops@lists.linux.dev
 help / color / mirror / Atom feed
From: cel@kernel.org
To: <kdevops@lists.linux.dev>
Cc: Chuck Lever <chuck.lever@oracle.com>
Subject: [PATCH 4/4] roles: Add a playbook to run the nfstest suite
Date: Wed, 10 Apr 2024 10:50:51 -0400	[thread overview]
Message-ID: <20240410145051.257980-4-cel@kernel.org> (raw)
In-Reply-To: <20240410145051.257980-1-cel@kernel.org>

From: Chuck Lever <chuck.lever@oracle.com>

Note that in dedicated workflow mode, each test group has its own
set of tasks. The main nfstest role selects the task set to run
based on the hostname of the target node.

The nfstest role uses the "free" lock-step strategy so that each
target node can get through its tests while the others are running
their own tasks. Another possibility that is more natural to Ansible
would be to set up a group for each nfstest test group.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 playbooks/nfstest.yml                         |   5 +
 playbooks/roles/nfstest/defaults/main.yml     |   5 +
 playbooks/roles/nfstest/tasks/alloc/main.yml  |  14 ++
 playbooks/roles/nfstest/tasks/dio/main.yml    |  28 +++
 .../roles/nfstest/tasks/interop/main.yml      |  56 ++++++
 playbooks/roles/nfstest/tasks/lock/main.yml   |  56 ++++++
 playbooks/roles/nfstest/tasks/main.yml        | 187 ++++++++++++++++++
 playbooks/roles/nfstest/tasks/posix/main.yml  |  56 ++++++
 playbooks/roles/nfstest/tasks/sparse/main.yml |  14 ++
 playbooks/roles/nfstest/tasks/ssc/main.yml    |  28 +++
 playbooks/roles/nfstest/vars/Debian.yml       |   5 +
 playbooks/roles/nfstest/vars/RedHat.yml       |   5 +
 playbooks/roles/nfstest/vars/Suse.yml         |   5 +
 13 files changed, 464 insertions(+)
 create mode 100644 playbooks/nfstest.yml
 create mode 100644 playbooks/roles/nfstest/defaults/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/alloc/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/dio/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/interop/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/lock/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/posix/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/sparse/main.yml
 create mode 100644 playbooks/roles/nfstest/tasks/ssc/main.yml
 create mode 100644 playbooks/roles/nfstest/vars/Debian.yml
 create mode 100644 playbooks/roles/nfstest/vars/RedHat.yml
 create mode 100644 playbooks/roles/nfstest/vars/Suse.yml

diff --git a/playbooks/nfstest.yml b/playbooks/nfstest.yml
new file mode 100644
index 000000000000..9d7c28a75843
--- /dev/null
+++ b/playbooks/nfstest.yml
@@ -0,0 +1,5 @@
+---
+- hosts: all
+  strategy: free
+  roles:
+    - role: nfstest
diff --git a/playbooks/roles/nfstest/defaults/main.yml b/playbooks/roles/nfstest/defaults/main.yml
new file mode 100644
index 000000000000..0d4060b5c76e
--- /dev/null
+++ b/playbooks/roles/nfstest/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+# Our sensible defaults for the nfstest role.
+#
+kdevops_run_nfstest: False
+kdevops_workflows_dedicated_workflow: false
diff --git a/playbooks/roles/nfstest/tasks/alloc/main.yml b/playbooks/roles/nfstest/tasks/alloc/main.yml
new file mode 100644
index 000000000000..2c4d750388f2
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/alloc/main.yml
@@ -0,0 +1,14 @@
+---
+- name: Run nfstest_alloc for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_alloc"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: alloc_nfsv42_results
+  changed_when: false
+  failed_when: alloc_nfsv42_results.rc != 0 and alloc_nfsv42_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/tasks/dio/main.yml b/playbooks/roles/nfstest/tasks/dio/main.yml
new file mode 100644
index 000000000000..705403a93da1
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/dio/main.yml
@@ -0,0 +1,28 @@
+---
+- name: Run nfstest_dio for NFSv4.0
+  ansible.builtin.command:
+    argv:
+      - "nfstest_dio"
+      - "--createlog"
+      - "--nfsversion=4.0"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: dio_nfsv40_results
+  changed_when: false
+  failed_when: dio_nfsv40_results.rc != 0 and dio_nfsv40_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_dio for NFSv4.1
+  ansible.builtin.command:
+    argv:
+      - "nfstest_dio"
+      - "--createlog"
+      - "--nfsversion=4.1"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: dio_nfsv41_results
+  changed_when: false
+  failed_when: dio_nfsv41_results.rc != 0 and dio_nfsv41_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/tasks/interop/main.yml b/playbooks/roles/nfstest/tasks/interop/main.yml
new file mode 100644
index 000000000000..b35e9c9607fe
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/interop/main.yml
@@ -0,0 +1,56 @@
+---
+- name: Run nfstest_interop for NFSv3
+  ansible.builtin.command:
+    argv:
+      - "nfstest_interop"
+      - "--createlog"
+      - "--nfsversion=3"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: interop_nfsv3_results
+  changed_when: false
+  failed_when: interop_nfsv3_results.rc != 0 and interop_nfsv3_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_interop for NFSv4.0
+  ansible.builtin.command:
+    argv:
+      - "nfstest_interop"
+      - "--createlog"
+      - "--nfsversion=4.0"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: interop_nfsv40_results
+  changed_when: false
+  failed_when: interop_nfsv40_results.rc != 0 and interop_nfsv40_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_interop for NFSv4.1
+  ansible.builtin.command:
+    argv:
+      - "nfstest_interop"
+      - "--createlog"
+      - "--nfsversion=4.1"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: interop_nfsv41_results
+  changed_when: false
+  failed_when: interop_nfsv41_results.rc != 0 and interop_nfsv41_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_interop for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_interop"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: interop_nfsv42_results
+  changed_when: false
+  failed_when: interop_nfsv42_results.rc != 0 and interop_nfsv42_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/tasks/lock/main.yml b/playbooks/roles/nfstest/tasks/lock/main.yml
new file mode 100644
index 000000000000..b658edf965ed
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/lock/main.yml
@@ -0,0 +1,56 @@
+---
+- name: Run nfstest_lock for NFSv3
+  ansible.builtin.command:
+    argv:
+      - "nfstest_lock"
+      - "--createlog"
+      - "--nfsversion=3"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: lock_nfsv3_results
+  changed_when: false
+  failed_when: lock_nfsv3_results.rc != 0 and lock_nfsv3_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_lock for NFSv4.0
+  ansible.builtin.command:
+    argv:
+      - "nfstest_lock"
+      - "--createlog"
+      - "--nfsversion=4.0"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: lock_nfsv40_results
+  changed_when: false
+  failed_when: lock_nfsv40_results.rc != 0 and lock_nfsv40_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_lock for NFSv4.1
+  ansible.builtin.command:
+    argv:
+      - "nfstest_lock"
+      - "--createlog"
+      - "--nfsversion=4.1"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: lock_nfsv41_results
+  changed_when: false
+  failed_when: lock_nfsv41_results.rc != 0 and lock_nfsv41_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_lock for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_lock"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: lock_nfsv42_results
+  changed_when: false
+  failed_when: lock_nfsv42_results.rc != 0 and lock_nfsv42_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/tasks/main.yml b/playbooks/roles/nfstest/tasks/main.yml
new file mode 100644
index 000000000000..6f660c332a75
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/main.yml
@@ -0,0 +1,187 @@
+---
+- name: Import optional extra_vars file
+  ansible.builtin.include_vars:
+    file: "{{ item }}"
+  with_first_found:
+    - files:
+        - "../extra_vars.yml"
+        - "../extra_vars.yaml"
+        - "../extra_vars.json"
+      skip: true
+  failed_when: false
+  tags: vars
+
+- name: Set OS-specific variables
+  ansible.builtin.include_vars: "{{ lookup('ansible.builtin.first_found', params) }}"
+  vars:
+    params:
+      files:
+        - '{{ ansible_distribution }}.yml'
+        - '{{ ansible_os_family }}.yml'
+        - default.yml
+      paths:
+        - 'vars'
+
+- name: Install dependencies for nfstest
+  become: true
+  become_flags: 'su - -c'
+  become_method: ansible.builtin.sudo
+  ansible.builtin.package:
+    name: "{{ nfstest_packages }}"
+    state: present
+  tags: nfstest
+
+# I wish this worked.
+# - name: Install or update pip
+#   become: true
+#   community.general.easy_install:
+#     name: pip
+#     state: latest
+#   tags: nfstest
+
+- name: Create the /data mount point on the target nodes
+  ansible.builtin.include_role:
+    name: create_data_partition
+  tags:
+    - data_partition
+    - nfstest
+
+- name: Set the pathname of the build directory
+  ansible.builtin.set_fact:
+    nfstest_build_dir: "{{ data_path }}/nfstest"
+  tags: nfstest
+
+- name: Remove existing nfstest build directory
+  become: true
+  become_flags: 'su - -c'
+  become_method: ansible.builtin.sudo
+  ansible.builtin.file:
+    path: "{{ nfstest_build_dir }}"
+    state: absent
+  tags: nfstest
+
+- name: Set the name of the NFS export for the test group
+  ansible.builtin.set_fact:
+    nfstest_nfs_server_export: "nfstest-{{ ansible_host }}"
+  when:
+    - nfstest_nfs_use_kdevops_nfsd|bool
+  tags: vars
+
+- name: Create the NFS export on the kdevops NFS server
+  ansible.builtin.include_role:
+    name: nfsd_add_export
+  vars: # noqa: var-naming[no-role-prefix]
+    server_host: "{{ nfstest_nfs_server_host }}"
+    export_volname: "{{ nfstest_nfs_server_export }}"
+    export_options: "{{ nfsd_export_options }}"
+    export_fstype: "{{ nfsd_export_fstype }}"
+    export_size: 10g
+  when:
+    - nfstest_nfs_use_kdevops_nfsd|bool
+  tags: nfstest
+
+- name: Create the test mount point on the target node
+  become: true
+  become_flags: 'su - -c'
+  become_method: ansible.builtin.sudo
+  ansible.builtin.file:
+    state: directory
+    path: "{{ nfstest_mnt }}"
+    owner: "root"
+    group: "root"
+    mode: "u=rwx,g=rwx,o=rwx"
+  tags: nfstest
+
+- name: Clone the nfstest source code from {{ nfstest_repo }}
+  ansible.builtin.git:
+    repo: "{{ nfstest_repo }}"
+    dest: "{{ nfstest_build_dir }}"
+    version: "{{ nfstest_repo_commit }}"
+    update: true
+  retries: 3
+  delay: 5
+  register: clone_result
+  until: not clone_result.failed
+  tags: nfstest
+
+- name: Build the nfstest suite on the target node(s)
+# noqa: command-instead-of-shell
+  environment:
+    PYTHONPATH: "{{ nfstest_build_dir }}"
+  ansible.builtin.shell:
+    cmd: "python setup.py build"
+    chdir: "{{ nfstest_build_dir }}"
+  register: build_result
+  failed_when: build_result.rc != 0
+  changed_when: true
+  tags: nfstest
+
+- name: Install the nfstest suite on the target node(s)
+  become: true
+  become_flags: 'su - -c'
+  become_method: ansible.builtin.sudo
+  ansible.builtin.command:
+    cmd: "pip install ."
+    chdir: "{{ nfstest_build_dir }}"
+  register: install_result
+  failed_when: install_result.rc != 0
+  changed_when: true
+  tags: nfstest
+
+- name: Set the test group for the target node
+  ansible.builtin.set_fact:
+    nfstest_test_group: "{{ ansible_host | regex_replace(kdevops_host_prefix + '-') | regex_replace('-dev') }}"
+  when:
+    - kdevops_workflows_dedicated_workflow|bool
+  tags:
+    - run_tests
+    - copy_results
+
+- name: Run the selected test group
+  ansible.builtin.include_role:
+    name: nfstest
+    tasks_from: "{{ nfstest_test_group }}/main.yml"
+  when:
+    - kdevops_workflows_dedicated_workflow|bool
+  tags: run_tests
+
+- name: Set the pathname of the results directory
+  ansible.builtin.set_fact:
+    nfstest_results_dir: "../workflows/nfstest/results/{{ ansible_kernel }}"
+  when:
+    - kdevops_workflows_dedicated_workflow|bool
+  tags: copy_results
+
+- name: Create the results directory on the control node
+  ansible.builtin.file:
+    path: "{{ nfstest_results_dir }}"
+    state: directory
+    mode: "u=rwx,g=rx,o=rx"
+  delegate_to: localhost
+  when:
+    - kdevops_workflows_dedicated_workflow|bool
+  tags: copy_results
+
+- name: Look for output logs on the target node
+  ansible.builtin.find:
+    paths: "/tmp"
+    patterns: "nfstest*.log"
+    file_type: file
+  register: nfstest_logs
+  when:
+    - kdevops_workflows_dedicated_workflow|bool
+  tags: copy_results
+
+- name: Copy the output logs to the control node
+  ansible.builtin.fetch:
+    src: "{{ item.path }}"
+    dest: "{{ nfstest_results_dir }}/{{ nfstest_test_group }}/"
+    flat: true
+  with_items: "{{ nfstest_logs.files }}"
+  loop_control:
+    label: "Copying {{ item.path | basename }} ..."
+  when:
+    - nfstest_logs.matched > 0
+    - kdevops_workflows_dedicated_workflow|bool
+  changed_when: false
+  tags: copy_results
diff --git a/playbooks/roles/nfstest/tasks/posix/main.yml b/playbooks/roles/nfstest/tasks/posix/main.yml
new file mode 100644
index 000000000000..6dd2c4e0b022
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/posix/main.yml
@@ -0,0 +1,56 @@
+---
+- name: Run nfstest_posix for NFSv3
+  ansible.builtin.command:
+    argv:
+      - "nfstest_posix"
+      - "--createlog"
+      - "--nfsversion=3"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: posix_nfsv3_results
+  changed_when: false
+  failed_when: posix_nfsv3_results.rc != 0 and posix_nfsv3_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_posix for NFSv4.0
+  ansible.builtin.command:
+    argv:
+      - "nfstest_posix"
+      - "--createlog"
+      - "--nfsversion=4.0"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: posix_nfsv40_results
+  changed_when: false
+  failed_when: posix_nfsv40_results.rc != 0 and posix_nfsv40_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_posix for NFSv4.1
+  ansible.builtin.command:
+    argv:
+      - "nfstest_posix"
+      - "--createlog"
+      - "--nfsversion=4.1"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: posix_nfsv41_results
+  changed_when: false
+  failed_when: posix_nfsv41_results.rc != 0 and posix_nfsv41_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_posix for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_posix"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: posix_nfsv42_results
+  changed_when: false
+  failed_when: posix_nfsv42_results.rc != 0 and posix_nfsv42_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/tasks/sparse/main.yml b/playbooks/roles/nfstest/tasks/sparse/main.yml
new file mode 100644
index 000000000000..6defab5311f7
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/sparse/main.yml
@@ -0,0 +1,14 @@
+---
+- name: Run nfstest_sparse for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_sparse"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=all"
+  register: sparse_nfsv42_results
+  changed_when: false
+  failed_when: sparse_nfsv42_results.rc != 0 and sparse_nfsv42_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/tasks/ssc/main.yml b/playbooks/roles/nfstest/tasks/ssc/main.yml
new file mode 100644
index 000000000000..b8e01345c032
--- /dev/null
+++ b/playbooks/roles/nfstest/tasks/ssc/main.yml
@@ -0,0 +1,28 @@
+---
+- name: Run nfstest_ssc intra tests for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_ssc"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=intra"
+  register: ssc_nfsv42_intra_results
+  changed_when: false
+  failed_when: ssc_nfsv42_intra_results.rc != 0 and ssc_nfsv42_intra_results.rc != 1
+  tags: run_tests
+
+- name: Run nfstest_ssc inter tests for NFSv4.2
+  ansible.builtin.command:
+    argv:
+      - "nfstest_ssc"
+      - "--createlog"
+      - "--nfsversion=4.2"
+      - "--server={{ nfstest_nfs_server_host }}"
+      - "--export=/export/{{ nfstest_nfs_server_export }}"
+      - "--runtest=inter"
+  register: ssc_nfsv42_inter_results
+  changed_when: false
+  failed_when: ssc_nfsv42_inter_results.rc != 0 and ssc_nfsv42_inter_results.rc != 1
+  tags: run_tests
diff --git a/playbooks/roles/nfstest/vars/Debian.yml b/playbooks/roles/nfstest/vars/Debian.yml
new file mode 100644
index 000000000000..3acf39071fd3
--- /dev/null
+++ b/playbooks/roles/nfstest/vars/Debian.yml
@@ -0,0 +1,5 @@
+---
+nfstest_packages:
+  - nfs-common
+  - python3-pip
+  - tcpdump
diff --git a/playbooks/roles/nfstest/vars/RedHat.yml b/playbooks/roles/nfstest/vars/RedHat.yml
new file mode 100644
index 000000000000..4fdee14f2b1f
--- /dev/null
+++ b/playbooks/roles/nfstest/vars/RedHat.yml
@@ -0,0 +1,5 @@
+---
+nfstest_packages:
+  - nfs-utils
+  - python3-pip
+  - tcpdump
diff --git a/playbooks/roles/nfstest/vars/Suse.yml b/playbooks/roles/nfstest/vars/Suse.yml
new file mode 100644
index 000000000000..4fdee14f2b1f
--- /dev/null
+++ b/playbooks/roles/nfstest/vars/Suse.yml
@@ -0,0 +1,5 @@
+---
+nfstest_packages:
+  - nfs-utils
+  - python3-pip
+  - tcpdump
-- 
2.44.0


  parent reply	other threads:[~2024-04-10 14:51 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-10 14:50 [PATCH 1/4] workflows: Workflow stub for Jorge Mora's nfstest suite cel
2024-04-10 14:50 ` [PATCH 2/4] gen_nodes: Add support for the nfstest workflow cel
2024-04-10 14:50 ` [PATCH 3/4] gen_hosts: Add gen_hosts " cel
2024-04-10 14:50 ` cel [this message]
2024-04-11 17:49   ` [PATCH 4/4] roles: Add a playbook to run the nfstest suite Luis Chamberlain
2024-04-11 18:05     ` Chuck Lever
2024-04-11 18:51       ` Luis Chamberlain
2024-04-11 19:25         ` Chuck Lever
2024-04-11 19:55           ` Luis Chamberlain
2024-04-12 15:34   ` Scott Mayhew
2024-04-12 15:36     ` Chuck Lever III
2024-04-10 14:56 ` [PATCH 1/4] workflows: Workflow stub for Jorge Mora's " Chuck Lever
2024-04-11 16:43 ` Luis Chamberlain
2024-04-11 17:41   ` Chuck Lever
2024-04-12 15:45 ` Scott Mayhew
2024-04-12 15:50   ` Chuck Lever III
2024-04-12 19:03     ` Chuck Lever III

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=20240410145051.257980-4-cel@kernel.org \
    --to=cel@kernel.org \
    --cc=chuck.lever@oracle.com \
    --cc=kdevops@lists.linux.dev \
    /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