OSDN Git Service

Merge tag 'trace-v5.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Apr 2019 18:09:55 +0000 (11:09 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Apr 2019 18:09:55 +0000 (11:09 -0700)
Pull tracing fixes from Steven Rostedt:
 "Three tracing fixes:

   - Use "nosteal" for ring buffer splice pages

   - Memory leak fix in error path of trace_pid_write()

   - Fix preempt_enable_no_resched() (use preempt_enable()) in ring
     buffer code"

* tag 'trace-v5.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  trace: Fix preempt_enable_no_resched() abuse
  tracing: Fix a memory leak by early error exit in trace_pid_write()
  tracing: Fix buffer_ref pipe ops

1  2 
fs/splice.c
include/linux/pipe_fs_i.h
kernel/trace/trace.c

diff --cc fs/splice.c
Simple merge
@@@ -173,9 -171,10 +173,10 @@@ struct pipe_inode_info *alloc_pipe_info
  void free_pipe_info(struct pipe_inode_info *);
  
  /* Generic pipe buffer ops functions */
 -void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
 +bool generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
  int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *);
  int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);
+ int generic_pipe_buf_nosteal(struct pipe_inode_info *, struct pipe_buffer *);
  void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *);
  void pipe_buf_mark_unmergeable(struct pipe_buffer *buf);
  
@@@ -7046,11 -7053,7 +7053,11 @@@ static bool buffer_pipe_buf_get(struct 
  {
        struct buffer_ref *ref = (struct buffer_ref *)buf->private;
  
-       if (ref->ref > INT_MAX/2)
++      if (refcount_read(&ref->refcount) > INT_MAX/2)
 +              return false;
 +
-       ref->ref++;
+       refcount_inc(&ref->refcount);
 +      return true;
  }
  
  /* Pipe buffer operations for a buffer. */