summaryrefslogtreecommitdiffstats
path: root/xlators/performance/io-threads
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/performance/io-threads')
-rw-r--r--xlators/performance/io-threads/src/io-threads.c268
-rw-r--r--xlators/performance/io-threads/src/io-threads.h181
2 files changed, 250 insertions, 199 deletions
diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c
index 9cb992e0b49..ebcb9e68c6e 100644
--- a/xlators/performance/io-threads/src/io-threads.c
+++ b/xlators/performance/io-threads/src/io-threads.c
@@ -34,14 +34,27 @@
typedef void *(*iot_worker_fn)(void*);
-void _iot_queue (iot_worker_t *worker, iot_request_t *req);
-iot_request_t * iot_init_request (call_stub_t *stub);
-void iot_startup_workers (iot_worker_t **workers, int start_idx, int count,
- iot_worker_fn workerfunc);
-void * iot_worker_unordered (void *arg);
-void * iot_worker_ordered (void *arg);
-void iot_startup_worker (iot_worker_t *worker, iot_worker_fn workerfunc);
-void iot_destroy_request (iot_request_t * req);
+void
+_iot_queue (iot_worker_t *worker, iot_request_t *req);
+
+iot_request_t *
+iot_init_request (call_stub_t *stub);
+
+void
+iot_startup_workers (iot_worker_t **workers, int start_idx, int count,
+ iot_worker_fn workerfunc);
+
+void *
+iot_worker_unordered (void *arg);
+
+void *
+iot_worker_ordered (void *arg);
+
+void
+iot_startup_worker (iot_worker_t *worker, iot_worker_fn workerfunc);
+
+void
+iot_destroy_request (iot_request_t * req);
/* I know this function modularizes things a bit too much,
@@ -51,8 +64,7 @@ void iot_destroy_request (iot_request_t * req);
*/
void
iot_request_queue_and_thread_fire (iot_worker_t *worker,
- iot_worker_fn workerfunc,
- iot_request_t *req)
+ iot_worker_fn workerfunc, iot_request_t *req)
{
pthread_mutex_lock (&worker->qlock);
{
@@ -149,7 +161,7 @@ iot_ordered_request_balancer (iot_conf_t *conf, inode_t *inode, uint64_t *idx)
* than 0.
*/
if ((*idx >= (uint64_t)conf->max_o_threads)) {
- gf_log (conf->this->name, GF_LOG_ERROR,
+ gf_log (conf->this->name, GF_LOG_DEBUG,
"inode context returned insane thread index %"
PRIu64, *idx);
ret = -1;
@@ -169,7 +181,7 @@ iot_schedule_ordered (iot_conf_t *conf, inode_t *inode, call_stub_t *stub)
int balstatus = 0;
if (inode == NULL) {
- gf_log (conf->this->name, GF_LOG_ERROR,
+ gf_log (conf->this->name, GF_LOG_DEBUG,
"Got NULL inode for ordered request");
STACK_UNWIND (stub->frame, -1, EINVAL, NULL);
call_stub_destroy (stub);
@@ -180,7 +192,7 @@ iot_schedule_ordered (iot_conf_t *conf, inode_t *inode, call_stub_t *stub)
{
balstatus = iot_ordered_request_balancer (conf, inode, &idx);
if (balstatus < 0) {
- gf_log (conf->this->name, GF_LOG_ERROR,
+ gf_log (conf->this->name, GF_LOG_DEBUG,
"Insane worker index. Unwinding stack");
STACK_UNWIND (stub->frame, -1, ECANCELED, NULL);
iot_destroy_request (req);
@@ -232,7 +244,7 @@ iot_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)
stub = fop_lookup_stub (frame, iot_lookup_wrapper, loc, xattr_req);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get lookup stub");
+ "cannot create lookup stub (out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, NULL, NULL);
return 0;
}
@@ -271,7 +283,8 @@ iot_chmod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode)
stub = fop_chmod_stub (frame, iot_chmod_wrapper, loc, mode);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get chmod stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create chmod stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -315,7 +328,8 @@ iot_fchmod (call_frame_t *frame, xlator_t *this, fd_t *fd, mode_t mode)
stub = fop_fchmod_stub (frame, iot_fchmod_wrapper, fd, mode);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get fchmod stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create fchmod stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -335,8 +349,8 @@ iot_chown_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_chown_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *loc, uid_t uid, gid_t gid)
+iot_chown_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc, uid_t uid,
+ gid_t gid)
{
STACK_WIND (frame, iot_chown_cbk,
FIRST_CHILD (this),
@@ -347,15 +361,16 @@ iot_chown_wrapper (call_frame_t *frame, xlator_t *this,
int
-iot_chown (call_frame_t *frame, xlator_t *this,
- loc_t *loc, uid_t uid, gid_t gid)
+iot_chown (call_frame_t *frame, xlator_t *this, loc_t *loc, uid_t uid,
+ gid_t gid)
{
call_stub_t *stub = NULL;
fd_t *fd = NULL;
stub = fop_chown_stub (frame, iot_chown_wrapper, loc, uid, gid);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get chown stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create chown stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -394,14 +409,14 @@ iot_fchown_wrapper (call_frame_t *frame, xlator_t *this,
int
-iot_fchown (call_frame_t *frame, xlator_t *this,
- fd_t *fd, uid_t uid, gid_t gid)
+iot_fchown (call_frame_t *frame, xlator_t *this, fd_t *fd, uid_t uid, gid_t gid)
{
call_stub_t *stub = NULL;
stub = fop_fchown_stub (frame, iot_fchown_wrapper, fd, uid, gid);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get fchown stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create fchown stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -422,8 +437,8 @@ iot_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_access_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t mask)
+iot_access_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,
+ int32_t mask)
{
STACK_WIND (frame, iot_access_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->access, loc, mask);
@@ -438,7 +453,8 @@ iot_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)
stub = fop_access_stub (frame, iot_access_wrapper, loc, mask);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get access stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create access stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -451,8 +467,7 @@ iot_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)
int
iot_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- const char *path)
+ int32_t op_ret, int32_t op_errno, const char *path)
{
STACK_UNWIND (frame, op_ret, op_errno, path);
return 0;
@@ -460,8 +475,8 @@ iot_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_readlink_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *loc, size_t size)
+iot_readlink_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,
+ size_t size)
{
STACK_WIND (frame, iot_readlink_cbk,
FIRST_CHILD (this),
@@ -478,7 +493,8 @@ iot_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size)
stub = fop_readlink_stub (frame, iot_readlink_wrapper, loc, size);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get readlink stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create readlink stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -490,8 +506,8 @@ iot_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size)
int
iot_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- inode_t *inode, struct stat *buf)
+ int32_t op_ret, int32_t op_errno, inode_t *inode,
+ struct stat *buf)
{
STACK_UNWIND (frame, op_ret, op_errno, inode, buf);
return 0;
@@ -499,8 +515,8 @@ iot_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_mknod_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *loc, mode_t mode, dev_t rdev)
+iot_mknod_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,
+ dev_t rdev)
{
STACK_WIND (frame, iot_mknod_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->mknod, loc, mode, rdev);
@@ -509,14 +525,15 @@ iot_mknod_wrapper (call_frame_t *frame, xlator_t *this,
int
-iot_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc,
- mode_t mode, dev_t rdev)
+iot_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,
+ dev_t rdev)
{
call_stub_t *stub = NULL;
stub = fop_mknod_stub (frame, iot_mknod_wrapper, loc, mode, rdev);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get mknod stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create mknod stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, NULL);
return 0;
}
@@ -529,8 +546,8 @@ iot_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
iot_mkdir_cbk (call_frame_t *frame, void * cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- inode_t *inode, struct stat *buf)
+ int32_t op_ret, int32_t op_errno, inode_t *inode,
+ struct stat *buf)
{
STACK_UNWIND (frame, op_ret, op_errno, inode, buf);
return 0;
@@ -538,8 +555,7 @@ iot_mkdir_cbk (call_frame_t *frame, void * cookie, xlator_t *this,
int
-iot_mkdir_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *loc, mode_t mode)
+iot_mkdir_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode)
{
STACK_WIND (frame, iot_mkdir_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->mkdir, loc, mode);
@@ -554,7 +570,8 @@ iot_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode)
stub = fop_mkdir_stub (frame, iot_mkdir_wrapper, loc, mode);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get mkdir stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create mkdir stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, NULL);
return 0;
}
@@ -589,7 +606,8 @@ iot_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc)
stub = fop_rmdir_stub (frame, iot_rmdir_wrapper, loc);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get rmdir stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create rmdir stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -601,8 +619,8 @@ iot_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc)
int
iot_symlink_cbk (call_frame_t *frame, void * cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- inode_t *inode, struct stat *buf)
+ int32_t op_ret, int32_t op_errno, inode_t *inode,
+ struct stat *buf)
{
STACK_UNWIND (frame, op_ret, op_errno, inode, buf);
return 0;
@@ -610,8 +628,8 @@ iot_symlink_cbk (call_frame_t *frame, void * cookie, xlator_t *this,
int
-iot_symlink_wrapper (call_frame_t *frame, xlator_t *this,
- const char *linkname, loc_t *loc)
+iot_symlink_wrapper (call_frame_t *frame, xlator_t *this, const char *linkname,
+ loc_t *loc)
{
STACK_WIND (frame, iot_symlink_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->symlink, linkname, loc);
@@ -627,7 +645,8 @@ iot_symlink (call_frame_t *frame, xlator_t *this, const char *linkname,
stub = fop_symlink_stub (frame, iot_symlink_wrapper, linkname, loc);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get symlink stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create symlink stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, NULL);
return 0;
}
@@ -647,8 +666,8 @@ iot_rename_cbk (call_frame_t *frame, void * cookie, xlator_t *this,
int
-iot_rename_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *oldloc, loc_t *newloc)
+iot_rename_wrapper (call_frame_t *frame, xlator_t *this, loc_t *oldloc,
+ loc_t *newloc)
{
STACK_WIND (frame, iot_rename_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->rename, oldloc, newloc);
@@ -657,14 +676,14 @@ iot_rename_wrapper (call_frame_t *frame, xlator_t *this,
int
-iot_rename (call_frame_t *frame, xlator_t *this,
- loc_t *oldloc, loc_t *newloc)
+iot_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)
{
call_stub_t *stub = NULL;
stub = fop_rename_stub (frame, iot_rename_wrapper, oldloc, newloc);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get rename stub");
+ gf_log (this->name, GF_LOG_DEBUG, "cannot create rename stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -676,8 +695,8 @@ iot_rename (call_frame_t *frame, xlator_t *this,
int
-iot_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno, fd_t *fd)
+iot_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,
+ int32_t op_errno, fd_t *fd)
{
STACK_UNWIND (frame, op_ret, op_errno, fd);
return 0;
@@ -695,15 +714,16 @@ iot_open_wrapper (call_frame_t * frame, xlator_t * this, loc_t *loc,
int
-iot_open (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, fd_t *fd)
+iot_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
+ fd_t *fd)
{
call_stub_t *stub = NULL;
stub = fop_open_stub (frame, iot_open_wrapper, loc, flags, fd);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get open call stub");
+ "cannot create open call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, 0);
return 0;
}
@@ -715,8 +735,8 @@ iot_open (call_frame_t *frame, xlator_t *this,
int
iot_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- fd_t *fd, inode_t *inode, struct stat *stbuf)
+ int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,
+ struct stat *stbuf)
{
STACK_UNWIND (frame, op_ret, op_errno, fd, inode, stbuf);
return 0;
@@ -736,8 +756,8 @@ iot_create_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
-iot_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+iot_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
+ mode_t mode, fd_t *fd)
{
call_stub_t *stub = NULL;
@@ -745,7 +765,8 @@ iot_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
fd);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get create call stub");
+ "cannot create \"create\" call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, 0);
return 0;
}
@@ -757,9 +778,8 @@ iot_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
iot_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- struct iovec *vector, int32_t count,
- struct stat *stbuf, struct iobref *iobref)
+ int32_t op_ret, int32_t op_errno, struct iovec *vector,
+ int32_t count, struct stat *stbuf, struct iobref *iobref)
{
STACK_UNWIND (frame, op_ret, op_errno, vector, count, stbuf, iobref);
@@ -768,8 +788,8 @@ iot_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_readv_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd,
- size_t size, off_t offset)
+iot_readv_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
+ off_t offset)
{
STACK_WIND (frame, iot_readv_cbk,
FIRST_CHILD(this),
@@ -788,7 +808,8 @@ iot_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
stub = fop_readv_stub (frame, iot_readv_wrapper, fd, size, offset);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get readv call stub");
+ "cannot create readv call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, 0);
return 0;
}
@@ -826,7 +847,8 @@ iot_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)
stub = fop_flush_stub (frame, iot_flush_wrapper, fd);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get flush_cbk call stub");
+ "cannot create flush_cbk call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -865,7 +887,8 @@ iot_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync)
stub = fop_fsync_stub (frame, iot_fsync_wrapper, fd, datasync);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fsync_cbk call stub");
+ "cannot create fsync_cbk call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -877,8 +900,7 @@ iot_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync)
int
iot_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- struct stat *stbuf)
+ int32_t op_ret, int32_t op_errno, struct stat *stbuf)
{
STACK_UNWIND (frame, op_ret, op_errno, stbuf);
return 0;
@@ -910,7 +932,8 @@ iot_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get writev call stub");
+ "cannot create writev call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -952,7 +975,8 @@ iot_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_lk call stub");
+ "cannot create fop_lk call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -991,7 +1015,8 @@ iot_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)
stub = fop_stat_stub (frame, iot_stat_wrapper, loc);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_stat call stub");
+ "cannot create fop_stat call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1040,7 +1065,8 @@ iot_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)
stub = fop_fstat_stub (frame, iot_fstat_wrapper, fd);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_fstat call stub");
+ "cannot create fop_fstat call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1082,7 +1108,8 @@ iot_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_stat call stub");
+ "cannot create fop_stat call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1111,8 +1138,8 @@ iot_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_ftruncate_wrapper (call_frame_t *frame, xlator_t *this,
- fd_t *fd, off_t offset)
+iot_ftruncate_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd,
+ off_t offset)
{
STACK_WIND (frame, iot_ftruncate_cbk,
FIRST_CHILD(this),
@@ -1130,7 +1157,8 @@ iot_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)
stub = fop_ftruncate_stub (frame, iot_ftruncate_wrapper, fd, offset);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_ftruncate call stub");
+ "cannot create fop_ftruncate call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1172,7 +1200,8 @@ iot_utimens (call_frame_t *frame, xlator_t *this, loc_t *loc,
stub = fop_utimens_stub (frame, iot_utimens_wrapper, loc, tv);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_utimens call stub");
+ "cannot create fop_utimens call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1193,8 +1222,8 @@ iot_utimens (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
iot_checksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- uint8_t *file_checksum, uint8_t *dir_checksum)
+ int32_t op_ret, int32_t op_errno, uint8_t *file_checksum,
+ uint8_t *dir_checksum)
{
STACK_UNWIND (frame, op_ret, op_errno, file_checksum, dir_checksum);
return 0;
@@ -1202,8 +1231,8 @@ iot_checksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
-iot_checksum_wrapper (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags)
+iot_checksum_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,
+ int32_t flags)
{
STACK_WIND (frame, iot_checksum_cbk,
FIRST_CHILD(this),
@@ -1223,7 +1252,8 @@ iot_checksum (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags)
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_checksum call stub");
+ "cannot create fop_checksum call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, NULL);
return 0;
}
@@ -1261,7 +1291,8 @@ iot_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)
stub = fop_unlink_stub (frame, iot_unlink_wrapper, loc);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
- "cannot get fop_unlink call stub");
+ "cannot create fop_unlink call stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -1298,7 +1329,8 @@ iot_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)
stub = fop_link_stub (frame, iot_link_wrapper, oldloc, newloc);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get link stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create link stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL, NULL);
return 0;
}
@@ -1335,7 +1367,8 @@ iot_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)
stub = fop_opendir_stub (frame, iot_opendir_wrapper, loc, fd);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get opendir stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create opendir stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1357,7 +1390,7 @@ iot_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
iot_fsyncdir_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd,
- int datasync)
+ int datasync)
{
STACK_WIND (frame, iot_fsyncdir_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->fsyncdir, fd, datasync);
@@ -1372,7 +1405,8 @@ iot_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync)
stub = fop_fsyncdir_stub (frame, iot_fsyncdir_wrapper, fd, datasync);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get fsyncdir stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create fsyncdir stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -1407,7 +1441,8 @@ iot_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)
stub = fop_statfs_stub (frame, iot_statfs_wrapper, loc);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get statfs stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create statfs stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1419,7 +1454,7 @@ iot_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)
int
iot_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno)
+ int32_t op_ret, int32_t op_errno)
{
STACK_UNWIND (frame, op_ret, op_errno);
return 0;
@@ -1446,7 +1481,8 @@ iot_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,
stub = fop_setxattr_stub (frame, iot_setxattr_wrapper, loc, dict,
flags);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get setxattr stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create setxattr stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1466,7 +1502,7 @@ iot_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,
int
iot_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno, dict_t *dict)
+ int32_t op_ret, int32_t op_errno, dict_t *dict)
{
STACK_UNWIND (frame, op_ret, op_errno, dict);
return 0;
@@ -1475,7 +1511,7 @@ iot_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
iot_getxattr_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,
- const char *name)
+ const char *name)
{
STACK_WIND (frame, iot_getxattr_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->getxattr, loc, name);
@@ -1492,7 +1528,8 @@ iot_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,
stub = fop_getxattr_stub (frame, iot_getxattr_wrapper, loc, name);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get getxattr stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create getxattr stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1522,7 +1559,7 @@ iot_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
iot_fgetxattr_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd,
- const char *name)
+ const char *name)
{
STACK_WIND (frame, iot_fgetxattr_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->fgetxattr, fd, name);
@@ -1538,7 +1575,8 @@ iot_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,
stub = fop_fgetxattr_stub (frame, iot_fgetxattr_wrapper, fd, name);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get fgetxattr stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create fgetxattr stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1559,7 +1597,7 @@ iot_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
iot_fsetxattr_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd,
- dict_t *dict, int32_t flags)
+ dict_t *dict, int32_t flags)
{
STACK_WIND (frame, iot_fsetxattr_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->fsetxattr, fd, dict, flags);
@@ -1576,7 +1614,8 @@ iot_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,
stub = fop_fsetxattr_stub (frame, iot_fsetxattr_wrapper, fd, dict,
flags);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get fsetxattr stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create fsetxattr stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -1615,7 +1654,8 @@ iot_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,
stub = fop_removexattr_stub (frame, iot_removexattr_wrapper, loc,
name);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR,"cannot get removexattr fop");
+ gf_log (this->name, GF_LOG_ERROR,"cannot get removexattr fop"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM);
return 0;
}
@@ -1635,8 +1675,7 @@ iot_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
iot_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- gf_dirent_t *entries)
+ int32_t op_ret, int32_t op_errno, gf_dirent_t *entries)
{
STACK_UNWIND (frame, op_ret, op_errno, entries);
return 0;
@@ -1661,7 +1700,8 @@ iot_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
stub = fop_readdir_stub (frame, iot_readdir_wrapper, fd, size, offset);
if (!stub) {
- gf_log (this->private, GF_LOG_ERROR,"cannot get readdir stub");
+ gf_log (this->private, GF_LOG_ERROR,"cannot get readdir stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1700,7 +1740,8 @@ iot_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,
stub = fop_xattrop_stub (frame, iot_xattrop_wrapper, loc, optype,
xattr);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get xattrop stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create xattrop stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -1721,7 +1762,7 @@ iot_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
iot_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno, dict_t *xattr)
+ int32_t op_ret, int32_t op_errno, dict_t *xattr)
{
STACK_UNWIND (frame, op_ret, op_errno, xattr);
return 0;
@@ -1745,7 +1786,8 @@ iot_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,
stub = fop_fxattrop_stub (frame, iot_fxattrop_wrapper, fd, optype,
xattr);
if (!stub) {
- gf_log (this->name, GF_LOG_ERROR, "cannot get fxattrop stub");
+ gf_log (this->name, GF_LOG_ERROR, "cannot create fxattrop stub"
+ "(out of memory)");
STACK_UNWIND (frame, -1, ENOMEM, NULL);
return 0;
}
@@ -2050,8 +2092,8 @@ allocate_worker (iot_conf_t * conf)
void
-allocate_workers (iot_conf_t *conf, iot_worker_t **workers,
- int start_alloc_idx, int count)
+allocate_workers (iot_conf_t *conf, iot_worker_t **workers, int start_alloc_idx,
+ int count)
{
int i;
int end_count;
diff --git a/xlators/performance/io-threads/src/io-threads.h b/xlators/performance/io-threads/src/io-threads.h
index b6a7213b1ed..aa31ece2d67 100644
--- a/xlators/performance/io-threads/src/io-threads.h
+++ b/xlators/performance/io-threads/src/io-threads.h
@@ -1,20 +1,20 @@
/*
- Copyright (c) 2006-2009 Z RESEARCH, Inc. <http://www.zresearch.com>
- This file is part of GlusterFS.
-
- GlusterFS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3 of the License,
- or (at your option) any later version.
-
- GlusterFS is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see
- <http://www.gnu.org/licenses/>.
+ Copyright (c) 2006-2009 Z RESEARCH, Inc. <http://www.zresearch.com>
+ This file is part of GlusterFS.
+
+ GlusterFS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ GlusterFS is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
*/
#ifndef __IOT_H
@@ -43,10 +43,10 @@ struct iot_worker;
struct iot_request;
struct iot_request {
- struct list_head list; /* Attaches this request to the list of
- requests.
- */
- call_stub_t *stub;
+ struct list_head list; /* Attaches this request to the list of
+ requests.
+ */
+ call_stub_t *stub;
};
#define IOT_STATE_ACTIVE 1
@@ -68,75 +68,84 @@ struct iot_request {
#define IOT_THREAD_STACK_SIZE ((size_t)(1024*1024))
struct iot_worker {
- struct list_head rqlist; /* List of requests assigned to me. */
- struct iot_conf *conf;
- int64_t q,dq;
- pthread_cond_t dq_cond;
- pthread_mutex_t qlock;
- int32_t queue_size;
- pthread_t thread;
- int state; /* What state is the thread in. */
- int thread_idx; /* Thread's index into the worker array. Since this
- will be thread local data, for ensuring that number
- of threads dont fall below a minimum, we just dont
- allow threads with specific indices to exit.
- Helps us in eliminating one place where otherwise
- a lock would have been required to update centralized
- state inside conf.
- */
+ struct list_head rqlist; /* List of requests assigned to me. */
+ struct iot_conf *conf;
+ int64_t q,dq;
+ pthread_cond_t dq_cond;
+ pthread_mutex_t qlock;
+ int32_t queue_size;
+ pthread_t thread;
+ int state; /* What state is the thread in. */
+ int thread_idx; /* Thread's index into the worker
+ array. Since this will be thread
+ local data, for ensuring that
+ number of threads dont fall below
+ a minimum, we just dont allow
+ threads with specific indices to
+ exit. Helps us in eliminating one
+ place where otherwise a lock
+ would have been required to update
+ centralized state inside conf.
+ */
};
struct iot_conf {
- int32_t thread_count;
- struct iot_worker ** workers;
-
- xlator_t *this;
- /* Config state for ordered threads. */
- pthread_mutex_t otlock; /* Used to sync any state that needs to be
- changed by the ordered threads.
- */
-
- int max_o_threads; /* Max. number of ordered threads */
- int min_o_threads; /* Min. number of ordered threads. Ordered
- thread count never falls below this
- threshold.
- */
-
- int o_idle_time; /* in Secs. The idle time after which an
- ordered thread exits.
- */
- gf_boolean_t o_scaling; /* Set to IOT_SCALING_OFF if user does not want
- thread scaling on ordered threads.
- If scaling is off, io-threads maintains
- at least min_o_threads number of threads
- and never lets any thread exit.
- */
- struct iot_worker **oworkers; /* Ordered thread pool. */
-
-
- /* Config state for unordered threads */
- pthread_mutex_t utlock; /* Used for scaling un-ordered threads. */
- struct iot_worker **uworkers; /* Un-ordered thread pool. */
- int max_u_threads; /* Number of unordered threads will not be
- higher than this.
- */
- int min_u_threads; /* Number of unordered threads should not
- fall below this value. */
- int u_idle_time; /* If an unordered thread does not get a
- request for this amount of secs, it should
- try to die.
- */
- gf_boolean_t u_scaling; /* Set to IOT_SCALING_OFF if user does not want
- thread scaling on unordered threads.
- If scaling is off, io-threads maintains
- at least min_u_threads number of threads
- and never lets any thread exit.
- */
-
- pthread_attr_t w_attr; /* Used to reduce the stack size of the
- pthread worker down from the default of
- 8MiB.
- */
+ int32_t thread_count;
+ struct iot_worker **workers;
+
+ xlator_t *this;
+ /* Config state for ordered threads. */
+ pthread_mutex_t otlock; /* Used to sync any state that needs
+ to be changed by the ordered
+ threads.
+ */
+
+ int max_o_threads; /* Max. number of ordered threads */
+ int min_o_threads; /* Min. number of ordered threads.
+ Ordered thread count never falls
+ below this threshold.
+ */
+
+ int o_idle_time; /* in Secs. The idle time after
+ which an ordered thread exits.
+ */
+ gf_boolean_t o_scaling; /* Set to IOT_SCALING_OFF if user
+ does not want thread scaling on
+ ordered threads. If scaling is
+ off, io-threads maintains at
+ least min_o_threads number of
+ threads and never lets any thread
+ exit.
+ */
+ struct iot_worker **oworkers; /* Ordered thread pool. */
+
+
+ /* Config state for unordered threads */
+ pthread_mutex_t utlock; /* Used for scaling un-ordered
+ threads. */
+ struct iot_worker **uworkers; /* Un-ordered thread pool. */
+ int max_u_threads; /* Number of unordered threads will
+ not be higher than this. */
+ int min_u_threads; /* Number of unordered threads
+ should not fall below this value.
+ */
+ int u_idle_time; /* If an unordered thread does not
+ get a request for this amount of
+ secs, it should try to die.
+ */
+ gf_boolean_t u_scaling; /* Set to IOT_SCALING_OFF if user
+ does not want thread scaling on
+ unordered threads. If scaling is
+ off, io-threads maintains at
+ least min_u_threads number of
+ threads and never lets any thread
+ exit.
+ */
+
+ pthread_attr_t w_attr; /* Used to reduce the stack size of
+ the pthread worker down from the
+ default of 8MiB.
+ */
};
typedef struct iot_conf iot_conf_t;