From e66add8a304ca610b74ecbbe48cec72dba582340 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Wed, 4 May 2016 19:05:28 +0530 Subject: cluster/afr: Do heals with shd pid Multi-threaded healing doesn't create synctask with shd pid, this leads to healing problems when quota exceeds. BUG: 1332994 Change-Id: I80f57c1923756f3298730b8820498127024e1209 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/14211 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Ravishankar N --- libglusterfs/src/syncop-utils.c | 19 ++++++++++--------- libglusterfs/src/syncop-utils.h | 6 +++--- 2 files changed, 13 insertions(+), 12 deletions(-) (limited to 'libglusterfs/src') diff --git a/libglusterfs/src/syncop-utils.c b/libglusterfs/src/syncop-utils.c index 7421f81f46c..8f25db237f5 100644 --- a/libglusterfs/src/syncop-utils.c +++ b/libglusterfs/src/syncop-utils.c @@ -284,10 +284,11 @@ _dir_scan_job_fn (void *data) } static int -_run_dir_scan_task (xlator_t *subvol, loc_t *parent, gf_dirent_t *q, - gf_dirent_t *entry, int *retval, pthread_mutex_t *mut, - pthread_cond_t *cond, uint32_t *jobs_running, - uint32_t *qlen, syncop_dir_scan_fn_t fn, void *data) +_run_dir_scan_task (call_frame_t *frame, xlator_t *subvol, loc_t *parent, + gf_dirent_t *q, gf_dirent_t *entry, int *retval, + pthread_mutex_t *mut, pthread_cond_t *cond, + uint32_t *jobs_running, uint32_t *qlen, + syncop_dir_scan_fn_t fn, void *data) { int ret = 0; struct syncop_dir_scan_data *scan_data = NULL; @@ -313,7 +314,7 @@ _run_dir_scan_task (xlator_t *subvol, loc_t *parent, gf_dirent_t *q, scan_data->retval = retval; ret = synctask_new (subvol->ctx->env, _dir_scan_job_fn, - _dir_scan_job_fn_cbk, NULL, scan_data); + _dir_scan_job_fn_cbk, frame, scan_data); out: if (ret < 0) { gf_dirent_entry_free (entry); @@ -329,9 +330,9 @@ out: } int -syncop_mt_dir_scan (xlator_t *subvol, loc_t *loc, int pid, void *data, - syncop_dir_scan_fn_t fn, dict_t *xdata, uint32_t max_jobs, - uint32_t max_qlen) +syncop_mt_dir_scan (call_frame_t *frame, xlator_t *subvol, loc_t *loc, int pid, + void *data, syncop_dir_scan_fn_t fn, dict_t *xdata, + uint32_t max_jobs, uint32_t max_qlen) { fd_t *fd = NULL; uint64_t offset = 0; @@ -428,7 +429,7 @@ syncop_mt_dir_scan (xlator_t *subvol, loc_t *loc, int pid, void *data, if (!entry) continue; - ret = _run_dir_scan_task (subvol, loc, &q, entry, + ret = _run_dir_scan_task (frame, subvol, loc, &q, entry, &retval, &mut, &cond, &jobs_running, &qlen, fn, data); if (ret) diff --git a/libglusterfs/src/syncop-utils.h b/libglusterfs/src/syncop-utils.h index 52bcfd99429..3968d758c6e 100644 --- a/libglusterfs/src/syncop-utils.h +++ b/libglusterfs/src/syncop-utils.h @@ -19,9 +19,9 @@ syncop_ftw (xlator_t *subvol, loc_t *loc, int pid, void *data, void *data)); int -syncop_mt_dir_scan (xlator_t *subvol, loc_t *loc, int pid, void *data, - syncop_dir_scan_fn_t fn, dict_t *xdata, uint32_t max_jobs, - uint32_t max_qlen); +syncop_mt_dir_scan (call_frame_t *frame, xlator_t *subvol, loc_t *loc, int pid, + void *data, syncop_dir_scan_fn_t fn, dict_t *xdata, + uint32_t max_jobs, uint32_t max_qlen); int syncop_dir_scan (xlator_t *subvol, loc_t *loc, int pid, void *data, -- cgit