ceph: allow ceph_put_mds_session to take NULL or ERR_PTR
authorJeff Layton <jlayton@kernel.org>
Wed, 9 Jun 2021 18:09:52 +0000 (14:09 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 26 Sep 2021 12:08:58 +0000 (14:08 +0200)
[ Upstream commit 7e65624d32b6e0429b1d3559e5585657f34f74a1 ]

...to simplify some error paths.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Luis Henriques <lhenriques@suse.de>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/ceph/dir.c
fs/ceph/inode.c
fs/ceph/mds_client.c
fs/ceph/metric.c

index a4d48370b2b3242174c0e65a989404320c0eead6..f63c1a090139ce967062d663b53ccc4f43824dd2 100644 (file)
@@ -1797,8 +1797,7 @@ static void ceph_d_release(struct dentry *dentry)
        dentry->d_fsdata = NULL;
        spin_unlock(&dentry->d_lock);
 
-       if (di->lease_session)
-               ceph_put_mds_session(di->lease_session);
+       ceph_put_mds_session(di->lease_session);
        kmem_cache_free(ceph_dentry_cachep, di);
 }
 
index 57cd78e942c08fb69b86eb5c8804b600c8fd905f..63e781e4f7e442880844040309a05151d77468c4 100644 (file)
@@ -1121,8 +1121,7 @@ static inline void update_dentry_lease(struct inode *dir, struct dentry *dentry,
        __update_dentry_lease(dir, dentry, lease, session, from_time,
                              &old_lease_session);
        spin_unlock(&dentry->d_lock);
-       if (old_lease_session)
-               ceph_put_mds_session(old_lease_session);
+       ceph_put_mds_session(old_lease_session);
 }
 
 /*
@@ -1167,8 +1166,7 @@ static void update_dentry_lease_careful(struct dentry *dentry,
                              from_time, &old_lease_session);
 out_unlock:
        spin_unlock(&dentry->d_lock);
-       if (old_lease_session)
-               ceph_put_mds_session(old_lease_session);
+       ceph_put_mds_session(old_lease_session);
 }
 
 /*
index 816cea4975372fe86dbf14d1343a06e58c6bc874..8cbbb611e0caaaf51a7fb3491ada94ba66381378 100644 (file)
@@ -661,6 +661,9 @@ struct ceph_mds_session *ceph_get_mds_session(struct ceph_mds_session *s)
 
 void ceph_put_mds_session(struct ceph_mds_session *s)
 {
+       if (IS_ERR_OR_NULL(s))
+               return;
+
        dout("mdsc put_session %p %d -> %d\n", s,
             refcount_read(&s->s_ref), refcount_read(&s->s_ref)-1);
        if (refcount_dec_and_test(&s->s_ref)) {
@@ -1435,8 +1438,7 @@ static void __open_export_target_sessions(struct ceph_mds_client *mdsc,
 
        for (i = 0; i < mi->num_export_targets; i++) {
                ts = __open_export_target_session(mdsc, mi->export_targets[i]);
-               if (!IS_ERR(ts))
-                       ceph_put_mds_session(ts);
+               ceph_put_mds_session(ts);
        }
 }
 
index fee4c47783132deb1b4d528d199dea1dfd459e9c..3b2ef8ee544e72cd5ce0c2dc3abb19da4bdfa8b3 100644 (file)
@@ -233,8 +233,7 @@ void ceph_metric_destroy(struct ceph_client_metric *m)
 
        cancel_delayed_work_sync(&m->delayed_work);
 
-       if (m->session)
-               ceph_put_mds_session(m->session);
+       ceph_put_mds_session(m->session);
 }
 
 static inline void __update_latency(ktime_t *totalp, ktime_t *lsump,