linux_dsm_epyc7002/fs/ceph
Yan, Zheng 570df4e9c2 ceph: snapshot nfs re-export
To support snapshot nfs re-export, we need a way to lookup snapped
inode by file handle. For directory inode, snapped metadata are always
stored together with head inode. Client just need to pass vinodeno_t
to MDS. For non-directory inode, there can be multiple version of
snapped inodes and they can be stored in different dirfrags. Besides
vinodeno_t, client also need to tell mds from which dirfrag it got the
snapped inode.

Another problem of supporting snapshot nfs re-export is that there
can be multiple paths to access a snapped inode. For example:

  mkdir -p d1/d2/d3
  mkdir d1/.snap/s1

Paths 'd1/.snap/s1/d2/d3', 'd1/d2/.snap/_s1_<inode number of d1>/d3'
and 'd1/d2/d3/.snap/_s1_<inode number of d1>' are all reference to the
same snapped inode. For a given snapped inode, There is no convenient
way to get the first form and the second form paths. For simplicity,
ceph_get_parent() return snapdir for snapped directory inode.

Furthermore, client may access snapshot of deleted directory. For
example:

  mkdir -p d1/d2
  mkdir d1/.snap/s1
  open d1/.snap/s1/d2
  rm -rf d1/d2
  <nfs server restart>

The path constucted by ceph_get_parent() and ceph_get_name() is
'<inode of d2>/.snap/_s1_<inode number of d1>'. Futher lookup parent
of <inode of d2> will fail. To workaround this case, this patch uses
d_obtain_root() to get dentry for snapdir of deleted directory.
snapdir dentry has no DCACHE_DISCONNECTED flag set, reconnect_path()
stops when it reaches snapdir dentry.

Link: http://tracker.ceph.com/issues/22105
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
2019-05-07 19:22:36 +02:00
..
acl.c libceph: introduce ceph_pagelist_alloc() 2018-10-22 10:28:21 +02:00
addr.c ceph: use vmf_error() in ceph_filemap_fault() 2019-01-07 22:48:48 +01:00
cache.c ceph: use timespec64 for inode timestamp 2018-08-02 21:26:12 +02:00
cache.h ceph: improve fscache revalidation 2016-06-01 10:31:50 +02:00
caps.c ceph: add mount option to limit caps count 2019-03-05 18:55:17 +01:00
ceph_frag.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs.c ceph: remove dentry_lru file from debugfs 2019-03-05 18:55:17 +01:00
dir.c ceph: ensure d_name stability in ceph_dentry_hash() 2019-04-23 21:37:54 +02:00
export.c ceph: snapshot nfs re-export 2019-05-07 19:22:36 +02:00
file.c ceph: pass inclusive lend parameter to filemap_write_and_wait_range() 2019-03-05 18:55:17 +01:00
inode.c ceph: handle the case where a dentry has been renamed on outstanding req 2019-04-23 21:37:54 +02:00
ioctl.c libceph, ceph: move ceph_calc_file_object_mapping() to striper.c 2018-04-02 10:12:43 +02:00
ioctl.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Kconfig fs/*/Kconfig: drop links to 404-compliant http://acl.bestbits.at 2018-01-01 12:45:37 -07:00
locks.c ceph: remove duplicated filelock ref increase 2019-05-07 19:22:36 +02:00
Makefile ceph: quota: add initial infrastructure to support cephfs quotas 2018-04-02 11:17:51 +02:00
mds_client.c ceph: quota: fix quota subdir mounts 2019-05-07 19:22:36 +02:00
mds_client.h ceph: quota: fix quota subdir mounts 2019-05-07 19:22:36 +02:00
mdsmap.c ceph: remove redundant assignment 2018-12-26 15:56:04 +01:00
quota.c ceph: quota: fix quota subdir mounts 2019-05-07 19:22:36 +02:00
snap.c ceph: fix ci->i_head_snapc leak 2019-04-23 21:37:54 +02:00
strings.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
super.c ceph: add mount option to limit caps count 2019-03-05 18:55:17 +01:00
super.h ceph: quota: fix quota subdir mounts 2019-05-07 19:22:36 +02:00
xattr.c ceph: support getting ceph.dir.pin vxattr 2019-03-05 18:55:16 +01:00