On 04/16, Jiri Olsa wrote: > Moving file specific code in dso_cache__read function > into separate file_read function. I'll add bpf specific > code in following patches. > > Link: http://lkml.kernel.org/n/tip-7f7d717uzrqt5ka2xp29i...@git.kernel.org > Signed-off-by: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/util/dso.c | 47 ++++++++++++++++++++++++------------------- > 1 file changed, 26 insertions(+), 21 deletions(-) > > diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c > index cb6199c1390a..6baad22ec8a9 100644 > --- a/tools/perf/util/dso.c > +++ b/tools/perf/util/dso.c > @@ -794,6 +794,30 @@ dso_cache__memcpy(struct dso_cache *cache, u64 offset, > return cache_size; > } > > +static ssize_t file_read(struct dso *dso, struct machine *machine, > + u64 offset, char *data) > +{ > + ssize_t ret; > + > + pthread_mutex_lock(&dso__data_open_lock); > + > + /* > + * dso->data.fd might be closed if other thread opened another > + * file (dso) due to open file limit (RLIMIT_NOFILE). > + */ > + try_to_open_dso(dso, machine); > + > + if (dso->data.fd < 0) { > + dso->data.status = DSO_DATA_STATUS_ERROR; pthread_mutex_unlock(&dso__data_open_lock) here?
> + return -errno; > + } > + > + ret = pread(dso->data.fd, data, DSO__DATA_CACHE_SIZE, offset); > + pthread_mutex_unlock(&dso__data_open_lock); > + > + return ret; > +} > + > static ssize_t > dso_cache__read(struct dso *dso, struct machine *machine, > u64 offset, u8 *data, ssize_t size) > @@ -803,37 +827,18 @@ dso_cache__read(struct dso *dso, struct machine > *machine, > ssize_t ret; > > do { > - u64 cache_offset; > + u64 cache_offset = offset & DSO__DATA_CACHE_MASK; > > cache = zalloc(sizeof(*cache) + DSO__DATA_CACHE_SIZE); > if (!cache) > return -ENOMEM; > > - pthread_mutex_lock(&dso__data_open_lock); > - > - /* > - * dso->data.fd might be closed if other thread opened another > - * file (dso) due to open file limit (RLIMIT_NOFILE). > - */ > - try_to_open_dso(dso, machine); > - > - if (dso->data.fd < 0) { > - ret = -errno; > - dso->data.status = DSO_DATA_STATUS_ERROR; > - break; > - } > - > - cache_offset = offset & DSO__DATA_CACHE_MASK; > - > - ret = pread(dso->data.fd, cache->data, DSO__DATA_CACHE_SIZE, > cache_offset); > - if (ret <= 0) > - break; > + ret = file_read(dso, machine, cache_offset, cache->data); > > cache->offset = cache_offset; > cache->size = ret; > } while (0); > > - pthread_mutex_unlock(&dso__data_open_lock); > > if (ret > 0) { > old = dso_cache__insert(dso, cache); > -- > 2.17.2 >