diff options
| author | Anand Avati <avati@redhat.com> | 2013-01-29 10:05:29 -0800 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-01-29 11:56:42 -0800 | 
| commit | 4cbb14cf6fc3f1b52ff0062a9fee88e2170ad454 (patch) | |
| tree | 823ab36ccf9269acbbab7178b4fa9517a04fd503 /xlators/performance/quick-read | |
| parent | 088050b257ac9cbd2115587b0f7306760c44a4a3 (diff) | |
quick-read: various fixes
- initialize xdata in qr_lookup even if it was NULL from top. This
  allows qr to do its job even if lookup originated from fuse-resolve.c
- extend test cases to include 1 second delay and retry
- fix bug while checking condition for cached unwind
  qr_readv_cached() unwinds if op_ret > 0. Therefore qr_readv()
  must wind to subvol only if !(op_ret > 0) (i.e, op_ret <= 0).
- qr_readv_cached() is using uninitialized @conf pointer. Thanks
  to Raghavendra Bhat for catching this!
Change-Id: Ifaf2ea2685e452210ef9ba3c2d1f2ab51900650c
BUG: 846240
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/4452
Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/performance/quick-read')
| -rw-r--r-- | xlators/performance/quick-read/src/quick-read.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/xlators/performance/quick-read/src/quick-read.c b/xlators/performance/quick-read/src/quick-read.c index 34e27138f26..1a0f8675ea4 100644 --- a/xlators/performance/quick-read/src/quick-read.c +++ b/xlators/performance/quick-read/src/quick-read.c @@ -372,9 +372,13 @@ gf_boolean_t  __qr_cache_is_fresh (xlator_t *this, qr_inode_t *qr_inode)  {  	qr_conf_t        *conf = NULL; +	qr_private_t     *priv = NULL;  	struct timeval    now;  	struct timeval    diff; +	priv = this->private; +	conf = &priv->conf; +  	gettimeofday (&now, NULL);  	timersub (&now, &qr_inode->last_refresh, &diff); @@ -444,6 +448,7 @@ qr_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)          qr_conf_t        *conf           = NULL;          qr_inode_t       *qr_inode       = NULL;  	int               ret            = -1; +	dict_t           *new_xdata      = NULL;          priv = this->private;          conf = &priv->conf; @@ -454,6 +459,9 @@ qr_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)  		goto wind;  	if (!xdata) +		xdata = new_xdata = dict_new (); + +	if (!xdata)  		goto wind;  	ret = 0; @@ -470,6 +478,9 @@ wind:          STACK_WIND (frame, qr_lookup_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->lookup, loc, xdata); +	if (new_xdata) +		dict_unref (new_xdata); +          return 0;  } @@ -598,7 +609,7 @@ qr_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  	if (!qr_inode)  		goto wind; -	if (qr_readv_cached (frame, qr_inode, size, offset, flags, xdata) != 0) +	if (qr_readv_cached (frame, qr_inode, size, offset, flags, xdata) <= 0)  		goto wind;  	return 0;  | 
