Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c6286f1 authored by Luis Henriques's avatar Luis Henriques Committed by Ilya Dryomov
Browse files

ceph: fix st_nlink stat for directories

Currently, calling stat on a cephfs directory returns 1 for st_nlink.
This behaviour has recently changed in the fuse client, as some
applications seem to expect this value to be either 0 (if it's
unlinked) or 2 + number of subdirectories.  This behaviour was changed
in the fuse client with commit 67c7e4619188 ("client: use common
interp of st_nlink for dirs").

This patch modifies the kernel client to have a similar behaviour.

Link: https://tracker.ceph.com/issues/23873


Signed-off-by: default avatarLuis Henriques <lhenriques@suse.com>
Reviewed-by: default avatar"Yan, Zheng" <zyan@redhat.com>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 597817dd
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -2271,6 +2271,14 @@ int ceph_getattr(const struct path *path, struct kstat *stat,
				stat->size = ci->i_files + ci->i_subdirs;
				stat->size = ci->i_files + ci->i_subdirs;
			stat->blocks = 0;
			stat->blocks = 0;
			stat->blksize = 65536;
			stat->blksize = 65536;
			/*
			 * Some applications rely on the number of st_nlink
			 * value on directories to be either 0 (if unlinked)
			 * or 2 + number of subdirectories.
			 */
			if (stat->nlink == 1)
				/* '.' + '..' + subdirs */
				stat->nlink = 1 + 1 + ci->i_subdirs;
		}
		}
	}
	}
	return err;
	return err;