df bases it's local/remote distinction on the "me_remote" flag from
gnulib's lib/mountpoint.

The ME_REMOTE macro has a few special cases that cover some common
network filesystems such as nfs and smb/cifs, but mounts of /afs are
treated as local even though it is a distributed filesystem.

Attached is a proposed patch that adds special cases for the known
filesystem types for the AFS protocol, 'afs' (OpenAFS, Linux kernel
kafs module) and 'auristorfs' (AuriStorFS).

Ideally the remoteness would be determined by querying the filesystem
and without having to hard code special cases.  This would be possible
for instance eventually on Linux if/when the new fsinfo system call
gets merged into the kernel, as filesystems will be able to advertise
a "fs is network filesystem" feature bit.

Thanks,
Marc
From 5f47c372cd94867ce8a303e5ddba38b7e4bc6d8b Mon Sep 17 00:00:00 2001
From: Marc Dionne <marc.dio...@auristor.com>
Date: Tue, 4 Feb 2020 11:40:05 -0400
Subject: [PATCH] mountlist: Consider AFS filesystems as remote

df --local relies on the ME_REMOTE macro to determine if a given
mount entry should be considered "local".  There is special logic
for nfs and smb/cifs mounts, but /afs as mounted by OpenAFS, the
kernel's kafs module or AuriStorFS is treated as a local mount.

Add some logic to treat mounts of type 'afs' (OpenAFS, kernel kafs)
and 'auristorfs' (AuriStorFS) as remote.

Signed-off-by: Marc Dionne <marc.dio...@auristor.com>
---
 lib/mountlist.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/mountlist.c b/lib/mountlist.c
index 61063ce91..255e350e0 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -221,6 +221,7 @@ me_remote (char const *fs_name, char const *fs_type _GL_UNUSED)
 #ifndef ME_REMOTE
 /* A file system is "remote" if its Fs_name contains a ':'
    or if (it is of type (smbfs or cifs) and its Fs_name starts with '//')
+   or if it is of type (afs or auristorfs)
    or Fs_name is equal to "-hosts" (used by autofs to mount remote fs).  */
 # define ME_REMOTE(Fs_name, Fs_type)            \
     (strchr (Fs_name, ':') != NULL              \
@@ -228,6 +229,8 @@ me_remote (char const *fs_name, char const *fs_type _GL_UNUSED)
          && (Fs_name)[1] == '/'                 \
          && (strcmp (Fs_type, "smbfs") == 0     \
              || strcmp (Fs_type, "cifs") == 0)) \
+     || strcmp (Fs_type, "afs") == 0            \
+     || strcmp (Fs_type, "auristorfs") == 0     \
      || (strcmp("-hosts", Fs_name) == 0))
 #endif
 
-- 
2.24.1

Reply via email to