From: NeilBrown <neilb@suse.com>
To: lustre-devel@lists.lustre.org
Subject: [lustre-devel] [PATCH 30/37] lustre: handle: move refcount into the lustre_handle.
Date: Tue, 19 Feb 2019 11:09:06 +1100 [thread overview]
Message-ID: <155053494654.24125.18407080080202016099.stgit@noble.brown> (raw)
In-Reply-To: <155053473693.24125.6976971762921761309.stgit@noble.brown>
Every object with a lustre_handle has (and must have) a refcount.
The lustre_handles code needs a call-out to increment this.
To simplify things, move the refcount into the lustre_handle
and discard the call-out.
Signed-off-by: NeilBrown <neilb@suse.com>
---
drivers/staging/lustre/lustre/include/lustre_dlm.h | 6 ---
.../staging/lustre/lustre/include/lustre_export.h | 1
.../staging/lustre/lustre/include/lustre_handles.h | 2 -
.../staging/lustre/lustre/include/lustre_import.h | 2 -
drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 35 ++++++----------
drivers/staging/lustre/lustre/obdclass/genops.c | 44 +++++++-------------
.../lustre/lustre/obdclass/lustre_handles.c | 2 -
.../staging/lustre/lustre/obdecho/echo_client.c | 2 -
drivers/staging/lustre/lustre/ptlrpc/service.c | 4 +-
9 files changed, 35 insertions(+), 63 deletions(-)
diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h
index 6c0371ef056c..19c0f74b7c04 100644
--- a/drivers/staging/lustre/lustre/include/lustre_dlm.h
+++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h
@@ -589,12 +589,6 @@ struct ldlm_lock {
* Must be first in the structure.
*/
struct portals_handle l_handle;
- /**
- * Lock reference count.
- * This is how many users have pointers to actual structure, so that
- * we do not accidentally free lock structure that is in use.
- */
- atomic_t l_refc;
/**
* Internal spinlock protects l_resource. We should hold this lock
* first before taking res_lock.
diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h
index fb34e0b7de35..d05323313f55 100644
--- a/drivers/staging/lustre/lustre/include/lustre_export.h
+++ b/drivers/staging/lustre/lustre/include/lustre_export.h
@@ -67,7 +67,6 @@ struct obd_export {
* what export they are talking to.
*/
struct portals_handle exp_handle;
- refcount_t exp_refcount;
/**
* Set of counters below is to track where export references are
* kept. The exp_rpc_count is used for reconnect handling also,
diff --git a/drivers/staging/lustre/lustre/include/lustre_handles.h b/drivers/staging/lustre/lustre/include/lustre_handles.h
index 9a4b1a821e7b..7e868aecff0e 100644
--- a/drivers/staging/lustre/lustre/include/lustre_handles.h
+++ b/drivers/staging/lustre/lustre/include/lustre_handles.h
@@ -46,7 +46,6 @@
#include <linux/types.h>
struct portals_handle_ops {
- void (*hop_addref)(void *object);
void (*hop_free)(void *object, int size);
};
@@ -66,6 +65,7 @@ struct portals_handle {
struct list_head h_link;
u64 h_cookie;
const struct portals_handle_ops *h_ops;
+ refcount_t h_ref;
/* newly added fields to handle the RCU issue. -jxiong */
struct rcu_head h_rcu;
diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h
index 31b3881fb6c9..ab7e1d94f4b2 100644
--- a/drivers/staging/lustre/lustre/include/lustre_import.h
+++ b/drivers/staging/lustre/lustre/include/lustre_import.h
@@ -154,8 +154,6 @@ struct import_state_hist {
struct obd_import {
/** Local handle (== id) for this import. */
struct portals_handle imp_handle;
- /** Reference counter */
- atomic_t imp_refcount;
struct lustre_handle imp_dlm_handle; /* client's ldlm export */
/** Currently active connection */
struct ptlrpc_connection *imp_connection;
diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
index 248331153c68..7864f9a7ef90 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
@@ -148,7 +148,7 @@ EXPORT_SYMBOL(ldlm_it2str);
*/
struct ldlm_lock *ldlm_lock_get(struct ldlm_lock *lock)
{
- atomic_inc(&lock->l_refc);
+ refcount_inc(&lock->l_handle.h_ref);
return lock;
}
EXPORT_SYMBOL(ldlm_lock_get);
@@ -161,8 +161,8 @@ EXPORT_SYMBOL(ldlm_lock_get);
void ldlm_lock_put(struct ldlm_lock *lock)
{
LASSERT(lock->l_resource != LP_POISON);
- LASSERT(atomic_read(&lock->l_refc) > 0);
- if (atomic_dec_and_test(&lock->l_refc)) {
+ LASSERT(refcount_read(&lock->l_handle.h_ref) > 0);
+ if (refcount_dec_and_test(&lock->l_handle.h_ref)) {
struct ldlm_resource *res;
LDLM_DEBUG(lock,
@@ -349,12 +349,6 @@ void ldlm_lock_destroy_nolock(struct ldlm_lock *lock)
LDLM_LOCK_RELEASE(lock);
}
-/* this is called by portals_handle2object with the handle lock taken */
-static void lock_handle_addref(void *lock)
-{
- LDLM_LOCK_GET((struct ldlm_lock *)lock);
-}
-
static void lock_handle_free(void *lock, int size)
{
LASSERT(size == sizeof(struct ldlm_lock));
@@ -362,7 +356,6 @@ static void lock_handle_free(void *lock, int size)
}
static struct portals_handle_ops lock_handle_ops = {
- .hop_addref = lock_handle_addref,
.hop_free = lock_handle_free,
};
@@ -387,7 +380,7 @@ static struct ldlm_lock *ldlm_lock_new(struct ldlm_resource *resource)
spin_lock_init(&lock->l_lock);
lock->l_resource = resource;
- atomic_set(&lock->l_refc, 2);
+ refcount_set(&lock->l_handle.h_ref, 2);
INIT_LIST_HEAD(&lock->l_res_link);
INIT_LIST_HEAD(&lock->l_lru);
INIT_LIST_HEAD(&lock->l_pending_chain);
@@ -1974,13 +1967,13 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
&vaf,
lock,
lock->l_handle.h_cookie,
- atomic_read(&lock->l_refc),
+ refcount_read(&lock->l_handle.h_ref),
lock->l_readers, lock->l_writers,
ldlm_lockname[lock->l_granted_mode],
ldlm_lockname[lock->l_req_mode],
lock->l_flags, nid,
lock->l_remote_handle.cookie,
- exp ? refcount_read(&exp->exp_refcount) : -99,
+ exp ? refcount_read(&exp->exp_handle.h_ref) : -99,
lock->l_pid, lock->l_callback_timeout,
lock->l_lvb_type);
va_end(args);
@@ -1994,7 +1987,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
&vaf,
ldlm_lock_to_ns_name(lock), lock,
lock->l_handle.h_cookie,
- atomic_read(&lock->l_refc),
+ refcount_read(&lock->l_handle.h_ref),
lock->l_readers, lock->l_writers,
ldlm_lockname[lock->l_granted_mode],
ldlm_lockname[lock->l_req_mode],
@@ -2007,7 +2000,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
lock->l_req_extent.end,
lock->l_flags, nid,
lock->l_remote_handle.cookie,
- exp ? refcount_read(&exp->exp_refcount) : -99,
+ exp ? refcount_read(&exp->exp_handle.h_ref) : -99,
lock->l_pid, lock->l_callback_timeout,
lock->l_lvb_type);
break;
@@ -2018,7 +2011,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
&vaf,
ldlm_lock_to_ns_name(lock), lock,
lock->l_handle.h_cookie,
- atomic_read(&lock->l_refc),
+ refcount_read(&lock->l_handle.h_ref),
lock->l_readers, lock->l_writers,
ldlm_lockname[lock->l_granted_mode],
ldlm_lockname[lock->l_req_mode],
@@ -2030,7 +2023,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
lock->l_policy_data.l_flock.end,
lock->l_flags, nid,
lock->l_remote_handle.cookie,
- exp ? refcount_read(&exp->exp_refcount) : -99,
+ exp ? refcount_read(&exp->exp_handle.h_ref) : -99,
lock->l_pid, lock->l_callback_timeout);
break;
@@ -2040,7 +2033,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
&vaf,
ldlm_lock_to_ns_name(lock),
lock, lock->l_handle.h_cookie,
- atomic_read(&lock->l_refc),
+ refcount_read(&lock->l_handle.h_ref),
lock->l_readers, lock->l_writers,
ldlm_lockname[lock->l_granted_mode],
ldlm_lockname[lock->l_req_mode],
@@ -2050,7 +2043,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
ldlm_typename[resource->lr_type],
lock->l_flags, nid,
lock->l_remote_handle.cookie,
- exp ? refcount_read(&exp->exp_refcount) : -99,
+ exp ? refcount_read(&exp->exp_handle.h_ref) : -99,
lock->l_pid, lock->l_callback_timeout,
lock->l_lvb_type);
break;
@@ -2061,7 +2054,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
&vaf,
ldlm_lock_to_ns_name(lock),
lock, lock->l_handle.h_cookie,
- atomic_read(&lock->l_refc),
+ refcount_read(&lock->l_handle.h_ref),
lock->l_readers, lock->l_writers,
ldlm_lockname[lock->l_granted_mode],
ldlm_lockname[lock->l_req_mode],
@@ -2070,7 +2063,7 @@ void _ldlm_lock_debug(struct ldlm_lock *lock,
ldlm_typename[resource->lr_type],
lock->l_flags, nid,
lock->l_remote_handle.cookie,
- exp ? refcount_read(&exp->exp_refcount) : -99,
+ exp ? refcount_read(&exp->exp_handle.h_ref) : -99,
lock->l_pid, lock->l_callback_timeout,
lock->l_lvb_type);
break;
diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c
index b5fce96e43f7..4b1e14957a66 100644
--- a/drivers/staging/lustre/lustre/obdclass/genops.c
+++ b/drivers/staging/lustre/lustre/obdclass/genops.c
@@ -719,7 +719,7 @@ static void class_export_destroy(struct obd_export *exp)
{
struct obd_device *obd = exp->exp_obd;
- LASSERT(refcount_read(&exp->exp_refcount) == 0);
+ LASSERT(refcount_read(&exp->exp_handle.h_ref) == 0);
LASSERT(obd);
CDEBUG(D_IOCTL, "destroying export %p/%s for %s\n", exp,
@@ -743,33 +743,27 @@ static void class_export_destroy(struct obd_export *exp)
OBD_FREE_RCU(exp, sizeof(*exp), &exp->exp_handle);
}
-static void export_handle_addref(void *export)
-{
- class_export_get(export);
-}
-
static struct portals_handle_ops export_handle_ops = {
- .hop_addref = export_handle_addref,
.hop_free = NULL,
};
struct obd_export *class_export_get(struct obd_export *exp)
{
- refcount_inc(&exp->exp_refcount);
+ refcount_inc(&exp->exp_handle.h_ref);
CDEBUG(D_INFO, "GETting export %p : new refcount %d\n", exp,
- refcount_read(&exp->exp_refcount));
+ refcount_read(&exp->exp_handle.h_ref));
return exp;
}
EXPORT_SYMBOL(class_export_get);
void class_export_put(struct obd_export *exp)
{
- LASSERT(refcount_read(&exp->exp_refcount) > 0);
- LASSERT(refcount_read(&exp->exp_refcount) < LI_POISON);
+ LASSERT(refcount_read(&exp->exp_handle.h_ref) > 0);
+ LASSERT(refcount_read(&exp->exp_handle.h_ref) < LI_POISON);
CDEBUG(D_INFO, "PUTting export %p : new refcount %d\n", exp,
- refcount_read(&exp->exp_refcount) - 1);
+ refcount_read(&exp->exp_handle.h_ref) - 1);
- if (refcount_dec_and_test(&exp->exp_refcount)) {
+ if (refcount_dec_and_test(&exp->exp_handle.h_ref)) {
struct obd_device *obd = exp->exp_obd;
CDEBUG(D_IOCTL, "final put %p/%s\n",
@@ -819,7 +813,7 @@ static struct obd_export *__class_new_export(struct obd_device *obd,
export->exp_conn_cnt = 0;
/* 2 = class_handle_hash + last */
- refcount_set(&export->exp_refcount, 2);
+ refcount_set(&export->exp_handle.h_ref, 2);
atomic_set(&export->exp_rpc_count, 0);
atomic_set(&export->exp_cb_count, 0);
atomic_set(&export->exp_locks_count, 0);
@@ -922,7 +916,7 @@ static void class_import_destroy(struct obd_import *imp)
CDEBUG(D_IOCTL, "destroying import %p for %s\n", imp,
imp->imp_obd->obd_name);
- LASSERT_ATOMIC_ZERO(&imp->imp_refcount);
+ LASSERT(refcount_read(&imp->imp_handle.h_ref) == 0);
ptlrpc_put_connection_superhack(imp->imp_connection);
@@ -939,21 +933,15 @@ static void class_import_destroy(struct obd_import *imp)
OBD_FREE_RCU(imp, sizeof(*imp), &imp->imp_handle);
}
-static void import_handle_addref(void *import)
-{
- class_import_get(import);
-}
-
static struct portals_handle_ops import_handle_ops = {
- .hop_addref = import_handle_addref,
.hop_free = NULL,
};
struct obd_import *class_import_get(struct obd_import *import)
{
- atomic_inc(&import->imp_refcount);
+ refcount_inc(&import->imp_handle.h_ref);
CDEBUG(D_INFO, "import %p refcount=%d obd=%s\n", import,
- atomic_read(&import->imp_refcount),
+ refcount_read(&import->imp_handle.h_ref),
import->imp_obd->obd_name);
return import;
}
@@ -961,19 +949,19 @@ EXPORT_SYMBOL(class_import_get);
void class_import_put(struct obd_import *imp)
{
- LASSERT_ATOMIC_GT_LT(&imp->imp_refcount, 0, LI_POISON);
+ LASSERT(refcount_read(&imp->imp_handle.h_ref) > 0);
CDEBUG(D_INFO, "import %p refcount=%d obd=%s\n", imp,
- atomic_read(&imp->imp_refcount) - 1,
+ refcount_read(&imp->imp_handle.h_ref) - 1,
imp->imp_obd->obd_name);
- if (atomic_dec_and_test(&imp->imp_refcount)) {
+ if (refcount_dec_and_test(&imp->imp_handle.h_ref)) {
CDEBUG(D_INFO, "final put import %p\n", imp);
obd_zombie_import_add(imp);
}
/* catch possible import put race */
- LASSERT_ATOMIC_GE_LT(&imp->imp_refcount, 0, LI_POISON);
+ LASSERT(refcount_read(&imp->imp_handle.h_ref) >= 0);
}
EXPORT_SYMBOL(class_import_put);
@@ -1023,7 +1011,7 @@ struct obd_import *class_new_import(struct obd_device *obd)
init_waitqueue_head(&imp->imp_recovery_waitq);
INIT_WORK(&imp->imp_zombie_work, obd_zombie_imp_cull);
- atomic_set(&imp->imp_refcount, 2);
+ refcount_set(&imp->imp_handle.h_ref, 2);
atomic_set(&imp->imp_unregistering, 0);
atomic_set(&imp->imp_inflight, 0);
atomic_set(&imp->imp_replay_inflight, 0);
diff --git a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c
index 32b70d613f71..5c722d336c21 100644
--- a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c
+++ b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c
@@ -152,7 +152,7 @@ void *class_handle2object(u64 cookie, const struct portals_handle_ops *ops)
spin_lock(&h->h_lock);
if (likely(h->h_in != 0)) {
- h->h_ops->hop_addref(h);
+ refcount_inc(&h->h_ref);
retval = h;
}
spin_unlock(&h->h_lock);
diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c
index baf34c85c4b5..6f00eee6170a 100644
--- a/drivers/staging/lustre/lustre/obdecho/echo_client.c
+++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c
@@ -1638,7 +1638,7 @@ static int echo_client_cleanup(struct obd_device *obddev)
return -EBUSY;
}
- LASSERT(refcount_read(&ec->ec_exp->exp_refcount) > 0);
+ LASSERT(refcount_read(&ec->ec_exp->exp_handle.h_ref) > 0);
rc = obd_disconnect(ec->ec_exp);
if (rc != 0)
CERROR("fail to disconnect device: %d\n", rc);
diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c
index eda921cce8f5..88a81ab2feb8 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/service.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/service.c
@@ -1697,7 +1697,7 @@ ptlrpc_server_handle_request(struct ptlrpc_service_part *svcpt,
(request->rq_export ?
(char *)request->rq_export->exp_client_uuid.uuid : "0"),
(request->rq_export ?
- refcount_read(&request->rq_export->exp_refcount) : -99),
+ refcount_read(&request->rq_export->exp_handle.h_ref) : -99),
lustre_msg_get_status(request->rq_reqmsg), request->rq_xid,
libcfs_id2str(request->rq_peer),
lustre_msg_get_opc(request->rq_reqmsg));
@@ -1741,7 +1741,7 @@ ptlrpc_server_handle_request(struct ptlrpc_service_part *svcpt,
(request->rq_export ?
(char *)request->rq_export->exp_client_uuid.uuid : "0"),
(request->rq_export ?
- refcount_read(&request->rq_export->exp_refcount) : -99),
+ refcount_read(&request->rq_export->exp_handle.h_ref) : -99),
lustre_msg_get_status(request->rq_reqmsg),
request->rq_xid,
libcfs_id2str(request->rq_peer),
next prev parent reply other threads:[~2019-02-19 0:09 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-19 0:09 [lustre-devel] [PATCH 00/37] More lustre patches from obdclass NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 01/37] lustre: obdclass: char obd_ioctl_getdata type NeilBrown
2019-02-24 18:35 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 02/37] lustre: llite: don't use class_setup_tunables() NeilBrown
2019-02-24 16:35 ` James Simmons
2019-02-25 22:27 ` NeilBrown
2019-02-26 22:18 ` James Simmons
2019-02-24 16:52 ` [lustre-devel] [PATCH 03/37] lustre: embed typ_kobj if obd_type James Simmons
2019-02-25 22:38 ` NeilBrown
2019-02-26 20:41 ` Simmons, James A.
2019-02-19 0:09 ` [lustre-devel] [PATCH 14/37] lustre: llog: change lgh_refcount to struct kref NeilBrown
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 13/37] lustre: llog: remove lgh_hdr_lock NeilBrown
2019-02-24 20:29 ` James Simmons
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 07/37] lustre: obd_type: discard obd_type_lock NeilBrown
2019-02-24 17:02 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 08/37] lustre: obdclass: don't copy ops structures in to new type NeilBrown
2019-02-24 17:03 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 16/37] lustre: obdclass: typo: Banlance -> Balance NeilBrown
2019-02-24 17:39 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 05/37] lustre: obd_type: use typ_kobj.name as typ_name NeilBrown
2019-02-24 16:56 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 03/37] lustre: embed typ_kobj if obd_type NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 09/37] lustre: obdclass: fix module load locking NeilBrown
2019-02-24 17:04 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 17/37] lustre: simplify lprocfs_read_frac_helper NeilBrown
2019-02-24 17:52 ` James Simmons
2019-02-26 23:59 ` NeilBrown
2019-02-27 1:06 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 18/37] lustre: obdclass: discard lprocfs_single/seq_release NeilBrown
2019-02-24 17:53 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 12/37] lustre: remove unused function in linkea NeilBrown
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 10/37] lustre: kernelcomm: pass correct gfp_t to kmalloc NeilBrown
2019-02-24 17:05 ` James Simmons
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 21/37] lustre: remove several MAX_STRING_SIZE defines NeilBrown
2019-02-24 19:07 ` James Simmons
2019-02-27 0:41 ` NeilBrown
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 19/37] lustre: discard lprocfs_strnstr() NeilBrown
2019-02-24 17:53 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 15/37] lustre: llog_obd: Convert loc_refcount to refcount_t NeilBrown
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 11/37] lustre: kernelcomm: make libcfs_kkuc_msg_put static NeilBrown
2019-02-24 17:15 ` James Simmons
2019-02-26 23:45 ` NeilBrown
2019-02-27 22:36 ` James Simmons
2019-02-27 22:37 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 04/37] lustre: collect all resource releasing for obj_type NeilBrown
2019-02-24 16:54 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 06/37] lustre: obd_type: discard obd_types linked list NeilBrown
2019-02-24 17:00 ` James Simmons
2019-02-19 0:09 ` [lustre-devel] [PATCH 20/37] lustre: convert rsi_sem to a spinlock NeilBrown
2019-02-25 18:16 ` Andreas Dilger
2019-02-27 0:22 ` NeilBrown
2019-02-27 1:00 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 32/37] lustre: portals_handle: rename ops to owner NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 22/37] lustre: lprocfs: use log2.h macros instead of shift loop NeilBrown
2019-02-24 18:09 ` James Simmons
2019-02-26 20:55 ` James Simmons
2019-02-27 0:51 ` NeilBrown
2019-02-27 0:54 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 25/37] lustre: deprecate libcfs_debug_vmsg2 NeilBrown
2019-02-24 20:02 ` James Simmons
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` NeilBrown [this message]
2019-02-27 6:32 ` [lustre-devel] [PATCH 30/37] lustre: handle: move refcount into the lustre_handle Andreas Dilger
2019-02-27 21:48 ` NeilBrown
2019-02-27 22:14 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 28/37] lustre: remove scope and source from class_incref and class_decref NeilBrown
2019-02-27 6:52 ` Andreas Dilger
2019-02-28 0:39 ` NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 26/37] lustre: remove libcfs_debug_vmsg2 NeilBrown
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 23/37] lustre: prefer to use tabs for alignment NeilBrown
2019-02-24 18:51 ` James Simmons
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 27/37] lustre: discard lu_ref NeilBrown
2019-02-24 20:28 ` James Simmons
2019-02-27 1:17 ` NeilBrown
2019-02-27 5:35 ` Andreas Dilger
2019-03-01 6:45 ` Mike Pershin
2019-02-19 0:09 ` [lustre-devel] [PATCH 29/37] lustre: handles: discard h_owner in favour of h_ops NeilBrown
2019-02-27 6:37 ` Andreas Dilger
2019-02-27 21:41 ` NeilBrown
2019-02-28 6:41 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 33/37] lustre: portals_handle: remove locking from class_handle2object() NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 34/37] lustre: portals_handle: use hlist for hash lists NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 31/37] lustre: discard OBD_FREE_RCU NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 24/37] lustre: lu_object: remove extra newline from debug printing NeilBrown
2019-02-24 19:08 ` James Simmons
2019-02-25 18:16 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 35/37] lustre: portals_handle: discard h_lock NeilBrown
2019-02-19 0:09 ` [lustre-devel] [PATCH 37/37] lustre: obd_sysfs: error-check value stored in jobid_var NeilBrown
2019-02-27 6:17 ` Andreas Dilger
2019-03-01 2:35 ` NeilBrown
2019-03-01 8:32 ` Andreas Dilger
2019-03-01 14:30 ` Patrick Farrell
2019-03-14 0:34 ` NeilBrown
2019-03-14 14:12 ` Patrick Farrell
2019-03-14 22:56 ` NeilBrown
2019-03-14 23:05 ` Andreas Dilger
2019-02-19 0:09 ` [lustre-devel] [PATCH 36/37] lustre: remove unused fields from struct obd_device NeilBrown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=155053494654.24125.18407080080202016099.stgit@noble.brown \
--to=neilb@suse.com \
--cc=lustre-devel@lists.lustre.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).