Merge branch 'akpm' (Andrew's patch-bomb)
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 1 Jun 2012 01:10:18 +0000 (18:10 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 1 Jun 2012 01:10:18 +0000 (18:10 -0700)
Merge misc patches from Andrew Morton:

 - the "misc" tree - stuff from all over the map

 - checkpatch updates

 - fatfs

 - kmod changes

 - procfs

 - cpumask

 - UML

 - kexec

 - mqueue

 - rapidio

 - pidns

 - some checkpoint-restore feature work.  Reluctantly.  Most of it
   delayed a release.  I'm still rather worried that we don't have a
   clear roadmap to completion for this work.

* emailed from Andrew Morton <akpm@linux-foundation.org>: (78 patches)
  kconfig: update compression algorithm info
  c/r: prctl: add ability to set new mm_struct::exe_file
  c/r: prctl: extend PR_SET_MM to set up more mm_struct entries
  c/r: procfs: add arg_start/end, env_start/end and exit_code members to /proc/$pid/stat
  syscalls, x86: add __NR_kcmp syscall
  fs, proc: introduce /proc/<pid>/task/<tid>/children entry
  sysctl: make kernel.ns_last_pid control dependent on CHECKPOINT_RESTORE
  aio/vfs: cleanup of rw_copy_check_uvector() and compat_rw_copy_check_uvector()
  eventfd: change int to __u64 in eventfd_signal()
  fs/nls: add Apple NLS
  pidns: make killed children autoreap
  pidns: use task_active_pid_ns in do_notify_parent
  rapidio/tsi721: add DMA engine support
  rapidio: add DMA engine support for RIO data transfers
  ipc/mqueue: add rbtree node caching support
  tools/selftests: add mq_perf_tests
  ipc/mqueue: strengthen checks on mqueue creation
  ipc/mqueue: correct mq_attr_ok test
  ipc/mqueue: improve performance of send/recv
  selftests: add mq_open_tests
  ...

1  2 
drivers/message/fusion/mptbase.c
include/linux/fs.h
init/Kconfig
kernel/fork.c

@@@ -1653,7 -1653,6 +1653,6 @@@ mpt_mapresources(MPT_ADAPTER *ioc
        unsigned long    port;
        u32              msize;
        u32              psize;
-       u8               revision;
        int              r = -ENODEV;
        struct pci_dev *pdev;
  
                return r;
        }
  
-       pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
        if (sizeof(dma_addr_t) > 4) {
                const uint64_t required_mask = dma_get_required_mask
                    (&pdev->dev);
@@@ -1779,7 -1776,6 +1776,6 @@@ mpt_attach(struct pci_dev *pdev, const 
        MPT_ADAPTER     *ioc;
        u8               cb_idx;
        int              r = -ENODEV;
-       u8               revision;
        u8               pcixcmd;
        static int       mpt_ids = 0;
  #ifdef CONFIG_PROC_FS
        dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "facts @ %p, pfacts[0] @ %p\n",
            ioc->name, &ioc->facts, &ioc->pfacts[0]));
  
-       pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
-       mpt_get_product_name(pdev->vendor, pdev->device, revision, ioc->prod_name);
+       mpt_get_product_name(pdev->vendor, pdev->device, pdev->revision,
+                            ioc->prod_name);
  
        switch (pdev->device)
        {
                break;
  
        case MPI_MANUFACTPAGE_DEVICEID_FC929X:
-               if (revision < XL_929) {
+               if (pdev->revision < XL_929) {
                        /* 929X Chip Fix. Set Split transactions level
                        * for PCIX. Set MOST bits to zero.
                        */
                /* 1030 Chip Fix. Disable Split transactions
                 * for PCIX. Set MOST bits to zero if Rev < C0( = 8).
                 */
-               if (revision < C0_1030) {
+               if (pdev->revision < C0_1030) {
                        pci_read_config_byte(pdev, 0x6a, &pcixcmd);
                        pcixcmd &= 0x8F;
                        pci_write_config_byte(pdev, 0x6a, pcixcmd);
@@@ -6483,7 -6479,6 +6479,7 @@@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARM
                                printk(MYIOC_s_INFO_FMT "%s: host reset in"
                                        " progress mpt_config timed out.!!\n",
                                        __func__, ioc->name);
 +                              mutex_unlock(&ioc->mptbase_cmds.mutex);
                                return -EFAULT;
                        }
                        spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
diff --combined include/linux/fs.h
@@@ -173,6 -173,15 +173,15 @@@ struct inodes_stat_t 
  #define WRITE_FUA             (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA)
  #define WRITE_FLUSH_FUA               (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA)
  
+ /*
+  * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector
+  * that indicates that they should check the contents of the iovec are
+  * valid, but not check the memory that the iovec elements
+  * points too.
+  */
+ #define CHECK_IOVEC_ONLY -1
  #define SEL_IN                1
  #define SEL_OUT               2
  #define SEL_EX                4
@@@ -1690,8 -1699,7 +1699,7 @@@ struct seq_file
  ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
                              unsigned long nr_segs, unsigned long fast_segs,
                              struct iovec *fast_pointer,
-                             struct iovec **ret_pointer,
-                             int check_access);
+                             struct iovec **ret_pointer);
  
  extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
  extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
@@@ -2453,6 -2461,8 +2461,6 @@@ enum 
  };
  
  void dio_end_io(struct bio *bio, int error);
 -void inode_dio_wait(struct inode *inode);
 -void inode_dio_done(struct inode *inode);
  
  ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
        struct block_device *bdev, const struct iovec *iov, loff_t offset,
@@@ -2467,11 -2477,12 +2475,11 @@@ static inline ssize_t blockdev_direct_I
                                    offset, nr_segs, get_block, NULL, NULL,
                                    DIO_LOCKING | DIO_SKIP_HOLES);
  }
 -#else
 -static inline void inode_dio_wait(struct inode *inode)
 -{
 -}
  #endif
  
 +void inode_dio_wait(struct inode *inode);
 +void inode_dio_done(struct inode *inode);
 +
  extern const struct file_operations generic_ro_fops;
  
  #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
diff --combined init/Kconfig
@@@ -167,7 -167,7 +167,7 @@@ config KERNEL_BZIP
        depends on HAVE_KERNEL_BZIP2
        help
          Its compression ratio and speed is intermediate.
-         Decompression speed is slowest among the three.  The kernel
+         Decompression speed is slowest among the choices.  The kernel
          size is about 10% smaller with bzip2, in comparison to gzip.
          Bzip2 uses a large amount of memory. For modern kernels you
          will need at least 8MB RAM or more for booting.
@@@ -176,10 -176,9 +176,9 @@@ config KERNEL_LZM
        bool "LZMA"
        depends on HAVE_KERNEL_LZMA
        help
-         The most recent compression algorithm.
-         Its ratio is best, decompression speed is between the other
-         two. Compression is slowest.  The kernel size is about 33%
-         smaller with LZMA in comparison to gzip.
+         This compression algorithm's ratio is best.  Decompression speed
+         is between gzip and bzip2.  Compression is slowest.
+         The kernel size is about 33% smaller with LZMA in comparison to gzip.
  
  config KERNEL_XZ
        bool "XZ"
@@@ -200,7 -199,7 +199,7 @@@ config KERNEL_LZ
        bool "LZO"
        depends on HAVE_KERNEL_LZO
        help
-         Its compression ratio is the poorest among the 4. The kernel
+         Its compression ratio is the poorest among the choices. The kernel
          size is about 10% bigger than gzip; however its speed
          (both compression and decompression) is the fastest.
  
@@@ -803,7 -802,7 +802,7 @@@ config RT_GROUP_SCHE
  endif #CGROUP_SCHED
  
  config BLK_CGROUP
 -      tristate "Block IO controller"
 +      bool "Block IO controller"
        depends on BLOCK
        default n
        ---help---
diff --combined kernel/fork.c
@@@ -787,9 -787,6 +787,6 @@@ void mm_release(struct task_struct *tsk
        /* Get rid of any cached register state */
        deactivate_mm(tsk, mm);
  
-       if (tsk->vfork_done)
-               complete_vfork_done(tsk);
        /*
         * If we're exiting normally, clear a user-space tid field if
         * requested.  We leave this alone when dying by signal, to leave
                }
                tsk->clear_child_tid = NULL;
        }
+       /*
+        * All done, finally we can wake up parent and return this mm to him.
+        * Also kthread_stop() uses this completion for synchronization.
+        */
+       if (tsk->vfork_done)
+               complete_vfork_done(tsk);
  }
  
  /*
@@@ -976,8 -980,9 +980,8 @@@ static int copy_io(unsigned long clone_
         * Share io context with parent, if CLONE_IO is set
         */
        if (clone_flags & CLONE_IO) {
 -              tsk->io_context = ioc_task_link(ioc);
 -              if (unlikely(!tsk->io_context))
 -                      return -ENOMEM;
 +              ioc_task_link(ioc);
 +              tsk->io_context = ioc;
        } else if (ioprio_valid(ioc->ioprio)) {
                new_ioc = get_task_io_context(tsk, GFP_KERNEL, NUMA_NO_NODE);
                if (unlikely(!new_ioc))