performance/stat-prefetch: remove lock member in sp_fd_ctx_t.
- since the lifetime of fd context can be no longer than the fd, we can use lock in fd. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 405 (Segmentation fault in stat-prefetch.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=405
This commit is contained in:
parent
81af21adec
commit
ca4c8115a8
@ -253,11 +253,7 @@ __sp_get_cache_fd (xlator_t *this, fd_t *fd)
|
||||
|
||||
fd_ctx = (void *)(long) value;
|
||||
|
||||
LOCK (&fd_ctx->lock);
|
||||
{
|
||||
cache = fd_ctx->cache;
|
||||
}
|
||||
UNLOCK (&fd_ctx->lock);
|
||||
cache = fd_ctx->cache;
|
||||
|
||||
out:
|
||||
return cache;
|
||||
@ -317,9 +313,6 @@ sp_fd_ctx_init (void)
|
||||
sp_fd_ctx_t *fd_ctx = NULL;
|
||||
|
||||
fd_ctx = CALLOC (1, sizeof (*fd_ctx));
|
||||
if (fd_ctx) {
|
||||
LOCK_INIT (&fd_ctx->lock);
|
||||
}
|
||||
|
||||
return fd_ctx;
|
||||
}
|
||||
@ -367,19 +360,16 @@ sp_del_cache_fd (xlator_t *this, fd_t *fd)
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = fd_ctx_get (fd, this, &value);
|
||||
if (ret == -1) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
fd_ctx = (void *)(long) value;
|
||||
|
||||
LOCK (&fd_ctx->lock);
|
||||
LOCK (&fd->lock);
|
||||
{
|
||||
cache = fd_ctx->cache;
|
||||
fd_ctx->cache = NULL;
|
||||
ret = __fd_ctx_get (fd, this, &value);
|
||||
if (ret == 0) {
|
||||
fd_ctx = (void *)(long) value;
|
||||
cache = fd_ctx->cache;
|
||||
fd_ctx->cache = NULL;
|
||||
}
|
||||
}
|
||||
UNLOCK (&fd_ctx->lock);
|
||||
UNLOCK (&fd->lock);
|
||||
|
||||
out:
|
||||
return cache;
|
||||
@ -434,15 +424,11 @@ __sp_put_cache (xlator_t *this, fd_t *fd, sp_cache_t *cache)
|
||||
}
|
||||
}
|
||||
|
||||
LOCK (&fd_ctx->lock);
|
||||
{
|
||||
if (fd_ctx->cache) {
|
||||
sp_cache_free (fd_ctx->cache);
|
||||
}
|
||||
|
||||
fd_ctx->cache = cache;
|
||||
if (fd_ctx->cache) {
|
||||
sp_cache_free (fd_ctx->cache);
|
||||
}
|
||||
UNLOCK (&fd_ctx->lock);
|
||||
|
||||
fd_ctx->cache = cache;
|
||||
|
||||
out:
|
||||
return ret;
|
||||
|
@ -37,25 +37,25 @@
|
||||
|
||||
struct sp_cache {
|
||||
rbthash_table_t *table;
|
||||
uint64_t expected_offset; /* Offset where the next read will
|
||||
* happen.
|
||||
*/
|
||||
gf_lock_t lock;
|
||||
unsigned long miss;
|
||||
unsigned long hits;
|
||||
uint64_t expected_offset; /* Offset where the next read will
|
||||
* happen.
|
||||
*/
|
||||
gf_lock_t lock;
|
||||
unsigned long miss;
|
||||
unsigned long hits;
|
||||
uint32_t ref;
|
||||
};
|
||||
typedef struct sp_cache sp_cache_t;
|
||||
|
||||
struct sp_fd_ctx {
|
||||
sp_cache_t *cache;
|
||||
inode_t *parent_inode; /*
|
||||
inode_t *parent_inode; /*
|
||||
* inode corresponding to dirname (path)
|
||||
*/
|
||||
char *name; /*
|
||||
* basename of path on which this fd is
|
||||
* basename of path on which this fd is
|
||||
* opened
|
||||
*/
|
||||
gf_lock_t lock;
|
||||
};
|
||||
typedef struct sp_fd_ctx sp_fd_ctx_t;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user