[lustre-devel] [PATCH 14/37] lustre: llog: change lgh_refcount to struct kref.
NeilBrown
neilb at suse.com
Mon Feb 18 16:09:05 PST 2019
This is a refcount that perfectly fits the
pattern for kref, so change it to a kref.
Signed-off-by: NeilBrown <neilb at suse.com>
---
drivers/staging/lustre/lustre/include/lustre_log.h | 9 +--------
drivers/staging/lustre/lustre/obdclass/llog.c | 16 +++++++++-------
2 files changed, 10 insertions(+), 15 deletions(-)
diff --git a/drivers/staging/lustre/lustre/include/lustre_log.h b/drivers/staging/lustre/lustre/include/lustre_log.h
index e96bd6ab0fa4..83fc9374d7f0 100644
--- a/drivers/staging/lustre/lustre/include/lustre_log.h
+++ b/drivers/staging/lustre/lustre/include/lustre_log.h
@@ -226,7 +226,7 @@ struct llog_handle {
char *lgh_name;
void *private_data;
struct llog_operations *lgh_logops;
- atomic_t lgh_refcount;
+ struct kref lgh_refcount;
};
#define LLOG_CTXT_FLAG_UNINITIALIZED 0x00000001
@@ -365,13 +365,6 @@ static inline int llog_next_block(const struct lu_env *env,
}
/* llog.c */
-int llog_declare_write_rec(const struct lu_env *env,
- struct llog_handle *handle,
- struct llog_rec_hdr *rec, int idx,
- struct thandle *th);
-int llog_write_rec(const struct lu_env *env, struct llog_handle *handle,
- struct llog_rec_hdr *rec, struct llog_cookie *logcookies,
- int numcookies, void *buf, int idx, struct thandle *th);
int lustre_process_log(struct super_block *sb, char *logname,
struct config_llog_instance *cfg);
int lustre_end_log(struct super_block *sb, char *logname,
diff --git a/drivers/staging/lustre/lustre/obdclass/llog.c b/drivers/staging/lustre/lustre/obdclass/llog.c
index 9d161c16c2f9..a34b1a7108b7 100644
--- a/drivers/staging/lustre/lustre/obdclass/llog.c
+++ b/drivers/staging/lustre/lustre/obdclass/llog.c
@@ -65,7 +65,7 @@ static struct llog_handle *llog_alloc_handle(void)
init_rwsem(&loghandle->lgh_lock);
INIT_LIST_HEAD(&loghandle->u.phd.phd_entry);
- atomic_set(&loghandle->lgh_refcount, 1);
+ kref_init(&loghandle->lgh_refcount);
return loghandle;
}
@@ -73,8 +73,11 @@ static struct llog_handle *llog_alloc_handle(void)
/*
* Free llog handle and header data if exists. Used in llog_close() only
*/
-static void llog_free_handle(struct llog_handle *loghandle)
+static void llog_free_handle(struct kref *kref)
{
+ struct llog_handle *loghandle = container_of(kref, struct llog_handle,
+ lgh_refcount);
+
/* failed llog_init_handle */
if (!loghandle->lgh_hdr)
goto out;
@@ -90,14 +93,13 @@ static void llog_free_handle(struct llog_handle *loghandle)
void llog_handle_get(struct llog_handle *loghandle)
{
- atomic_inc(&loghandle->lgh_refcount);
+ kref_get(&loghandle->lgh_refcount);
}
void llog_handle_put(struct llog_handle *loghandle)
{
- LASSERT(atomic_read(&loghandle->lgh_refcount) > 0);
- if (atomic_dec_and_test(&loghandle->lgh_refcount))
- llog_free_handle(loghandle);
+ LASSERT(kref_read(&loghandle->lgh_refcount) > 0);
+ kref_put(&loghandle->lgh_refcount, llog_free_handle);
}
static int llog_read_header(const struct lu_env *env,
@@ -497,7 +499,7 @@ int llog_open(const struct lu_env *env, struct llog_ctxt *ctxt,
revert_creds(old_cred);
if (rc) {
- llog_free_handle(*lgh);
+ llog_free_handle(&(*lgh)->lgh_refcount);
*lgh = NULL;
}
return rc;
More information about the lustre-devel
mailing list