Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
b=19188
[fs/lustre-release.git]
/
lustre
/
obdclass
/
lu_object.c
diff --git
a/lustre/obdclass/lu_object.c
b/lustre/obdclass/lu_object.c
index
d5f6f5c
..
0c07d53
100644
(file)
--- a/
lustre/obdclass/lu_object.c
+++ b/
lustre/obdclass/lu_object.c
@@
-845,8
+845,6
@@
void lu_device_fini(struct lu_device *d)
t = d->ld_type;
if (d->ld_obd != NULL) {
t = d->ld_type;
if (d->ld_obd != NULL) {
- /* finish lprocfs */
- lprocfs_obd_cleanup(d->ld_obd);
d->ld_obd->obd_lu_dev = NULL;
d->ld_obd = NULL;
}
d->ld_obd->obd_lu_dev = NULL;
d->ld_obd = NULL;
}
@@
-1094,13
+1092,16
@@
void lu_context_key_degister(struct lu_context_key *key)
lu_context_key_quiesce(key);
++key_set_version;
lu_context_key_quiesce(key);
++key_set_version;
- key_fini(&lu_shrink_env.le_ctx, key->lct_index);
-
- if (atomic_read(&key->lct_used) > 1)
- CERROR("key has instances.\n");
spin_lock(&lu_keys_guard);
spin_lock(&lu_keys_guard);
- lu_keys[key->lct_index] = NULL;
+ key_fini(&lu_shrink_env.le_ctx, key->lct_index);
+ if (lu_keys[key->lct_index]) {
+ lu_keys[key->lct_index] = NULL;
+ lu_ref_fini(&key->lct_reference);
+ }
spin_unlock(&lu_keys_guard);
spin_unlock(&lu_keys_guard);
+
+ LASSERTF(atomic_read(&key->lct_used) == 1, "key has instances: %d\n",
+ atomic_read(&key->lct_used));
}
EXPORT_SYMBOL(lu_context_key_degister);
}
EXPORT_SYMBOL(lu_context_key_degister);
@@
-1242,6
+1243,7
@@
static void keys_fini(struct lu_context *ctx)
{
int i;
{
int i;
+ spin_lock(&lu_keys_guard);
if (ctx->lc_value != NULL) {
for (i = 0; i < ARRAY_SIZE(lu_keys); ++i)
key_fini(ctx, i);
if (ctx->lc_value != NULL) {
for (i = 0; i < ARRAY_SIZE(lu_keys); ++i)
key_fini(ctx, i);
@@
-1249,6
+1251,7
@@
static void keys_fini(struct lu_context *ctx)
ARRAY_SIZE(lu_keys) * sizeof ctx->lc_value[0]);
ctx->lc_value = NULL;
}
ARRAY_SIZE(lu_keys) * sizeof ctx->lc_value[0]);
ctx->lc_value = NULL;
}
+ spin_unlock(&lu_keys_guard);
}
static int keys_fill(struct lu_context *ctx)
}
static int keys_fill(struct lu_context *ctx)
@@
-1429,8
+1432,11
@@
static int lu_cache_shrink(int nr, unsigned int gfp_mask)
int remain = nr;
CFS_LIST_HEAD(splice);
int remain = nr;
CFS_LIST_HEAD(splice);
- if (nr != 0 && !(gfp_mask & __GFP_FS))
- return -1;
+ if (nr != 0) {
+ if (!(gfp_mask & __GFP_FS))
+ return -1;
+ CDEBUG(D_INODE, "Shrink %d objects\n", nr);
+ }
down(&lu_sites_guard);
list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
down(&lu_sites_guard);
list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
@@
-1445,11
+1451,15
@@
static int lu_cache_shrink(int nr, unsigned int gfp_mask)
read_lock(&s->ls_guard);
cached += s->ls_total - s->ls_busy;
read_unlock(&s->ls_guard);
read_lock(&s->ls_guard);
cached += s->ls_total - s->ls_busy;
read_unlock(&s->ls_guard);
- if (remain <= 0)
+ if (
nr &&
remain <= 0)
break;
}
list_splice(&splice, lu_sites.prev);
up(&lu_sites_guard);
break;
}
list_splice(&splice, lu_sites.prev);
up(&lu_sites_guard);
+
+ cached = (cached / 100) * sysctl_vfs_cache_pressure;
+ if (nr == 0)
+ CDEBUG(D_INODE, "%d objects cached\n", cached);
return cached;
}
return cached;
}
@@
-1466,7
+1476,7
@@
struct lu_env lu_debugging_env;
* Debugging printer function using printk().
*/
int lu_printk_printer(const struct lu_env *env,
* Debugging printer function using printk().
*/
int lu_printk_printer(const struct lu_env *env,
- void *
_
, const char *format, ...)
+ void *
unused
, const char *format, ...)
{
va_list args;
{
va_list args;
@@
-1528,6
+1538,10
@@
int lu_global_init(void)
CDEBUG(D_CONSOLE, "Lustre LU module (%p).\n", &lu_keys);
CDEBUG(D_CONSOLE, "Lustre LU module (%p).\n", &lu_keys);
+ result = lu_ref_global_init();
+ if (result != 0)
+ return result;
+
LU_CONTEXT_KEY_INIT(&lu_global_key);
result = lu_context_key_register(&lu_global_key);
if (result != 0)
LU_CONTEXT_KEY_INIT(&lu_global_key);
result = lu_context_key_register(&lu_global_key);
if (result != 0)
@@
-1543,9
+1557,6
@@
int lu_global_init(void)
if (result != 0)
return result;
if (result != 0)
return result;
- result = lu_ref_global_init();
- if (result != 0)
- return result;
/*
* seeks estimation: 3 seeks to read a record from oi, one to read
* inode, one for ea. Unfortunately setting this high value results in
/*
* seeks estimation: 3 seeks to read a record from oi, one to read
* inode, one for ea. Unfortunately setting this high value results in
@@
-1678,6
+1689,11
@@
void fid_pack(struct lu_fid_pack *pack, const struct lu_fid *fid,
} else {
unsigned char *small_befider;
} else {
unsigned char *small_befider;
+ /* as lower 24 bits of FID_SEQ_START are zero, no need to
+ * subtract its value from seq */
+
+ CLASSERT((FID_SEQ_START & 0xffffff) == 0);
+
small_befider = (unsigned char *)befider;
small_befider[0] = seq >> 16;
small_befider = (unsigned char *)befider;
small_befider[0] = seq >> 16;