Commit 6736cd0b authored by Andreas Dilger's avatar Andreas Dilger Committed by Greg Kroah-Hartman

staging: lustre: obdclass: remove structure holes to reduce memory

Fix the alignment of fields in commonly-used structures to reduce
memory usage on the client and server.  Structures fixed:

ptlrpc_reply_state: reduced by 8 bytes
obd_device:         reduced by 16 bytes
niobuf_local:       reduced by 8 bytes
Signed-off-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3281
Reviewed-on: http://review.whamcloud.com/16692Reviewed-by: default avatarDmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: default avatarAlex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarJames Simmons <jsimmons@infradead.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f6763b68
...@@ -438,6 +438,10 @@ struct ptlrpc_reply_state { ...@@ -438,6 +438,10 @@ struct ptlrpc_reply_state {
unsigned long rs_committed:1;/* the transaction was committed unsigned long rs_committed:1;/* the transaction was committed
* and the rs was dispatched * and the rs was dispatched
*/ */
atomic_t rs_refcount; /* number of users */
/** Number of locks awaiting client ACK */
int rs_nlocks;
/** Size of the state */ /** Size of the state */
int rs_size; int rs_size;
/** opcode */ /** opcode */
...@@ -450,7 +454,6 @@ struct ptlrpc_reply_state { ...@@ -450,7 +454,6 @@ struct ptlrpc_reply_state {
struct ptlrpc_service_part *rs_svcpt; struct ptlrpc_service_part *rs_svcpt;
/** Lnet metadata handle for the reply */ /** Lnet metadata handle for the reply */
lnet_handle_md_t rs_md_h; lnet_handle_md_t rs_md_h;
atomic_t rs_refcount;
/** Context for the service thread */ /** Context for the service thread */
struct ptlrpc_svc_ctx *rs_svc_ctx; struct ptlrpc_svc_ctx *rs_svc_ctx;
...@@ -467,8 +470,6 @@ struct ptlrpc_reply_state { ...@@ -467,8 +470,6 @@ struct ptlrpc_reply_state {
*/ */
struct lustre_msg *rs_msg; /* reply message */ struct lustre_msg *rs_msg; /* reply message */
/** Number of locks awaiting client ACK */
int rs_nlocks;
/** Handles of locks awaiting client reply ACK */ /** Handles of locks awaiting client reply ACK */
struct lustre_handle rs_locks[RS_MAX_LOCKS]; struct lustre_handle rs_locks[RS_MAX_LOCKS];
/** Lock modes of locks in \a rs_locks */ /** Lock modes of locks in \a rs_locks */
......
...@@ -401,9 +401,9 @@ struct niobuf_local { ...@@ -401,9 +401,9 @@ struct niobuf_local {
__u32 lnb_page_offset; __u32 lnb_page_offset;
__u32 lnb_len; __u32 lnb_len;
__u32 lnb_flags; __u32 lnb_flags;
int lnb_rc;
struct page *lnb_page; struct page *lnb_page;
void *lnb_data; void *lnb_data;
int lnb_rc;
}; };
#define LUSTRE_FLD_NAME "fld" #define LUSTRE_FLD_NAME "fld"
...@@ -504,15 +504,14 @@ struct lvfs_run_ctxt { ...@@ -504,15 +504,14 @@ struct lvfs_run_ctxt {
struct obd_device { struct obd_device {
struct obd_type *obd_type; struct obd_type *obd_type;
__u32 obd_magic; u32 obd_magic; /* OBD_DEVICE_MAGIC */
int obd_minor; /* device number: lctl dl */
struct lu_device *obd_lu_dev;
/* common and UUID name of this device */ /* common and UUID name of this device */
char obd_name[MAX_OBD_NAME]; struct obd_uuid obd_uuid;
struct obd_uuid obd_uuid; char obd_name[MAX_OBD_NAME];
struct lu_device *obd_lu_dev;
int obd_minor;
/* bitfield modification is protected by obd_dev_lock */ /* bitfield modification is protected by obd_dev_lock */
unsigned long obd_attached:1, /* finished attach */ unsigned long obd_attached:1, /* finished attach */
obd_set_up:1, /* finished setup */ obd_set_up:1, /* finished setup */
...@@ -536,22 +535,22 @@ struct obd_device { ...@@ -536,22 +535,22 @@ struct obd_device {
unsigned long obd_recovery_expired:1; unsigned long obd_recovery_expired:1;
/* uuid-export hash body */ /* uuid-export hash body */
struct cfs_hash *obd_uuid_hash; struct cfs_hash *obd_uuid_hash;
atomic_t obd_refcount;
wait_queue_head_t obd_refcount_waitq; wait_queue_head_t obd_refcount_waitq;
struct list_head obd_exports; struct list_head obd_exports;
struct list_head obd_unlinked_exports; struct list_head obd_unlinked_exports;
struct list_head obd_delayed_exports; struct list_head obd_delayed_exports;
atomic_t obd_refcount;
int obd_num_exports; int obd_num_exports;
spinlock_t obd_nid_lock; spinlock_t obd_nid_lock;
struct ldlm_namespace *obd_namespace; struct ldlm_namespace *obd_namespace;
struct ptlrpc_client obd_ldlm_client; /* XXX OST/MDS only */ struct ptlrpc_client obd_ldlm_client; /* XXX OST/MDS only */
/* a spinlock is OK for what we do now, may need a semaphore later */ /* a spinlock is OK for what we do now, may need a semaphore later */
spinlock_t obd_dev_lock; /* protect OBD bitfield above */ spinlock_t obd_dev_lock; /* protect OBD bitfield above */
struct mutex obd_dev_mutex;
__u64 obd_last_committed;
spinlock_t obd_osfs_lock; spinlock_t obd_osfs_lock;
struct obd_statfs obd_osfs; /* locked by obd_osfs_lock */ struct obd_statfs obd_osfs; /* locked by obd_osfs_lock */
__u64 obd_osfs_age; __u64 obd_osfs_age;
u64 obd_last_committed;
struct mutex obd_dev_mutex;
struct lvfs_run_ctxt obd_lvfs_ctxt; struct lvfs_run_ctxt obd_lvfs_ctxt;
struct obd_llog_group obd_olg; /* default llog group */ struct obd_llog_group obd_olg; /* default llog group */
struct obd_device *obd_observer; struct obd_device *obd_observer;
...@@ -565,12 +564,13 @@ struct obd_device { ...@@ -565,12 +564,13 @@ struct obd_device {
struct lov_obd lov; struct lov_obd lov;
struct lmv_obd lmv; struct lmv_obd lmv;
} u; } u;
/* Fields used by LProcFS */ /* Fields used by LProcFS */
unsigned int obd_cntr_base; struct lprocfs_stats *obd_stats;
struct lprocfs_stats *obd_stats; unsigned int obd_cntr_base;
unsigned int md_cntr_base; struct lprocfs_stats *md_stats;
struct lprocfs_stats *md_stats; unsigned int md_cntr_base;
struct dentry *obd_debugfs_entry; struct dentry *obd_debugfs_entry;
struct dentry *obd_svc_debugfs_entry; struct dentry *obd_svc_debugfs_entry;
...@@ -582,9 +582,11 @@ struct obd_device { ...@@ -582,9 +582,11 @@ struct obd_device {
/** /**
* Ldlm pool part. Save last calculated SLV and Limit. * Ldlm pool part. Save last calculated SLV and Limit.
*/ */
rwlock_t obd_pool_lock; rwlock_t obd_pool_lock;
int obd_pool_limit; u64 obd_pool_slv;
__u64 obd_pool_slv; int obd_pool_limit;
int obd_conn_inprogress;
/** /**
* A list of outstanding class_incref()'s against this obd. For * A list of outstanding class_incref()'s against this obd. For
...@@ -592,8 +594,6 @@ struct obd_device { ...@@ -592,8 +594,6 @@ struct obd_device {
*/ */
struct lu_ref obd_reference; struct lu_ref obd_reference;
int obd_conn_inprogress;
struct kobject obd_kobj; /* sysfs object */ struct kobject obd_kobj; /* sysfs object */
struct completion obd_kobj_unregister; struct completion obd_kobj_unregister;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment