ceph: track primary dentry link
Newer versions of the MDS will flag a dentry as "primary". In later patches, we'll need to consult this info, so track it in di->flags. Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: "Yan, Zheng" <zyan@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:

committed by
Ilya Dryomov

parent
3bb48b4142
commit
f5e17aed3a
@@ -1051,6 +1051,7 @@ static void __update_dentry_lease(struct inode *dir, struct dentry *dentry,
|
||||
struct ceph_mds_session **old_lease_session)
|
||||
{
|
||||
struct ceph_dentry_info *di = ceph_dentry(dentry);
|
||||
unsigned mask = le16_to_cpu(lease->mask);
|
||||
long unsigned duration = le32_to_cpu(lease->duration_ms);
|
||||
long unsigned ttl = from_time + (duration * HZ) / 1000;
|
||||
long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000;
|
||||
@@ -1062,8 +1063,13 @@ static void __update_dentry_lease(struct inode *dir, struct dentry *dentry,
|
||||
if (ceph_snap(dir) != CEPH_NOSNAP)
|
||||
return;
|
||||
|
||||
if (mask & CEPH_LEASE_PRIMARY_LINK)
|
||||
di->flags |= CEPH_DENTRY_PRIMARY_LINK;
|
||||
else
|
||||
di->flags &= ~CEPH_DENTRY_PRIMARY_LINK;
|
||||
|
||||
di->lease_shared_gen = atomic_read(&ceph_inode(dir)->i_shared_gen);
|
||||
if (duration == 0) {
|
||||
if (!(mask & CEPH_LEASE_VALID)) {
|
||||
__ceph_dentry_dir_lease_touch(di);
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user