mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 12:25:31 +00:00
ceph: unify dentry_operations instances
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7126bc2e8d
commit
18fc8abdb7
@ -50,13 +50,6 @@ int ceph_init_dentry(struct dentry *dentry)
|
|||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP)
|
|
||||||
d_set_d_op(dentry, &ceph_dentry_ops);
|
|
||||||
else if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_SNAPDIR)
|
|
||||||
d_set_d_op(dentry, &ceph_snapdir_dentry_ops);
|
|
||||||
else
|
|
||||||
d_set_d_op(dentry, &ceph_snap_dentry_ops);
|
|
||||||
|
|
||||||
di->dentry = dentry;
|
di->dentry = dentry;
|
||||||
di->lease_session = NULL;
|
di->lease_session = NULL;
|
||||||
di->time = jiffies;
|
di->time = jiffies;
|
||||||
@ -1319,16 +1312,6 @@ static void ceph_d_release(struct dentry *dentry)
|
|||||||
kmem_cache_free(ceph_dentry_cachep, di);
|
kmem_cache_free(ceph_dentry_cachep, di);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ceph_snapdir_d_revalidate(struct dentry *dentry,
|
|
||||||
unsigned int flags)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Eventually, we'll want to revalidate snapped metadata
|
|
||||||
* too... probably...
|
|
||||||
*/
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When the VFS prunes a dentry from the cache, we need to clear the
|
* When the VFS prunes a dentry from the cache, we need to clear the
|
||||||
* complete flag on the parent directory.
|
* complete flag on the parent directory.
|
||||||
@ -1347,6 +1330,9 @@ static void ceph_d_prune(struct dentry *dentry)
|
|||||||
if (d_unhashed(dentry))
|
if (d_unhashed(dentry))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_SNAPDIR)
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we hold d_lock, so d_parent is stable, and d_fsdata is never
|
* we hold d_lock, so d_parent is stable, and d_fsdata is never
|
||||||
* cleared until d_release
|
* cleared until d_release
|
||||||
@ -1518,13 +1504,3 @@ const struct dentry_operations ceph_dentry_ops = {
|
|||||||
.d_release = ceph_d_release,
|
.d_release = ceph_d_release,
|
||||||
.d_prune = ceph_d_prune,
|
.d_prune = ceph_d_prune,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct dentry_operations ceph_snapdir_dentry_ops = {
|
|
||||||
.d_revalidate = ceph_snapdir_d_revalidate,
|
|
||||||
.d_release = ceph_d_release,
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct dentry_operations ceph_snap_dentry_ops = {
|
|
||||||
.d_release = ceph_d_release,
|
|
||||||
.d_prune = ceph_d_prune,
|
|
||||||
};
|
|
||||||
|
@ -1023,16 +1023,17 @@ static void update_dentry_lease(struct dentry *dentry,
|
|||||||
long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000;
|
long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000;
|
||||||
struct inode *dir;
|
struct inode *dir;
|
||||||
|
|
||||||
/* only track leases on regular dentries */
|
|
||||||
if (dentry->d_op != &ceph_dentry_ops)
|
|
||||||
return;
|
|
||||||
|
|
||||||
spin_lock(&dentry->d_lock);
|
spin_lock(&dentry->d_lock);
|
||||||
dout("update_dentry_lease %p duration %lu ms ttl %lu\n",
|
dout("update_dentry_lease %p duration %lu ms ttl %lu\n",
|
||||||
dentry, duration, ttl);
|
dentry, duration, ttl);
|
||||||
|
|
||||||
/* make lease_rdcache_gen match directory */
|
/* make lease_rdcache_gen match directory */
|
||||||
dir = d_inode(dentry->d_parent);
|
dir = d_inode(dentry->d_parent);
|
||||||
|
|
||||||
|
/* only track leases on regular dentries */
|
||||||
|
if (ceph_snap(dir) != CEPH_NOSNAP)
|
||||||
|
goto out_unlock;
|
||||||
|
|
||||||
di->lease_shared_gen = ceph_inode(dir)->i_shared_gen;
|
di->lease_shared_gen = ceph_inode(dir)->i_shared_gen;
|
||||||
|
|
||||||
if (duration == 0)
|
if (duration == 0)
|
||||||
|
@ -877,6 +877,7 @@ static int ceph_set_super(struct super_block *s, void *data)
|
|||||||
fsc->sb = s;
|
fsc->sb = s;
|
||||||
|
|
||||||
s->s_op = &ceph_super_ops;
|
s->s_op = &ceph_super_ops;
|
||||||
|
s->s_d_op = &ceph_dentry_ops;
|
||||||
s->s_export_op = &ceph_export_ops;
|
s->s_export_op = &ceph_export_ops;
|
||||||
|
|
||||||
s->s_time_gran = 1000; /* 1000 ns == 1 us */
|
s->s_time_gran = 1000; /* 1000 ns == 1 us */
|
||||||
|
@ -934,8 +934,7 @@ extern const struct file_operations ceph_dir_fops;
|
|||||||
extern const struct file_operations ceph_snapdir_fops;
|
extern const struct file_operations ceph_snapdir_fops;
|
||||||
extern const struct inode_operations ceph_dir_iops;
|
extern const struct inode_operations ceph_dir_iops;
|
||||||
extern const struct inode_operations ceph_snapdir_iops;
|
extern const struct inode_operations ceph_snapdir_iops;
|
||||||
extern const struct dentry_operations ceph_dentry_ops, ceph_snap_dentry_ops,
|
extern const struct dentry_operations ceph_dentry_ops;
|
||||||
ceph_snapdir_dentry_ops;
|
|
||||||
|
|
||||||
extern loff_t ceph_make_fpos(unsigned high, unsigned off, bool hash_order);
|
extern loff_t ceph_make_fpos(unsigned high, unsigned off, bool hash_order);
|
||||||
extern int ceph_handle_notrace_create(struct inode *dir, struct dentry *dentry);
|
extern int ceph_handle_notrace_create(struct inode *dir, struct dentry *dentry);
|
||||||
|
Loading…
Reference in New Issue
Block a user