To correctly propagate error code from lock_vma_range(), change it to return the error code instead of the boolean. This simplifies error propagation code. Signed-off-by: Suren Baghdasaryan --- fs/proc/task_mmu.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index d32408f7cd5e..023422fcee12 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -162,13 +162,13 @@ static void unlock_ctx_vma(struct proc_maps_locking_ctx *lock_ctx) } } -static inline bool lock_vma_range(struct seq_file *m, - struct proc_maps_locking_ctx *lock_ctx) +static inline int lock_vma_range(struct seq_file *m, + struct proc_maps_locking_ctx *lock_ctx) { rcu_read_lock(); reset_lock_ctx(lock_ctx); - return true; + return 0; } static inline void unlock_vma_range(struct proc_maps_locking_ctx *lock_ctx) @@ -245,10 +245,10 @@ static inline void unlock_ctx_mm(struct proc_maps_locking_ctx *lock_ctx) mmap_read_unlock(lock_ctx->mm); } -static inline bool lock_vma_range(struct seq_file *m, +static inline int lock_vma_range(struct seq_file *m, struct proc_maps_locking_ctx *lock_ctx) { - return lock_ctx_mm(lock_ctx) == 0; + return lock_ctx_mm(lock_ctx); } static inline void unlock_vma_range(struct proc_maps_locking_ctx *lock_ctx) @@ -311,6 +311,7 @@ static void *m_start(struct seq_file *m, loff_t *ppos) struct proc_maps_locking_ctx *lock_ctx; loff_t last_addr = *ppos; struct mm_struct *mm; + int err; /* See m_next(). Zero at the start or after lseek. */ if (last_addr == SENTINEL_VMA_END) @@ -328,11 +329,12 @@ static void *m_start(struct seq_file *m, loff_t *ppos) return NULL; } - if (!lock_vma_range(m, lock_ctx)) { + err = lock_vma_range(m, lock_ctx); + if (err) { mmput(mm); put_task_struct(priv->task); priv->task = NULL; - return ERR_PTR(-EINTR); + return ERR_PTR(err); } /* base-commit: e178a530a81621a29efbca49b3b78202a18236e4 -- 2.54.0.1032.g2f8565e1d1-goog