diff options
Diffstat (limited to 'xlators/performance/open-behind/src')
| -rw-r--r-- | xlators/performance/open-behind/src/open-behind.c | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/xlators/performance/open-behind/src/open-behind.c b/xlators/performance/open-behind/src/open-behind.c index efab88582ff..00e8906910a 100644 --- a/xlators/performance/open-behind/src/open-behind.c +++ b/xlators/performance/open-behind/src/open-behind.c @@ -351,19 +351,25 @@ err:  fd_t * -ob_get_wind_fd (xlator_t *this, fd_t *fd) +ob_get_wind_fd (xlator_t *this, fd_t *fd, uint32_t *flag)  { -	ob_conf_t  *conf = NULL; -	ob_fd_t    *ob_fd = NULL; +        fd_t       *wind_fd = NULL; +	ob_fd_t    *ob_fd   = NULL; +	ob_conf_t  *conf    = NULL;  	conf = this->private;  	ob_fd = ob_fd_ctx_get (this, fd); -	if (ob_fd && conf->use_anonymous_fd) -		return fd_anonymous (fd->inode); +	if (ob_fd && conf->use_anonymous_fd) { +                wind_fd = fd_anonymous (fd->inode); +                if ((ob_fd->flags & O_DIRECT) && (flag)) +                        *flag = *flag | O_DIRECT; +        } else { +                wind_fd = fd_ref (fd); +        } -	return fd_ref (fd); +	return wind_fd;  } @@ -378,7 +384,7 @@ ob_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,          conf = this->private;          if (!conf->read_after_open) -                wind_fd = ob_get_wind_fd (this, fd); +                wind_fd = ob_get_wind_fd (this, fd, &flags);          else                  wind_fd = fd_ref (fd); @@ -427,7 +433,7 @@ ob_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)  	call_stub_t  *stub = NULL;  	fd_t         *wind_fd = NULL; -	wind_fd = ob_get_wind_fd (this, fd); +	wind_fd = ob_get_wind_fd (this, fd, NULL);  	stub = fop_fstat_stub (frame, default_fstat_resume, wind_fd, xdata);  | 
