1. 01 Aug, 2011 9 commits
  2. 28 Jul, 2011 3 commits
  3. 27 Jul, 2011 28 commits
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable · 22712200
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:
        Btrfs: make sure reserve_metadata_bytes doesn't leak out strange errors
        Btrfs: use the commit_root for reading free_space_inode crcs
        Btrfs: reduce extent_state lock contention for metadata
        Btrfs: remove lockdep magic from btrfs_next_leaf
        Btrfs: make a lockdep class for each root
        Btrfs: switch the btrfs tree locks to reader/writer
        Btrfs: fix deadlock when throttling transactions
        Btrfs: stop using highmem for extent_buffers
        Btrfs: fix BUG_ON() caused by ENOSPC when relocating space
        Btrfs: tag pages for writeback in sync
        Btrfs: fix enospc problems with delalloc
        Btrfs: don't flush delalloc arbitrarily
        Btrfs: use find_or_create_page instead of grab_cache_page
        Btrfs: use a worker thread to do caching
        Btrfs: fix how we merge extent states and deal with cached states
        Btrfs: use the normal checksumming infrastructure for free space cache
        Btrfs: serialize flushers in reserve_metadata_bytes
        Btrfs: do transaction space reservation before joining the transaction
        Btrfs: try to only do one btrfs_search_slot in do_setxattr
      22712200
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs · 597a67e0
      Linus Torvalds authored
      * 'for-linus' of git://oss.sgi.com/xfs/xfs:
        xfs: optimize the negative xattr caching
        xfs: prevent against ioend livelocks in xfs_file_fsync
        xfs: flag all buffers as metadata
        xfs: encapsulate a block of debug code
      597a67e0
    • Linus Torvalds's avatar
      Merge branch 'nfs-for-3.1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs · 28890d35
      Linus Torvalds authored
      * 'nfs-for-3.1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (44 commits)
        NFSv4: Don't use the delegation->inode in nfs_mark_return_delegation()
        nfs: don't use d_move in nfs_async_rename_done
        RDMA: Increasing RPCRDMA_MAX_DATA_SEGS
        SUNRPC: Replace xprt->resend and xprt->sending with a priority queue
        SUNRPC: Allow caller of rpc_sleep_on() to select priority levels
        SUNRPC: Support dynamic slot allocation for TCP connections
        SUNRPC: Clean up the slot table allocation
        SUNRPC: Initalise the struct xprt upon allocation
        SUNRPC: Ensure that we grab the XPRT_LOCK before calling xprt_alloc_slot
        pnfs: simplify pnfs files module autoloading
        nfs: document nfsv4 sillyrename issues
        NFS: Convert nfs4_set_ds_client to EXPORT_SYMBOL_GPL
        SUNRPC: Convert the backchannel exports to EXPORT_SYMBOL_GPL
        SUNRPC: sunrpc should not explicitly depend on NFS config options
        NFS: Clean up - simplify the switch to read/write-through-MDS
        NFS: Move the pnfs write code into pnfs.c
        NFS: Move the pnfs read code into pnfs.c
        NFS: Allow the nfs_pageio_descriptor to signal that a re-coalesce is needed
        NFS: Use the nfs_pageio_descriptor->pg_bsize in the read/write request
        NFS: Cache rpc_ops in struct nfs_pageio_descriptor
        ...
      28890d35
    • Linus Torvalds's avatar
      Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending · 91d41fdf
      Linus Torvalds authored
      * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
        target: Convert to DIV_ROUND_UP_SECTOR_T usage for sectors / dev_max_sectors
        kernel.h: Add DIV_ROUND_UP_ULL and DIV_ROUND_UP_SECTOR_T macro usage
        iscsi-target: Add iSCSI fabric support for target v4.1
        iscsi: Add Serial Number Arithmetic LT and GT into iscsi_proto.h
        iscsi: Use struct scsi_lun in iscsi structs instead of u8[8]
        iscsi: Resolve iscsi_proto.h naming conflicts with drivers/target/iscsi
      91d41fdf
    • Chris Mason's avatar
      Merge branch 'integration' into for-linus · ff95acb6
      Chris Mason authored
      ff95acb6
    • Chris Mason's avatar
      Btrfs: make sure reserve_metadata_bytes doesn't leak out strange errors · 75c195a2
      Chris Mason authored
      The btrfs transaction code will return any errors that come from
      reserve_metadata_bytes.  We need to make sure we don't return funny
      things like 1 or EAGAIN.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      75c195a2
    • Oleg Nesterov's avatar
      signals: sys_ssetmask/sys_rt_sigsuspend should use set_current_blocked() · c1095c6d
      Oleg Nesterov authored
      sys_ssetmask(), sys_rt_sigsuspend() and compat_sys_rt_sigsuspend()
      change ->blocked directly.  This is not correct, see the changelog in
      e6fa16ab "signal: sigprocmask() should do retarget_shared_pending()"
      
      Change them to use set_current_blocked().
      
      Another change is that now we are doing ->saved_sigmask = ->blocked
      lockless, it doesn't make any sense to do this under ->siglock.
      Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
      Reviewed-by: default avatarMatt Fleming <matt.fleming@linux.intel.com>
      Acked-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c1095c6d
    • Stephen Rothwell's avatar
      sparc: rename atomic_add_unless · 678624e4
      Stephen Rothwell authored
      Should have been done in commit 1af08a1407f4 ("This is in preparation
      for more generic atomic").
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Cc: Arun Sharma <asharma@fb.com>
      Cc: David Miller <davem@davemloft.net>
      Cc: "Hans-Christian Egtvedt" <hans-christian.egtvedt@atmel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      678624e4
    • David Howells's avatar
      proc: make struct proc_dir_entry::name a terminal array rather than a pointer · 09570f91
      David Howells authored
      Since __proc_create() appends the name it is given to the end of the PDE
      structure that it allocates, there isn't a need to store a name pointer.
      Instead we can just replace the name pointer with a terminal char array of
      _unspecified_ length.  The compiler will simply append the string to statically
      defined variables of PDE type overlapping any hole at the end of the structure
      and, unlike specifying an explicitly _zero_ length array, won't give a warning
      if you try to statically initialise it with a string of more than zero length.
      
      Also, whilst we're at it:
      
       (1) Move namelen to end just prior to name and reduce it to a single byte
           (name shouldn't be longer than NAME_MAX).
      
       (2) Move pde_unload_lock two places further on so that if it's four bytes in
           size on a 64-bit machine, it won't cause an unused hole in the PDE struct.
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      09570f91
    • Chris Mason's avatar
      Btrfs: use the commit_root for reading free_space_inode crcs · 2cf8572d
      Chris Mason authored
      Now that we are using regular file crcs for the free space cache,
      we can deadlock if we try to read the free_space_inode while we are
      updating the crc tree.
      
      This commit fixes things by using the commit_root to read the crcs.  This is
      safe because we the free space cache file would already be loaded if
      that block group had been changed in the current transaction.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      2cf8572d
    • Chris Mason's avatar
      Btrfs: reduce extent_state lock contention for metadata · 19b6caf4
      Chris Mason authored
      For metadata buffers that don't straddle pages (all of them), btrfs
      can safely use the page uptodate bits and extent_buffer uptodate bit
      instead of needing to use the extent_state tree.
      
      This greatly reduces contention on the state tree lock.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      19b6caf4
    • Chris Mason's avatar
      Btrfs: remove lockdep magic from btrfs_next_leaf · 31533fb2
      Chris Mason authored
      Before the reader/writer locks, btrfs_next_leaf needed to keep
      the path blocking to avoid making lockdep upset.
      
      Now that btrfs_next_leaf only takes read locks, this isn't required.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      31533fb2
    • Chris Mason's avatar
      Btrfs: make a lockdep class for each root · 85d4e461
      Chris Mason authored
      This patch was originally from Tejun Heo.  lockdep complains about the btrfs
      locking because we sometimes take btree locks from two different trees at the
      same time.  The current classes are based only on level in the btree, which
      isn't enough information for lockdep to figure out if the lock is safe.
      
      This patch makes a class for each type of tree, and lumps all the FS trees that
      actually have files and directories into the same class.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      85d4e461
    • Chris Mason's avatar
      Btrfs: switch the btrfs tree locks to reader/writer · bd681513
      Chris Mason authored
      The btrfs metadata btree is the source of significant
      lock contention, especially in the root node.   This
      commit changes our locking to use a reader/writer
      lock.
      
      The lock is built on top of rw spinlocks, and it
      extends the lock tracking to remember if we have a
      read lock or a write lock when we go to blocking.  Atomics
      count the number of blocking readers or writers at any
      given time.
      
      It removes all of the adaptive spinning from the old code
      and uses only the spinning/blocking hints inside of btrfs
      to decide when it should continue spinning.
      
      In read heavy workloads this is dramatically faster.  In write
      heavy workloads we're still faster because of less contention
      on the root node lock.
      
      We suffer slightly in dbench because we schedule more often
      during write locks, but all other benchmarks so far are improved.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      bd681513
    • Josef Bacik's avatar
      Btrfs: fix deadlock when throttling transactions · 81317fde
      Josef Bacik authored
      Hit this nice little deadlock.  What happens is this
      
      __btrfs_end_transaction with throttle set, --use_count so it equals 0
        btrfs_commit_transaction
          <somebody else actually manages to start the commit>
          btrfs_end_transaction --use_count so now its -1 <== BAD
            we just return and wait on the transaction
      
      This is bad because we just return after our use_count is -1 and don't let go
      of our num_writer count on the transaction, so the guy committing the
      transaction just sits there forever.  Fix this by inc'ing our use_count if we're
      going to call commit_transaction so that if we call btrfs_end_transaction it's
      valid.  Thanks,
      Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      81317fde
    • Chris Mason's avatar
      Btrfs: stop using highmem for extent_buffers · a6591715
      Chris Mason authored
      The extent_buffers have a very complex interface where
      we use HIGHMEM for metadata and try to cache a kmap mapping
      to access the memory.
      
      The next commit adds reader/writer locks, and concurrent use
      of this kmap cache would make it even more complex.
      
      This commit drops the ability to use HIGHMEM with extent buffers,
      and rips out all of the related code.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      a6591715
    • Miao Xie's avatar
      Btrfs: fix BUG_ON() caused by ENOSPC when relocating space · 199c36ea
      Miao Xie authored
      When we balanced the chunks across the devices, BUG_ON() in
      __finish_chunk_alloc() was triggered.
      
      ------------[ cut here ]------------
      kernel BUG at fs/btrfs/volumes.c:2568!
      [SNIP]
      Call Trace:
       [<ffffffffa049525e>] btrfs_alloc_chunk+0x8e/0xa0 [btrfs]
       [<ffffffffa04546b0>] do_chunk_alloc+0x330/0x3a0 [btrfs]
       [<ffffffffa045c654>] btrfs_reserve_extent+0xb4/0x1f0 [btrfs]
       [<ffffffffa045c86b>] btrfs_alloc_free_block+0xdb/0x350 [btrfs]
       [<ffffffffa048a8d8>] ? read_extent_buffer+0xd8/0x1d0 [btrfs]
       [<ffffffffa04476fd>] __btrfs_cow_block+0x14d/0x5e0 [btrfs]
       [<ffffffffa044660d>] ? read_block_for_search+0x14d/0x4d0 [btrfs]
       [<ffffffffa0447c9b>] btrfs_cow_block+0x10b/0x240 [btrfs]
       [<ffffffffa044dd5e>] btrfs_search_slot+0x49e/0x7a0 [btrfs]
       [<ffffffffa044f07d>] btrfs_insert_empty_items+0x8d/0xf0 [btrfs]
       [<ffffffffa045e973>] insert_with_overflow+0x43/0x110 [btrfs]
       [<ffffffffa045eb0d>] btrfs_insert_dir_item+0xcd/0x1f0 [btrfs]
       [<ffffffffa0489bd0>] ? map_extent_buffer+0xb0/0xc0 [btrfs]
       [<ffffffff812276ad>] ? rb_insert_color+0x9d/0x160
       [<ffffffffa046cc40>] ? inode_tree_add+0xf0/0x150 [btrfs]
       [<ffffffffa0474801>] btrfs_add_link+0xc1/0x1c0 [btrfs]
       [<ffffffff811dacac>] ? security_inode_init_security+0x1c/0x30
       [<ffffffffa04a28aa>] ? btrfs_init_acl+0x4a/0x180 [btrfs]
       [<ffffffffa047492f>] btrfs_add_nondir+0x2f/0x70 [btrfs]
       [<ffffffffa046af16>] ? btrfs_init_inode_security+0x46/0x60 [btrfs]
       [<ffffffffa0474ac0>] btrfs_create+0x150/0x1d0 [btrfs]
       [<ffffffff81159c63>] ? generic_permission+0x23/0xb0
       [<ffffffff8115b415>] vfs_create+0xa5/0xc0
       [<ffffffff8115ce6e>] do_last+0x5fe/0x880
       [<ffffffff8115dc0d>] path_openat+0xcd/0x3d0
       [<ffffffff8115e029>] do_filp_open+0x49/0xa0
       [<ffffffff8116a965>] ? alloc_fd+0x95/0x160
       [<ffffffff8114f0c7>] do_sys_open+0x107/0x1e0
       [<ffffffff810bcc3f>] ? audit_syscall_entry+0x1bf/0x1f0
       [<ffffffff8114f1e0>] sys_open+0x20/0x30
       [<ffffffff81484ec2>] system_call_fastpath+0x16/0x1b
      [SNIP]
      RIP  [<ffffffffa049444a>] __finish_chunk_alloc+0x20a/0x220 [btrfs]
      
      The reason is:
      Task1					Space balance task
      do_chunk_alloc()
        __finish_chunk_alloc()
          update device info
          in the chunk tree
            alloc system metadata block
      					relocate system metadata block group
      					  set system metadata block group
      					  readonly, This block group is the
      					  only one that can allocate space. So
      					  there is no free space that can be
      					  allocated now.
              find no space and don't try
              to alloc new chunk, and then
              return ENOSPC
        BUG_ON() in __finish_chunk_alloc()
        was triggered.
      
      Fix this bug by allocating a new system metadata chunk before relocating the
      old one if we find there is no free space which can be allocated after setting
      the old block group to be read-only.
      Reported-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
      Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
      Tested-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      199c36ea
    • Josef Bacik's avatar
      Btrfs: tag pages for writeback in sync · f7aaa06b
      Josef Bacik authored
      Everybody else does this, we need to do it too.  If we're syncing, we need to
      tag the pages we're going to write for writeback so we don't end up writing the
      same stuff over and over again if somebody is constantly redirtying our file.
      This will keep us from having latencies with heavy sync workloads.  Thanks,
      Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      f7aaa06b
    • Josef Bacik's avatar
      Btrfs: fix enospc problems with delalloc · 9e0baf60
      Josef Bacik authored
      So I had this brilliant idea to use atomic counters for outstanding and reserved
      extents, but this turned out to be a bad idea.  Consider this where we have 1
      outstanding extent and 1 reserved extent
      
      Reserver				Releaser
      					atomic_dec(outstanding) now 0
      atomic_read(outstanding)+1 get 1
      atomic_read(reserved) get 1
      don't actually reserve anything because
      they are the same
      					atomic_cmpxchg(reserved, 1, 0)
      atomic_inc(outstanding)
      atomic_add(0, reserved)
      					free reserved space for 1 extent
      
      Then the reserver now has no actual space reserved for it, and when it goes to
      finish the ordered IO it won't have enough space to do it's allocation and you
      get those lovely warnings.
      Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      9e0baf60
    • Josef Bacik's avatar
      Btrfs: don't flush delalloc arbitrarily · a5991428
      Josef Bacik authored
      Kill the check to see if we have 512mb of reserved space in delalloc and
      shrink_delalloc if we do.  This causes unexpected latencies and we have other
      logic to see if we need to throttle.  Thanks,
      Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      a5991428
    • Josef Bacik's avatar
      Btrfs: use find_or_create_page instead of grab_cache_page · a94733d0
      Josef Bacik authored
      grab_cache_page will use mapping_gfp_mask(), which for all inodes is set to
      GFP_HIGHUSER_MOVABLE.  So instead use find_or_create_page in all cases where we
      need GFP_NOFS so we don't deadlock.  Thanks,
      Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
      a94733d0
    • Josef Bacik's avatar
      Btrfs: use a worker thread to do caching · bab39bf9
      Josef Bacik authored
      A user reported a deadlock when copying a bunch of files.  This is because they
      were low on memory and kthreadd got hung up trying to migrate pages for an
      allocation when starting the caching kthread.  The page was locked by the person
      starting the caching kthread.  To fix this we just need to use the async thread
      stuff so that the threads are already created and we don't have to worry about
      deadlocks.  Thanks,
      Reported-by: default avatarRoman Mamedov <rm@romanrm.ru>
      Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
      bab39bf9
    • Linus Torvalds's avatar
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes · 333c066b
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes:
        GFS2: Fix mount hang caused by certain access pattern to sysfs files
      333c066b
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 · 75623437
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (22 commits)
        ALSA: hda - Cirrus Logic CS421x support
        ALSA: Make pcm.h self-contained
        ALSA: hda - Allow codec-specific set_power_state ops
        ALSA: hda - Add post_suspend patch ops
        ALSA: hda - Make CONFIG_SND_HDA_POWER_SAVE depending on CONFIG_PM
        ALSA: hda - Make sure mute led reflects master mute state
        ALSA: hda - Fix invalid mute led state on resume of IDT codecs
        ASoC: Revert "ASoC: SAMSUNG: Add I2S0 internal dma driver"
        ALSA: hda - Add support of the 4 internal speakers on certain HP laptops
        ALSA: Make snd_pcm_debug_name usable outside pcm_lib
        ALSA: hda - Fix DAC filling for multi-connection pins in Realtek parser
        ASoC: dapm - Add methods to retrieve snd_card and soc_card from dapm context.
        ASoC: SAMSUNG: Add I2S0 internal dma driver
        ASoC: SAMSUNG: Modify I2S driver to support idma
        ASoC: davinci: add missing break statement
        ASoC: davinci: fix codec start and stop functions
        ASoC: dapm - add DAPM macro for external enum widgets
        ASoC: Acknowledge WM8962 interrupts before acting on them
        ASoC: sgtl5000: guide user when regulator support is needed
        ASoC: sgtl5000: refactor registering internal ldo
        ...
      75623437
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input · 70a3eff5
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (53 commits)
        Input: synaptics - fix reporting of min coordinates
        Input: tegra-kbc - enable key autorepeat
        Input: kxtj9 - fix locking typo in kxtj9_set_poll()
        Input: kxtj9 - fix bug in probe()
        Input: intel-mid-touch - remove pointless checking for variable 'found'
        Input: hp_sdc - staticize hp_sdc_kicker()
        Input: pmic8xxx-keypad - fix a leak of the IRQ during init failure
        Input: cy8ctmg110_ts - set reset_pin and irq_pin from platform data
        Input: cy8ctmg110_ts - constify i2c_device_id table
        Input: cy8ctmg110_ts - fix checking return value of i2c_master_send
        Input: lifebook - make dmi callback functions return 1
        Input: atkbd - make dmi callback functions return 1
        Input: gpio_keys - switch to using SIMPLE_DEV_PM_OPS
        Input: gpio_keys - add support for device-tree platform data
        Input: aiptek - remove double define
        Input: synaptics - set minimum coordinates as reported by firmware
        Input: synaptics - process button bits in AGM packets
        Input: synaptics - rename set_slot to be more descriptive
        Input: synaptics - fuzz position for touchpad with reduced filtering
        Input: synaptics - set resolution for MT_POSITION_X/Y axes
        ...
      70a3eff5
    • Linus Torvalds's avatar
      Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze · 9ed3689b
      Linus Torvalds authored
      * 'next' of git://git.monstr.eu/linux-2.6-microblaze:
        microblaze: Do not show error message for 32 interrupt lines
        Revert "microblaze: PCI fix typo fault in of_node pointer moving into pci_bus"
        microblaze: PCI fix typo fault in of_node pointer moving into pci_bus
        microblaze: Add support for early console on mdm
        microblaze: Simplify early console binding from DT
        microblaze: Get early printk console earlier
        microblaze: Standardise cpuinfo output for cache policy
        microblaze: Unprivileged stream instruction awareness
        microblaze: trivial: Fix typo fault
        microblaze: exec: Remove redundant set_fs(USER_DS)
        microblaze: Remove duplicated prototype of start_thread()
        microblaze: Fix unaligned value saving to the stack for system with MMU
        microblaze/irqs: Do not trace arch_local_{*,irq_*} functions
      9ed3689b
    • Daniel Morsing's avatar
      staging: brcm80211: Fix double include introduced by bad merge · 8aae36cd
      Daniel Morsing authored
      A merge with Linus' tree added a double include of linux/interrupt.h.
      Fix by removing one of the includes.
      Signed-off-by: default avatarDaniel Morsing <daniel.morsing@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8aae36cd