ceph: eliminate session->s_gen_ttl_lock
Turn s_cap_gen field into an atomic_t, and just rely on the fact that we hold the s_mutex when changing the s_cap_ttl field. Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Luis Henriques <lhenriques@suse.de> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
committed by
Ilya Dryomov
parent
7e65624d32
commit
52d60f8e18
@@ -645,9 +645,7 @@ void ceph_add_cap(struct inode *inode,
|
||||
dout("add_cap %p mds%d cap %llx %s seq %d\n", inode,
|
||||
session->s_mds, cap_id, ceph_cap_string(issued), seq);
|
||||
|
||||
spin_lock(&session->s_gen_ttl_lock);
|
||||
gen = session->s_cap_gen;
|
||||
spin_unlock(&session->s_gen_ttl_lock);
|
||||
gen = atomic_read(&session->s_cap_gen);
|
||||
|
||||
cap = __get_cap_for_mds(ci, mds);
|
||||
if (!cap) {
|
||||
@@ -785,10 +783,8 @@ static int __cap_is_valid(struct ceph_cap *cap)
|
||||
unsigned long ttl;
|
||||
u32 gen;
|
||||
|
||||
spin_lock(&cap->session->s_gen_ttl_lock);
|
||||
gen = cap->session->s_cap_gen;
|
||||
gen = atomic_read(&cap->session->s_cap_gen);
|
||||
ttl = cap->session->s_cap_ttl;
|
||||
spin_unlock(&cap->session->s_gen_ttl_lock);
|
||||
|
||||
if (cap->cap_gen < gen || time_after_eq(jiffies, ttl)) {
|
||||
dout("__cap_is_valid %p cap %p issued %s "
|
||||
@@ -1182,7 +1178,8 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
|
||||
* s_cap_gen while session is in the reconnect state.
|
||||
*/
|
||||
if (queue_release &&
|
||||
(!session->s_cap_reconnect || cap->cap_gen == session->s_cap_gen)) {
|
||||
(!session->s_cap_reconnect ||
|
||||
cap->cap_gen == atomic_read(&session->s_cap_gen))) {
|
||||
cap->queue_release = 1;
|
||||
if (removed) {
|
||||
__ceph_queue_cap_release(session, cap);
|
||||
@@ -3288,7 +3285,7 @@ static void handle_cap_grant(struct inode *inode,
|
||||
u64 size = le64_to_cpu(grant->size);
|
||||
u64 max_size = le64_to_cpu(grant->max_size);
|
||||
unsigned char check_caps = 0;
|
||||
bool was_stale = cap->cap_gen < session->s_cap_gen;
|
||||
bool was_stale = cap->cap_gen < atomic_read(&session->s_cap_gen);
|
||||
bool wake = false;
|
||||
bool writeback = false;
|
||||
bool queue_trunc = false;
|
||||
@@ -3340,7 +3337,7 @@ static void handle_cap_grant(struct inode *inode,
|
||||
}
|
||||
|
||||
/* side effects now are allowed */
|
||||
cap->cap_gen = session->s_cap_gen;
|
||||
cap->cap_gen = atomic_read(&session->s_cap_gen);
|
||||
cap->seq = seq;
|
||||
|
||||
__check_cap_issue(ci, cap, newcaps);
|
||||
|
||||
Reference in New Issue
Block a user