Push to branch refs/heads/master:
b232c0e81548584bcfa07df76c47652856a808f5 -->
  352d176613cbdc24125db1629e98bd8182cc51dc

 Documentation/filesystems/00-INDEX                 |   3 +
 Documentation/filesystems/wrapfs.txt               | 172 ++++++
 Documentation/sphinx/rstFlatTable.py               |   5 +
 Documentation/virtual/kvm/api.txt                  |   1 +
 MAINTAINERS                                        |   9 +
 Makefile                                           |   2 +-
 arch/arc/include/asm/cacheflush.h                  |   6 +-
 arch/arc/mm/cache.c                                |  13 +-
 arch/arm/xen/enlighten.c                           |   3 +-
 arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi     |  18 +
 arch/arm64/include/asm/acpi.h                      |   8 +-
 arch/arm64/kernel/setup.c                          |   9 +-
 arch/arm64/kvm/hyp/switch.c                        |   8 +-
 arch/powerpc/boot/ps3-head.S                       |   5 -
 arch/powerpc/boot/ps3.c                            |   8 +-
 arch/powerpc/include/asm/kvm_host.h                |   1 +
 arch/powerpc/include/uapi/asm/kvm.h                |   1 +
 arch/powerpc/kernel/asm-offsets.c                  |   1 +
 arch/powerpc/kernel/head_64.S                      |   8 +-
 arch/powerpc/kvm/book3s_hv.c                       |   6 +
 arch/powerpc/kvm/book3s_hv_rm_mmu.c                |   2 +
 arch/powerpc/kvm/book3s_hv_rmhandlers.S            |   4 +
 arch/s390/kernel/setup.c                           |   2 +-
 arch/x86/entry/entry_32.S                          |   4 +-
 arch/x86/events/core.c                             |   8 +-
 arch/x86/events/intel/cstate.c                     |  14 +-
 arch/x86/events/perf_event.h                       |   2 +-
 arch/x86/kvm/vmx.c                                 |  11 +-
 block/blk-mq.c                                     |   6 +-
 block/bsg.c                                        |   3 +
 drivers/acpi/video_detect.c                        |  20 +
 drivers/base/core.c                                |  39 +-
 drivers/base/firmware_class.c                      |   7 +-
 drivers/base/power/opp/core.c                      |  22 +-
 drivers/block/aoe/aoecmd.c                         |  41 --
 drivers/block/loop.c                               |   2 +-
 drivers/char/tpm/xen-tpmfront.c                    |   1 -
 drivers/clk/bcm/clk-bcm2835.c                      |   4 +-
 drivers/clk/ti/clk-3xxx.c                          |  20 +-
 drivers/clk/ti/clock.h                             |   9 +
 drivers/clk/ti/dpll.c                              |  19 +-
 drivers/clk/ti/dpll3xxx.c                          |  67 +++
 drivers/cpufreq/cpufreq-dt.c                       |  12 +-
 drivers/crypto/caam/caamalg.c                      |   4 +-
 drivers/gpio/gpiolib.c                             |   5 +-
 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c              |  26 +-
 drivers/gpu/drm/ast/ast_main.c                     |   7 +-
 drivers/gpu/drm/gma500/psb_drv.c                   |   3 +
 drivers/gpu/drm/i915/i915_gem_stolen.c             |   5 +-
 drivers/gpu/drm/i915/intel_display.c               |   9 +-
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c         |   3 +-
 drivers/gpu/drm/i915/intel_runtime_pm.c            |  13 +-
 drivers/gpu/drm/nouveau/nouveau_bios.c             |   3 +
 drivers/gpu/drm/nouveau/nouveau_bo.c               |   1 +
 drivers/gpu/drm/nouveau/nvkm/engine/device/base.c  |   6 +-
 .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c |   9 +-
 .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c |   8 +-
 drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c     |  50 +-
 drivers/gpu/drm/nouveau/nvkm/subdev/bios/priv.h    |   1 +
 drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c  |   7 +-
 .../gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c  |   1 +
 drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c     |   2 +
 drivers/gpu/drm/radeon/radeon_cursor.c             |  69 ++-
 drivers/gpu/drm/radeon/radeon_mode.h               |   1 +
 drivers/gpu/drm/radeon/si.c                        |   1 +
 drivers/gpu/drm/radeon/si_dpm.c                    |   1 +
 drivers/hv/channel_mgmt.c                          |   2 +
 drivers/hwtracing/stm/core.c                       |   8 +-
 drivers/infiniband/core/mad.c                      |   2 +-
 drivers/infiniband/core/multicast.c                |   7 +-
 drivers/infiniband/hw/i40iw/i40iw_verbs.c          |   2 +-
 drivers/infiniband/sw/rxe/rxe_qp.c                 |   1 +
 drivers/infiniband/ulp/ipoib/ipoib_multicast.c     |   7 +-
 drivers/input/misc/drv260x.c                       |   1 -
 drivers/md/dm-crypt.c                              |   7 +-
 drivers/md/dm-flakey.c                             |   2 +
 drivers/md/dm-raid.c                               |   9 +-
 drivers/md/dm-rq.c                                 |  10 +-
 drivers/md/dm-table.c                              |  24 +-
 drivers/md/persistent-data/dm-space-map-metadata.c |  14 +-
 drivers/md/raid5.c                                 |   9 +
 drivers/media/dvb-frontends/mn88472.c              |  24 +-
 drivers/media/dvb-frontends/mn88473.c              |  24 +-
 drivers/media/i2c/tvp5150.c                        |   1 +
 drivers/media/pci/solo6x10/solo6x10.h              |   3 +
 drivers/media/platform/s5p-mfc/s5p_mfc.c           |   1 +
 drivers/misc/mei/client.c                          |   2 +-
 drivers/misc/mei/hw-me-regs.h                      |   2 +
 drivers/misc/mei/pci-me.c                          |   1 +
 drivers/mmc/host/sdhci.c                           |  20 +
 drivers/net/ethernet/marvell/mvpp2.c               |  59 ++-
 drivers/net/wireless/ath/ath9k/hw.c                |   2 +-
 drivers/net/wireless/ath/ath9k/pci.c               |   7 +-
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c  |   8 +
 drivers/net/wireless/realtek/rtlwifi/base.c        |   8 +-
 drivers/net/wireless/realtek/rtlwifi/core.c        |   9 +-
 drivers/net/wireless/realtek/rtlwifi/pci.c         |  14 +-
 drivers/net/wireless/realtek/rtlwifi/ps.c          |  36 +-
 drivers/nvdimm/pfn_devs.c                          |   2 +-
 drivers/nvme/target/configfs.c                     |   6 +-
 drivers/nvme/target/core.c                         |  14 +-
 drivers/nvme/target/nvmet.h                        |   6 +-
 drivers/pci/pci.c                                  |   4 +
 drivers/platform/x86/asus-nb-wmi.c                 |   9 +
 drivers/regulator/stw481x-vmmc.c                   |   3 +-
 drivers/s390/char/vmlogrdr.c                       |   2 +-
 drivers/s390/scsi/zfcp_dbf.c                       |  17 +-
 drivers/s390/scsi/zfcp_dbf.h                       |  41 +-
 drivers/s390/scsi/zfcp_erp.c                       |  61 ++-
 drivers/s390/scsi/zfcp_ext.h                       |   4 +-
 drivers/s390/scsi/zfcp_fsf.h                       |   3 +-
 drivers/s390/scsi/zfcp_reqlist.h                   |  30 +-
 drivers/s390/scsi/zfcp_scsi.c                      |  61 ++-
 drivers/scsi/aacraid/linit.c                       |   2 -
 drivers/scsi/megaraid/megaraid_sas_fusion.c        |   9 +-
 drivers/scsi/scsi_sysfs.c                          |   4 -
 drivers/scsi/sg.c                                  |   3 +
 drivers/ssb/pci.c                                  |   1 +
 drivers/staging/comedi/drivers/ni_mio_common.c     |   7 +-
 drivers/target/iscsi/iscsi_target_configfs.c       |   4 +-
 drivers/target/target_core_user.c                  |   2 -
 drivers/thermal/thermal_hwmon.c                    |   2 +-
 drivers/tty/serial/sc16is7xx.c                     |   2 +-
 drivers/tty/vt/keyboard.c                          |   2 +-
 drivers/usb/class/cdc-acm.c                        |   1 +
 drivers/usb/core/hub.c                             | 101 ++--
 drivers/usb/dwc3/gadget.c                          |  13 +-
 drivers/usb/gadget/composite.c                     |  11 +-
 drivers/usb/gadget/function/f_uac2.c               |  14 +-
 drivers/usb/gadget/function/uvc_video.c            |   2 +-
 drivers/usb/host/uhci-pci.c                        |   4 +
 drivers/usb/serial/kl5kusb105.c                    |  33 +-
 drivers/usb/serial/option.c                        |   7 +
 drivers/usb/usbip/vudc_transfer.c                  |   2 +
 drivers/watchdog/mei_wdt.c                         |   2 +
 drivers/watchdog/qcom-wdt.c                        |   2 +-
 drivers/xen/gntdev.c                               |   2 +-
 fs/Kconfig                                         |   1 +
 fs/Makefile                                        |   1 +
 fs/block_dev.c                                     |   9 +-
 fs/btrfs/async-thread.c                            |  14 +
 fs/btrfs/async-thread.h                            |   1 +
 fs/btrfs/ctree.h                                   |   4 +
 fs/btrfs/delayed-inode.c                           |   6 +-
 fs/btrfs/disk-io.c                                 |  23 +-
 fs/btrfs/extent-tree.c                             |  51 +-
 fs/btrfs/extent_io.c                               |   9 +
 fs/btrfs/ioctl.c                                   |   5 +
 fs/btrfs/qgroup.c                                  |   5 +-
 fs/btrfs/relocation.c                              |  42 +-
 fs/btrfs/send.c                                    |  58 ++
 fs/btrfs/tree-log.c                                |   7 +-
 fs/btrfs/volumes.c                                 |  64 ++-
 fs/cifs/cifsglob.h                                 |   3 +
 fs/cifs/cifsproto.h                                |   3 +
 fs/cifs/connect.c                                  |  34 +-
 fs/cifs/smb2file.c                                 |   2 +-
 fs/cifs/smb2pdu.c                                  |  77 ++-
 fs/cifs/smb2proto.h                                |   1 +
 fs/exec.c                                          |  31 +-
 fs/ext4/ext4_jbd2.h                                |  14 +-
 fs/ext4/inline.c                                   |   4 +-
 fs/ext4/inode.c                                    |   6 +
 fs/ext4/mballoc.c                                  |   4 +-
 fs/ext4/super.c                                    |  69 ++-
 fs/f2fs/debug.c                                    |   1 +
 fs/f2fs/f2fs.h                                     |  10 +-
 fs/f2fs/file.c                                     |   4 +-
 fs/f2fs/super.c                                    |   7 +-
 fs/nfs/file.c                                      |   2 +-
 fs/nfs/flexfilelayout/flexfilelayout.c             |   4 +
 fs/nfs/pnfs.c                                      |  31 +-
 fs/nfs/pnfs.h                                      |   1 +
 fs/notify/inode_mark.c                             |  45 +-
 fs/wrapfs/Kconfig                                  |   8 +
 fs/wrapfs/Makefile                                 |   7 +
 fs/wrapfs/dentry.c                                 |  49 ++
 fs/wrapfs/file.c                                   | 381 +++++++++++++
 fs/wrapfs/inode.c                                  | 588 +++++++++++++++++++++
 fs/wrapfs/lookup.c                                 | 323 +++++++++++
 fs/wrapfs/main.c                                   | 176 ++++++
 fs/wrapfs/mmap.c                                   |  92 ++++
 fs/wrapfs/super.c                                  | 208 ++++++++
 fs/wrapfs/wrapfs.h                                 | 207 ++++++++
 fs/xfs/xfs_log_recover.c                           |   1 +
 include/linux/capability.h                         |   2 +
 include/linux/mm_types.h                           |   1 +
 include/linux/namei.h                              |   2 +
 include/linux/pm_opp.h                             |  11 +-
 include/linux/ptrace.h                             |   1 -
 include/linux/sched.h                              |   1 +
 include/net/cfg80211.h                             |  11 +
 include/net/netfilter/nf_conntrack.h               |   4 -
 include/net/netfilter/nf_conntrack_extend.h        |   3 +
 include/net/netfilter/nf_nat.h                     |   3 +-
 include/rdma/ib_addr.h                             |   6 +-
 include/uapi/linux/magic.h                         |   2 +
 kernel/capability.c                                |  36 +-
 kernel/debug/debug_core.c                          |   4 +-
 kernel/fork.c                                      |   9 +-
 kernel/ptrace.c                                    |  28 +-
 kernel/time/timekeeping.c                          |   4 +-
 kernel/trace/trace_functions_graph.c               |  17 +-
 kernel/watchdog.c                                  |   1 -
 mm/filemap.c                                       |   2 +-
 mm/init-mm.c                                       |   2 +
 mm/page_alloc.c                                    |  12 +-
 mm/vmscan.c                                        |  14 +-
 net/ceph/messenger.c                               |  13 +
 net/mac80211/mlme.c                                |  21 +-
 net/netfilter/nf_conntrack_extend.c                |  15 +-
 net/netfilter/nf_nat_core.c                        | 149 +++---
 net/sunrpc/auth_gss/auth_gss.c                     |   7 +-
 net/vmw_vsock/virtio_transport_common.c            |  14 +-
 net/wireless/core.h                                |   1 +
 net/wireless/mlme.c                                |  12 +
 net/wireless/sme.c                                 |  14 +
 scripts/kconfig/nconf.gui.c                        |  15 +-
 sound/pci/hda/hda_auto_parser.c                    |   4 +-
 sound/pci/hda/patch_ca0132.c                       |   1 +
 sound/pci/hda/patch_conexant.c                     |  17 +
 sound/pci/hda/patch_realtek.c                      |   3 +
 sound/soc/intel/atom/sst-mfld-platform-pcm.c       |   6 +
 sound/usb/hiface/pcm.c                             |   2 +
 sound/usb/mixer.c                                  |   3 +-
 225 files changed, 4024 insertions(+), 804 deletions(-)

commit 352d176613cbdc24125db1629e98bd8182cc51dc
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat Feb 18 19:11:24 2017 -0500

    Wrapfs: ->iget fixes
    
    Change where we igrab/iput to ensure we always hold a valid lower_inode.
    Return ENOMEM (not EACCES) if iget5_locked returns NULL.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 9f71198ed159bcd26aa5e872610831e641a7d5c0
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat Feb 18 15:37:53 2017 -0500

    Wrapfs: update copyrights for 2017
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit cb2160d57467e8ad97e77cbed509f31283fcd4c1
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Dec 27 21:11:07 2016 -0500

    Wrapfs: new ->setxattr API changes, takes inode
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 40fd78bab620aab32394294dcf596fd323d261cd
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Dec 27 17:20:57 2016 -0500

    Wrapfs: use new full_name_hash() prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 0c991927f64c44a77af31ff4cfffb822b224c0eb
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat May 21 23:46:41 2016 -0400

    Wrapfs: use new prototype for ->getxattr
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 619a62fec833e2fcf87946aa1e8e6e66ac91a0ff
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat May 21 23:34:10 2016 -0400

    Wrapfs: support NFS exports
    
    Based on patch from Sandeep Joshi <sanjos...@gmail.com>.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 27b98ec474ed2e434a811725c3d6b5fa8543034d
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat May 21 23:34:10 2016 -0400

    Wrapfs: use d_splice_alias
    
    Refactor interpose code to allow lookup to use d_splice_alias.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 01bdcfcd40abb1d48d146b114af938b2657a9eb7
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat May 21 23:33:44 2016 -0400

    Wrapfs: use new ->direct_IO prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit c4ef13f93d74b6db15c49864130f0212c134c416
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Apr 3 17:22:07 2016 -0400

    Wrapfs: use inode_un/lock helper macros
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 9a07f5b194391cf443f5516a5c598d56e6bbbeb2
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Apr 3 17:22:07 2016 -0400

    Wrapfs: use new get_link operation
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 815cc96193654a4eab4a2a698576077fd75a1c00
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 3 21:19:11 2015 -0500

    Wrapfs: update copyright year to 2015

commit 8e28c5250b6b0c738321343bfbd6eda8456b4012
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 3 21:16:58 2015 -0500

    Wrapfs: use vfs xattr helpers
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit d24503815b44b31cd3c4adb2340cdce3a1bc79a4
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Sep 4 23:23:14 2015 -0400

    Wrapfs: update follow_link
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit c4f5e53fcfa1e0141bf9109e8728eaab45e816d4
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Sep 4 23:13:21 2015 -0400

    Wrapfs: update ->direct_IO op prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 7197f36b88999d0313b256741248eba065648e62
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Sep 4 23:12:21 2015 -0400

    Wrapfs: use d_inode macro
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit d169bf58cff0726ea9df565c017e0126bf1349cb
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Sep 4 23:11:21 2015 -0400

    Wrapfs: remove aio_read/write ops
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit f95a5c85611d22c33b823da9b81a6d5ab1d8d876
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Aug 15 22:48:32 2014 -0400

    Wrapfs: properly copy meta-data after AIO operations from lower inode
    
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit e477930dceba127cfef0be5ff57d6995c77d7349
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Aug 11 18:10:35 2014 -0400

    Wrapfs: leave placeholders for updating upper inode after AIO
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 306b02492db8cd72c9b9c84b5fa76b2cf955b887
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Aug 10 00:40:56 2014 -0400

    Wrapfs: protect lower_file by ref-count during aio operation
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>

commit 9482276cc83d058dcdf8b1916af332cdf0cc9b27
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Aug 10 00:40:56 2014 -0400

    Wrapfs: add read_iter/write_iter opeations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>

commit 14a96172292adf2f6fe50551bead3a866dd6e373
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Aug 10 00:40:56 2014 -0400

    Wrapfs: update to new direct_IO interface
    
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 0845cb5da3edf79f74c53c900a8619804977a02a
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat Jul 26 19:06:53 2014 -0400

    Wrapfs: update wrapfs_fsync
    
    In v3.16 generic_file_fsync will access ->i_sb->s_bdev->bd_disk, but
    s_bdev is NULL for wrapfs inode.  This will trigger a kernel panic in
    xfstests generic/075, generic/091, etc. as of  kernel v3.16-rc1.
    
    This patch fixes this issue by using __generic_file_fsync, a new
    interface introduced in v3.16.
    
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit f29aed8ef82745225ed3ae936ee08754f90eea4d
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Wed Jun 25 22:37:16 2014 -0400

    Wrapfs: fix ->llseek to update upper and lower offsets
    
    Fixes bug: xfstests generic/257. f_pos consistently is required by and
    only by dir_ops->wrapfs_readdir, main_ops is not affected.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>

commit 2a588b146d8831ab5a57274e6a3dd06e529b2e13
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Wed Jun 25 22:30:27 2014 -0400

     Wrapfs: support extended attributes (xattr) operations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>
    Signed-off-by: Mengyang Li <li.mengy...@stonybrook.edu>

commit 3780afdb2464281dedfc92c39b1d22fcce94a2bf
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Jun 20 19:40:04 2014 -0400

    Wrapfs: support asynchronous-IO (AIO) operations
    
    Signed-off-by: Li Mengyang <li.mengy...@stonybrook.edu>
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 466b2bc6b4f3b5c6c96404c66a15be95a6e38ca6
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Jun 20 19:39:40 2014 -0400

    Wrapfs: support direct-IO (DIO) operations
    
    Signed-off-by: Li Mengyang <li.mengy...@stonybrook.edu>
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 784d260deebd8d7f3956c937d6c05b6b7a87adef
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Wed May 14 23:45:28 2014 -0400

    Wrapfs: implement vm_ops->page_mkwrite
    
    Some file systems (e.g., ext4) require it.  Reported by Ted Ts'o.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit ddebd3ef671e595c4714bde08f9e42c68ee3017d
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat Apr 26 22:43:20 2014 -0400

    Wrapfs: use new vfs_rename prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 6fac5add72f818c82faf925b8b21ad9cd7d6b4c1
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Thu Apr 3 13:24:28 2014 -0400

    Wrapfs: update documentation
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit f3d1b841efc0d415935860231a9976fabff645cb
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Thu Apr 3 13:17:55 2014 -0400

    Wrapfs: update maintainers
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 1152ce87fda3ee893df9d6d3ebe642bad1054853
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jan 21 03:03:00 2014 -0500

    Wrapfs: update documentation
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 34eb7c0e98d57ec3546c30d1b22170a60caeb01f
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jan 21 01:25:54 2014 -0500

    Wrapfs: 2014 Copyright update
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 47107a1384561b7c77c75421242aafbfabfed2cf
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 26 23:05:22 2013 -0500

    Wrapfs: use generic put_link helper
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 3f6a486a939244d61c2a3937318c1fde72f1cce7
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 26 23:03:46 2013 -0500

    Wrapfs: remove unnecessary initializations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 72aebca6874df47a7ae8f5f64ea7847ac0c2bc26
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Nov 24 11:12:07 2013 -0500

    Wrapfs: remove deprecated init_lower_nd
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 6da25bfc63e2db0cd67f158b2395da00acfc73a8
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 19:00:00 2013 -0500

    Wrapfs: update MAINTAINERS info
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 9b693c70498ee9f8c3b17558605ad99e8fa6abb9
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 18:59:47 2013 -0500

    patch wrapfs-copyright-update.patch

commit d2e2d99c8ab68a187e9dc0ee53f844c77a2f4895
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:23:31 2013 -0500

    Wrapfs: use DCACHE_OP_REVALIDATE flag in ->d_revalidate
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit edd8c91bf526020b9a468e88046cdd9518a6051c
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:22:31 2013 -0500

    Wrapfs: implement ->getattr
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 68e916bf0e4c21204ffc7097805a94a08d69b967
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:21:31 2013 -0500

    Wrapfs: use file_inode helper
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 1d1fa9d044fb2e452f40d92325b8777fcb381058
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:20:31 2013 -0500

    Wrapfs: call filemap_write_and_wait in ->flush
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit e416f9d6ef1f7fb4771a679e453fb52d9b68cca3
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:19:31 2013 -0500

    Wrapfs: handle new VFS API with delegation support
    
    For now, wrapfs isn't supporting NFS delegations.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 2c84ac5654a246f2bac361d2a980306d0170f834
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:18:31 2013 -0500

    VFS: export vfs_path_lookup
    
    In 3.12, this useful function was unexported: wrapfs needs a way to lookup
    relative to a struct path and use a proper vfsmount, unlike lookup_one_len.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 1b16df17200b4d312169b46522736eb10a716ec0
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Nov 19 17:17:31 2013 -0500

    Wrapfs: ->readdir op now ->iterate
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 4904addec488e9a37231aed4af782bfc4c1a930c
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Wed Jun 5 01:36:58 2013 -0400

    Wrapfs: copy lower inode attributes in ->ioctl
    
    Some ioctls (e.g., EXT2_IOC_SETFLAGS) can change inode attributes, so copy
    them from lower inode.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 5b0fb41a0a511cdfc8eee72992344d2a32f109f5
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Wed Jun 5 01:36:58 2013 -0400

    Wrapfs: remove unnecessary call to vm_unmap in ->mmap
    
    Code is unnecessary and causes deadlocks in newer kernels.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 47459fa19b34db46ba9c032d0d2a664d88125680
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:32 2013 -0400

    Wrapfs: declare MODULE_ALIAS_FS
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 2b5a22e01497cc0c704376272b864869852c89b2
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:32 2013 -0400

    Wrapfs: don't use FS_REVAL_DOT in fs_flags
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b3517b5a3b8a5664c899b423caeb723da71a2a86
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:31 2013 -0400

    Wrapfs: remove dependency on now-defunct CONFIG_EXPERIMENTAL
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 7e22fb87d47506ca6d4b6cb72dbda3850007b0df
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:31 2013 -0400

    Wrapfs: dentry_open() no longer does mntput/dput
    
    We need to grab a reference on the path before dentry_open, and drop it
    after.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b81b0c6c28b1fda07530598a893af42f05b2bc97
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:30 2013 -0400

    Wrapfs: no need to call mnt_want_write any longer
    
    Apparently this is now being done by the VFS.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit d975f935622d31b06d7b7d290f68cb28ae3cf3e7
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:30 2013 -0400

    Wrapfs: remove VM_CAN_NONLINEAR flag use in ->mmap
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 07037d9fde7e4e0275c44949eeee4baf1239f47e
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:29 2013 -0400

    Wrapfs: ->lookup takes flags not a nameidata
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 8fa9fd688209ab09f55d8c8442fd9d7587e55f6f
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:29 2013 -0400

    Wrapfs: ->create no longer takes a nameidata, only a flag
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 99dfadb410573ae5655405dd5f03c6f7819fca2c
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:29 2013 -0400

    Wrapfs: ->d_revalidate now takes namei flags, not nameidata
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b032e5bbaef61376b69a327c774b90ea18752e54
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:28 2013 -0400

    Wrapfs: struct nameidata no longer has an open-intent data
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 340c22985a2511b2a6ca055bf6980f3a91f2ecd4
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:28 2013 -0400

    Wrapfs: dentry_open now takes a struct path
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 830bdd81bbd23543bdcb6ab2932875c5287c6372
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:27 2013 -0400

    Wrapfs: use vm_munmap in ->mmap
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 27064bd0529bf38c79db7d77403464bcec92495e
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:27 2013 -0400

    Wrapfs: use clear_inode in evict_inode
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 52b5ea893996dc304c9b6506c27dbef2809c5830
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jun 4 23:19:26 2013 -0400

    Wrapfs: use d_make_root
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 6081fafe65e985e46cd449c3c7d00e28b3935427
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jan 31 04:40:19 2012 -0500

    Wrapfs: use mode_t
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b4522ac4d4ad6395ca2f09b115f9eeda54e357c2
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Jan 29 20:34:27 2012 -0500

    Wrapfs: use set_nlink()
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 3adececd05410693a209709fd17a3f54d0512fbf
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Sep 9 00:47:49 2011 -0400

    Wrapfs: drop our dentry in ->rmdir
    
    Also clear nlinks on our inode.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 08a5fab9edba3f9900a7d1e2c0c2085188fc79d7
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Sep 6 00:10:32 2011 -0400

    Wrapfs: use d_alloc_root
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b1db65031f7a10fb75ec7b09c43480a032d32ad4
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Sep 6 00:10:31 2011 -0400

    Wrapfs: use d_set_d_op
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit ad4b34a5813bbe2c50239e5b1f939cf6b74b6c00
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Sep 6 00:10:30 2011 -0400

    Wrapfs: use updated vfs_path_lookup prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit bd9490411a19069253df109431229281ce970a6f
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Sep 6 00:10:30 2011 -0400

    Wrapfs: ->fsync updates for new prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 1c5f97a6a0b4b57494eeca4f80a46f20bc02fb0e
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Sep 6 00:10:29 2011 -0400

    Wrapfs: support LOOKUP_RCU in ->d_revalidate
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit bbbea64b191044e0d33a14a1d528c9d7cee98ed9
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Sep 6 00:10:28 2011 -0400

    Wrapfs: new ->permission prototype and fixes.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit fff60d3d032692a79d7923604ab8059460a5ca56
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon May 2 02:00:02 2011 -0400

    Wrapfs: lookup fixes
    
    Don't use lookup_one_len any longer (doesn't work for NFS).
    Initialize lower wrapfs_dentry_info so lower_path is NULL.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 1b31c1e5cdd0d7cae9ca0dc4a9aac8f68ccd2cd1
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Mar 18 13:14:28 2011 -0400

    Wrapfs: remove extra debug in rmdir
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 13fb7df994923e9916be50ddef212bf37905317c
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Mar 18 12:38:01 2011 -0400

    Wrapfs: checkpatch fixes
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 50005927dd6b3a959a783416b3ac48b0d1027444
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Mar 18 00:45:17 2011 -0400

    Wrapfs: port to 2.6.39
    
    Remove lock/unlock_kernel in ->fasync.
    Convert from ->get_sb to ->mount op.
    Remove include to smp_lock.h, added sched.h.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 04e913eaa13dbebaab675e9a866ab01eae75d99e
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Thu Mar 17 23:21:55 2011 -0400

    Wrapfs: copyright update for 2011
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit a630a8643e4fed47b306b44dca5db97527f30117
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Thu Mar 17 23:21:55 2011 -0400

    Wrapfs: better handling of NFS silly-renamed files
    
    In ->unlink, if we try to unlink an NFS silly-renamed file, NFS returns
    -EBUSY.  We have to treat it as a success and return 0 to the VFS.  NFS will
    remove silly-deleted files later on anyway.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 71800da91f0906a55c04063746cd328fa99242d3
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Thu Mar 17 23:21:55 2011 -0400

    Wrapfs: update parent directory inode size in inode ops
    
    After ->unlink, ->rmdir, and ->rename, we need to copy the (possibly
    changed) inode size of the parent directory(ies) where the operation took
    place.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 3edd65e66695b8627ba31c7f64caf470cca2d58d
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Thu Mar 17 23:21:55 2011 -0400

    Wrapfs: remove unnecessary calls to copy lower inode->n_links
    
    Removed from ->create, ->symlink, and ->mknod.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit cf00fbaadec1612a0029c8323d57e869efa20101
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Mar 7 23:20:33 2011 -0500

    Wrapfs: ->setattr fixes
    
    Call inode_change_ok on our inode, not lower.
    Don't copy inode sizes (VFS does it).
    Pass lower file in struct iattr passed to notify_change on lower inode.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit c6e1c624c4c649633ff4fd1da97c0bf604cd60d1
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sun Mar 6 16:23:16 2011 -0500

    Wrapfs: update ->permission prototye and code for new iperm flag
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b98f8fb10b6e358c667a6dbbdc3fb173cba0f423
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Nov 12 18:15:05 2010 -0500

    Wrapfs: handle maxbytes properly
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 410b272d66148f527c3f60c15b4aeb2b0b0f7133
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Sat Sep 11 15:49:33 2010 -0400

    Wrapfs: support ->unlocked_ioctl and ->compat_ioctl
    
    Old ->ioctl was split into ->unlocked_ioctl and ->compat_ioctl.  Compat
    version doesn't need to lock_kernel any longer.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit fcd3954027ae63f7bca69a471e8d9e903950e4b9
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Aug 10 23:50:14 2010 -0400

    Wrapfs: new vfs_statfs and ->evict_inode prototypes
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit a45140b6f9aa6e47512f428ca533a8928467477e
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Aug 6 23:37:29 2010 -0400

    Wrapfs: update ->fsync prototype
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 88faabdd5382f190e7ea89bf94f2300666bbc425
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Apr 20 21:22:02 2010 -0400

    Wrapfs: update documentation
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit b0f896e3800c8da71e600531d7ec7ecd3f17354f
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Apr 20 15:32:09 2010 -0400

    Wrapfs: include slab.h
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 2ef632bad0ac940ba6f79c3f3bbd4df5092a1599
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Apr 20 15:26:02 2010 -0400

    Wrapfs: avoid an extra path_get/put pair in wrapfs_open
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 043ebc4f36dc372e12431477bb7ae7ace2aa0293
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Fri Feb 26 03:18:04 2010 -0500

    Wrapfs: decrement nd_path on follow_link error
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 45bfdeac0dc90d4d7124f5feb04ec919604e86ff
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Tue Jan 5 04:27:00 2010 -0500

    Wrapfs: don't mention kernel version in modload message
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit e08d82eef63c8e9ee94d8e6eb68f0b8d8281c6a3
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Kconfig: hook to configure Wrapfs
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 2173655bc6b9f58f09a7f30c34b2ae68d327a86d
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Makefile: hook to compile Wrapfs
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit d127a51cff7c2276d8114b7f2fc28e03a125781a
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: file system magic number
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 23cfacc70eb6747a6d660791422adb8c73ddd520
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: Kconfig options
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 591f52c6908f891273eb1c9695a9a742457ebdab
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: main Makefile
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit f11a191f2e6e65324ebf6d539d0ae724efd68da9
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: vm_ops operations
    
    Includes necessary address_space workaround ops.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit c5d3939c3aaba16a91754474c8b90d6a2b8ca619
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: mount-time and module-linkage functions
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 1c4fb57ca5905bb74f970b965f95938e4fa4978b
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: lookup-related functions
    
    Main lookup function, nameidata helpers, and stacking-interposition
    functions.
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 0d8f90b69dd63edd41b15c7b24ada8a7dfd88b09
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: file operations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit da1521cd39e134ae3e9ee4a311bc1985a6a65f33
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: dentry operations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit 3c6483c0b9f5f17db6ab05ccd2d983252a15510a
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: inode operations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

commit c7a63adc451430a596f593c0a7fa02ef02d26668
Author: Erez Zadok <e...@cs.sunysb.edu>
Date:   Mon Jan 4 20:45:06 2010 -0500

    Wrapfs: superblock operations
    
    Signed-off-by: Erez Zadok <e...@cs.sunysb.edu>

diff --git a/Documentation/sphinx/rstFlatTable.py 
b/Documentation/sphinx/rstFlatTable.py
index 26db852..9916359 100644
--- a/Documentation/sphinx/rstFlatTable.py
+++ b/Documentation/sphinx/rstFlatTable.py
@@ -151,6 +151,11 @@ class ListTableBuilder(object):
     def buildTableNode(self):
 
         colwidths    = self.directive.get_column_widths(self.max_cols)
+        if isinstance(colwidths, tuple):
+            # Since docutils 0.13, get_column_widths returns a (widths,
+            # colwidths) tuple, where widths is a string (i.e. 'auto').
+            # See https://sourceforge.net/p/docutils/patches/120/.
+            colwidths = colwidths[1]
         stub_columns = self.directive.options.get('stub-columns', 0)
         header_rows  = self.directive.options.get('header-rows', 0)
 
diff --git a/Documentation/virtual/kvm/api.txt 
b/Documentation/virtual/kvm/api.txt
index 739db9a..a7596e9 100644
--- a/Documentation/virtual/kvm/api.txt
+++ b/Documentation/virtual/kvm/api.txt
@@ -2039,6 +2039,7 @@ registers, find a list below:
   PPC   | KVM_REG_PPC_TM_VSCR           | 32
   PPC   | KVM_REG_PPC_TM_DSCR           | 64
   PPC   | KVM_REG_PPC_TM_TAR            | 64
+  PPC   | KVM_REG_PPC_TM_XER            | 64
         |                               |
   MIPS  | KVM_REG_MIPS_R0               | 64
           ...
diff --git a/Makefile b/Makefile
index c7f0e79..ace32d3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 8
-SUBLEVEL = 15
+SUBLEVEL = 17
 EXTRAVERSION =
 NAME = Psychotic Stoned Sheep
 
diff --git a/arch/arc/include/asm/cacheflush.h 
b/arch/arc/include/asm/cacheflush.h
index a093adb..fc662f4 100644
--- a/arch/arc/include/asm/cacheflush.h
+++ b/arch/arc/include/asm/cacheflush.h
@@ -85,6 +85,10 @@ void flush_anon_page(struct vm_area_struct *vma,
  */
 #define PG_dc_clean    PG_arch_1
 
+#define CACHE_COLORS_NUM       4
+#define CACHE_COLORS_MSK       (CACHE_COLORS_NUM - 1)
+#define CACHE_COLOR(addr)      (((unsigned long)(addr) >> (PAGE_SHIFT)) & 
CACHE_COLORS_MSK)
+
 /*
  * Simple wrapper over config option
  * Bootup code ensures that hardware matches kernel configuration
@@ -94,8 +98,6 @@ static inline int cache_is_vipt_aliasing(void)
        return IS_ENABLED(CONFIG_ARC_CACHE_VIPT_ALIASING);
 }
 
-#define CACHE_COLOR(addr)      (((unsigned long)(addr) >> (PAGE_SHIFT)) & 1)
-
 /*
  * checks if two addresses (after page aligning) index into same cache set
  */
diff --git a/arch/arc/mm/cache.c b/arch/arc/mm/cache.c
index 0b10efe..ab1aaf2 100644
--- a/arch/arc/mm/cache.c
+++ b/arch/arc/mm/cache.c
@@ -967,11 +967,16 @@ void arc_cache_init(void)
                /* check for D-Cache aliasing on ARCompact: ARCv2 has PIPT */
                if (is_isa_arcompact()) {
                        int handled = 
IS_ENABLED(CONFIG_ARC_CACHE_VIPT_ALIASING);
-
-                       if (dc->alias && !handled)
-                               panic("Enable 
CONFIG_ARC_CACHE_VIPT_ALIASING\n");
-                       else if (!dc->alias && handled)
+                       int num_colors = dc->sz_k/dc->assoc/TO_KB(PAGE_SIZE);
+
+                       if (dc->alias) {
+                               if (!handled)
+                                       panic("Enable 
CONFIG_ARC_CACHE_VIPT_ALIASING\n");
+                               if (CACHE_COLORS_NUM != num_colors)
+                                       panic("CACHE_COLORS_NUM not optimized 
for config\n");
+                       } else if (!dc->alias && handled) {
                                panic("Disable 
CONFIG_ARC_CACHE_VIPT_ALIASING\n");
+                       }
                }
        }
 
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index f193414..4986dc0 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -372,8 +372,7 @@ static int __init xen_guest_init(void)
         * for secondary CPUs as they are brought up.
         * For uniformity we use VCPUOP_register_vcpu_info even on cpu0.
         */
-       xen_vcpu_info = __alloc_percpu(sizeof(struct vcpu_info),
-                                              sizeof(struct vcpu_info));
+       xen_vcpu_info = alloc_percpu(struct vcpu_info);
        if (xen_vcpu_info == NULL)
                return -ENOMEM;
 
diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi 
b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
index 5fda583..906fb83 100644
--- a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
+++ b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
@@ -21,6 +21,10 @@
                reg = <0x0 0x80000000 0x1 0x0>;
        };
 
+       gpu@57000000 {
+               vdd-supply = <&vdd_gpu>;
+       };
+
        /* debug port */
        serial@70006000 {
                status = "okay";
@@ -291,4 +295,18 @@
                        clock-frequency = <32768>;
                };
        };
+
+       regulators {
+               vdd_gpu: regulator@100 {
+                       compatible = "pwm-regulator";
+                       reg = <100>;
+                       pwms = <&pwm 1 4880>;
+                       regulator-name = "VDD_GPU";
+                       regulator-min-microvolt = <710000>;
+                       regulator-max-microvolt = <1320000>;
+                       enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
+                       regulator-ramp-delay = <80>;
+                       regulator-enable-ramp-delay = <1000>;
+               };
+       };
 };
diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h
index 5420cb0..e517088 100644
--- a/arch/arm64/include/asm/acpi.h
+++ b/arch/arm64/include/asm/acpi.h
@@ -12,7 +12,7 @@
 #ifndef _ASM_ACPI_H
 #define _ASM_ACPI_H
 
-#include <linux/mm.h>
+#include <linux/memblock.h>
 #include <linux/psci.h>
 
 #include <asm/cputype.h>
@@ -32,7 +32,11 @@
 static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys,
                                            acpi_size size)
 {
-       if (!page_is_ram(phys >> PAGE_SHIFT))
+       /*
+        * EFI's reserve_regions() call adds memory with the WB attribute
+        * to memblock via early_init_dt_add_memory_arch().
+        */
+       if (!memblock_is_memory(phys))
                return ioremap(phys, size);
 
        return ioremap_cache(phys, size);
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 536dce2..514b4e3 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -206,10 +206,15 @@ static void __init request_standard_resources(void)
 
        for_each_memblock(memory, region) {
                res = alloc_bootmem_low(sizeof(*res));
-               res->name  = "System RAM";
+               if (memblock_is_nomap(region)) {
+                       res->name  = "reserved";
+                       res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+               } else {
+                       res->name  = "System RAM";
+                       res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
+               }
                res->start = 
__pfn_to_phys(memblock_region_memory_base_pfn(region));
                res->end = 
__pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
-               res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
 
                request_resource(&iomem_resource, res);
 
diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
index 5a84b45..03498c8 100644
--- a/arch/arm64/kvm/hyp/switch.c
+++ b/arch/arm64/kvm/hyp/switch.c
@@ -82,7 +82,13 @@ static void __hyp_text __activate_traps(struct kvm_vcpu 
*vcpu)
        write_sysreg(val, hcr_el2);
        /* Trap on AArch32 cp15 c15 accesses (EL1 or EL0) */
        write_sysreg(1 << 15, hstr_el2);
-       /* Make sure we trap PMU access from EL0 to EL2 */
+       /*
+        * Make sure we trap PMU access from EL0 to EL2. Also sanitize
+        * PMSELR_EL0 to make sure it never contains the cycle
+        * counter, which could make a PMXEVCNTR_EL0 access UNDEF at
+        * EL1 instead of being trapped to EL2.
+        */
+       write_sysreg(0, pmselr_el0);
        write_sysreg(ARMV8_PMU_USERENR_MASK, pmuserenr_el0);
        write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
        __activate_traps_arch()();
diff --git a/arch/powerpc/boot/ps3-head.S b/arch/powerpc/boot/ps3-head.S
index b6fcbaf..3dc44b0 100644
--- a/arch/powerpc/boot/ps3-head.S
+++ b/arch/powerpc/boot/ps3-head.S
@@ -57,11 +57,6 @@ __system_reset_overlay:
        bctr
 
 1:
-       /* Save the value at addr zero for a null pointer write check later. */
-
-       li      r4, 0
-       lwz     r3, 0(r4)
-
        /* Primary delays then goes to _zimage_start in wrapper. */
 
        or      31, 31, 31 /* db16cyc */
diff --git a/arch/powerpc/boot/ps3.c b/arch/powerpc/boot/ps3.c
index 4ec2d86..a05558a 100644
--- a/arch/powerpc/boot/ps3.c
+++ b/arch/powerpc/boot/ps3.c
@@ -119,13 +119,12 @@ void ps3_copy_vectors(void)
        flush_cache((void *)0x100, 512);
 }
 
-void platform_init(unsigned long null_check)
+void platform_init(void)
 {
        const u32 heapsize = 0x1000000 - (u32)_end; /* 16MiB */
        void *chosen;
        unsigned long ft_addr;
        u64 rm_size;
-       unsigned long val;
 
        console_ops.write = ps3_console_write;
        platform_ops.exit = ps3_exit;
@@ -153,11 +152,6 @@ void platform_init(unsigned long null_check)
 
        printf(" flat tree at 0x%lx\n\r", ft_addr);
 
-       val = *(unsigned long *)0;
-
-       if (val != null_check)
-               printf("null check failed: %lx != %lx\n\r", val, null_check);
-
        ((kernel_entry_t)0)(ft_addr, 0, NULL);
 
        ps3_exit();
diff --git a/arch/powerpc/include/asm/kvm_host.h 
b/arch/powerpc/include/asm/kvm_host.h
index ec35af3..f2c5dde 100644
--- a/arch/powerpc/include/asm/kvm_host.h
+++ b/arch/powerpc/include/asm/kvm_host.h
@@ -555,6 +555,7 @@ struct kvm_vcpu_arch {
        u64 tfiar;
 
        u32 cr_tm;
+       u64 xer_tm;
        u64 lr_tm;
        u64 ctr_tm;
        u64 amr_tm;
diff --git a/arch/powerpc/include/uapi/asm/kvm.h 
b/arch/powerpc/include/uapi/asm/kvm.h
index c93cf35..0fb1326 100644
--- a/arch/powerpc/include/uapi/asm/kvm.h
+++ b/arch/powerpc/include/uapi/asm/kvm.h
@@ -596,6 +596,7 @@ struct kvm_get_htab_header {
 #define KVM_REG_PPC_TM_VSCR    (KVM_REG_PPC_TM | KVM_REG_SIZE_U32 | 0x67)
 #define KVM_REG_PPC_TM_DSCR    (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x68)
 #define KVM_REG_PPC_TM_TAR     (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x69)
+#define KVM_REG_PPC_TM_XER     (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x6a)
 
 /* PPC64 eXternal Interrupt Controller Specification */
 #define KVM_DEV_XICS_GRP_SOURCES       1       /* 64-bit source attributes */
diff --git a/arch/powerpc/kernel/asm-offsets.c 
b/arch/powerpc/kernel/asm-offsets.c
index b89d14c..6ba221c 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -569,6 +569,7 @@ int main(void)
        DEFINE(VCPU_VRS_TM, offsetof(struct kvm_vcpu, arch.vr_tm.vr));
        DEFINE(VCPU_VRSAVE_TM, offsetof(struct kvm_vcpu, arch.vrsave_tm));
        DEFINE(VCPU_CR_TM, offsetof(struct kvm_vcpu, arch.cr_tm));
+       DEFINE(VCPU_XER_TM, offsetof(struct kvm_vcpu, arch.xer_tm));
        DEFINE(VCPU_LR_TM, offsetof(struct kvm_vcpu, arch.lr_tm));
        DEFINE(VCPU_CTR_TM, offsetof(struct kvm_vcpu, arch.ctr_tm));
        DEFINE(VCPU_AMR_TM, offsetof(struct kvm_vcpu, arch.amr_tm));
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index f765b04..8825789 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -201,9 +201,9 @@ booting_thread_hwid:
  */
 _GLOBAL(book3e_start_thread)
        LOAD_REG_IMMEDIATE(r5, MSR_KERNEL)
-       cmpi    0, r3, 0
+       cmpwi   r3, 0
        beq     10f
-       cmpi    0, r3, 1
+       cmpwi   r3, 1
        beq     11f
        /* If the thread id is invalid, just exit. */
        b       13f
@@ -228,9 +228,9 @@ _GLOBAL(book3e_start_thread)
  * r3 = the thread physical id
  */
 _GLOBAL(book3e_stop_thread)
-       cmpi    0, r3, 0
+       cmpwi   r3, 0
        beq     10f
-       cmpi    0, r3, 1
+       cmpwi   r3, 1
        beq     10f
        /* If the thread id is invalid, just exit. */
        b       13f
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 2fd5580..4c8d344 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -1235,6 +1235,9 @@ static int kvmppc_get_one_reg_hv(struct kvm_vcpu *vcpu, 
u64 id,
        case KVM_REG_PPC_TM_CR:
                *val = get_reg_val(id, vcpu->arch.cr_tm);
                break;
+       case KVM_REG_PPC_TM_XER:
+               *val = get_reg_val(id, vcpu->arch.xer_tm);
+               break;
        case KVM_REG_PPC_TM_LR:
                *val = get_reg_val(id, vcpu->arch.lr_tm);
                break;
@@ -1442,6 +1445,9 @@ static int kvmppc_set_one_reg_hv(struct kvm_vcpu *vcpu, 
u64 id,
        case KVM_REG_PPC_TM_CR:
                vcpu->arch.cr_tm = set_reg_val(id, *val);
                break;
+       case KVM_REG_PPC_TM_XER:
+               vcpu->arch.xer_tm = set_reg_val(id, *val);
+               break;
        case KVM_REG_PPC_TM_LR:
                vcpu->arch.lr_tm = set_reg_val(id, *val);
                break;
diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c 
b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
index 99b4e9d..5420d06 100644
--- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
+++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
@@ -653,6 +653,8 @@ long kvmppc_h_protect(struct kvm_vcpu *vcpu, unsigned long 
flags,
                                              HPTE_V_ABSENT);
                        do_tlbies(kvm, &rb, 1, global_invalidates(kvm, flags),
                                  true);
+                       /* Don't lose R/C bit updates done by hardware */
+                       r |= be64_to_cpu(hpte[1]) & (HPTE_R_R | HPTE_R_C);
                        hpte[1] = cpu_to_be64(r);
                }
        }
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S 
b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
index 9756555..bf243a4 100644
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
@@ -2579,11 +2579,13 @@ kvmppc_save_tm:
        mfctr   r7
        mfspr   r8, SPRN_AMR
        mfspr   r10, SPRN_TAR
+       mfxer   r11
        std     r5, VCPU_LR_TM(r9)
        stw     r6, VCPU_CR_TM(r9)
        std     r7, VCPU_CTR_TM(r9)
        std     r8, VCPU_AMR_TM(r9)
        std     r10, VCPU_TAR_TM(r9)
+       std     r11, VCPU_XER_TM(r9)
 
        /* Restore r12 as trap number. */
        lwz     r12, VCPU_TRAP(r9)
@@ -2676,11 +2678,13 @@ kvmppc_restore_tm:
        ld      r7, VCPU_CTR_TM(r4)
        ld      r8, VCPU_AMR_TM(r4)
        ld      r9, VCPU_TAR_TM(r4)
+       ld      r10, VCPU_XER_TM(r4)
        mtlr    r5
        mtcr    r6
        mtctr   r7
        mtspr   SPRN_AMR, r8
        mtspr   SPRN_TAR, r9
+       mtxer   r10
 
        /*
         * Load up PPR and DSCR values but don't put them in the actual SPRs
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 7f7ba5f2..d027f2e 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -445,7 +445,7 @@ static void __init setup_resources(void)
         * part of the System RAM resource.
         */
        if (crashk_res.end) {
-               memblock_add(crashk_res.start, resource_size(&crashk_res));
+               memblock_add_node(crashk_res.start, resource_size(&crashk_res), 
0);
                memblock_reserve(crashk_res.start, resource_size(&crashk_res));
                insert_resource(&iomem_resource, &crashk_res);
        }
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 0b56666..b84a349 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -852,8 +852,8 @@ ftrace_graph_call:
        jmp     ftrace_stub
 #endif
 
-.globl ftrace_stub
-ftrace_stub:
+/* This is weak to keep gas from relaxing the jumps */
+WEAK(ftrace_stub)
        ret
 END(ftrace_caller)
 
diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 8c925ec..7b0f1d9 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -364,7 +364,11 @@ int x86_add_exclusive(unsigned int what)
 {
        int i;
 
-       if (x86_pmu.lbr_pt_coexist)
+       /*
+        * When lbr_pt_coexist we allow PT to coexist with either LBR or BTS.
+        * LBR and BTS are still mutually exclusive.
+        */
+       if (x86_pmu.lbr_pt_coexist && what == x86_lbr_exclusive_pt)
                return 0;
 
        if (!atomic_inc_not_zero(&x86_pmu.lbr_exclusive[what])) {
@@ -387,7 +391,7 @@ fail_unlock:
 
 void x86_del_exclusive(unsigned int what)
 {
-       if (x86_pmu.lbr_pt_coexist)
+       if (x86_pmu.lbr_pt_coexist && what == x86_lbr_exclusive_pt)
                return;
 
        atomic_dec(&x86_pmu.lbr_exclusive[what]);
diff --git a/arch/x86/events/intel/cstate.c b/arch/x86/events/intel/cstate.c
index 3ca87b5..834262a 100644
--- a/arch/x86/events/intel/cstate.c
+++ b/arch/x86/events/intel/cstate.c
@@ -571,6 +571,9 @@ static int __init cstate_probe(const struct cstate_model 
*cm)
 
 static inline void cstate_cleanup(void)
 {
+       cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_CSTATE_ONLINE);
+       cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_CSTATE_STARTING);
+
        if (has_cstate_core)
                perf_pmu_unregister(&cstate_core_pmu);
 
@@ -583,16 +586,16 @@ static int __init cstate_init(void)
        int err;
 
        cpuhp_setup_state(CPUHP_AP_PERF_X86_CSTATE_STARTING,
-                         "AP_PERF_X86_CSTATE_STARTING", cstate_cpu_init,
-                         NULL);
+                         "perf/x86/cstate:starting", cstate_cpu_init, NULL);
        cpuhp_setup_state(CPUHP_AP_PERF_X86_CSTATE_ONLINE,
-                         "AP_PERF_X86_CSTATE_ONLINE", NULL, cstate_cpu_exit);
+                         "perf/x86/cstate:online", NULL, cstate_cpu_exit);
 
        if (has_cstate_core) {
                err = perf_pmu_register(&cstate_core_pmu, cstate_core_pmu.name, 
-1);
                if (err) {
                        has_cstate_core = false;
                        pr_info("Failed to register cstate core pmu\n");
+                       cstate_cleanup();
                        return err;
                }
        }
@@ -606,8 +609,7 @@ static int __init cstate_init(void)
                        return err;
                }
        }
-
-       return err;
+       return 0;
 }
 
 static int __init cstate_pmu_init(void)
@@ -632,8 +634,6 @@ module_init(cstate_pmu_init);
 
 static void __exit cstate_pmu_exit(void)
 {
-       cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_CSTATE_ONLINE);
-       cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_CSTATE_STARTING);
        cstate_cleanup();
 }
 module_exit(cstate_pmu_exit);
diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
index 181c238..4ab002d 100644
--- a/arch/x86/events/perf_event.h
+++ b/arch/x86/events/perf_event.h
@@ -601,7 +601,7 @@ struct x86_pmu {
        u64             lbr_sel_mask;              /* LBR_SELECT valid bits */
        const int       *lbr_sel_map;              /* lbr_select mappings */
        bool            lbr_double_abort;          /* duplicated lbr aborts */
-       bool            lbr_pt_coexist;            /* LBR may coexist with PT */
+       bool            lbr_pt_coexist;            /* (LBR|BTS) may coexist 
with PT */
 
        /*
         * Intel PT/LBR/BTS are exclusive
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 5cede40..7a72db5 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1336,10 +1336,10 @@ static inline bool nested_cpu_has_posted_intr(struct 
vmcs12 *vmcs12)
        return vmcs12->pin_based_vm_exec_control & PIN_BASED_POSTED_INTR;
 }
 
-static inline bool is_exception(u32 intr_info)
+static inline bool is_nmi(u32 intr_info)
 {
        return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK))
-               == (INTR_TYPE_HARD_EXCEPTION | INTR_INFO_VALID_MASK);
+               == (INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK);
 }
 
 static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
@@ -5467,7 +5467,7 @@ static int handle_exception(struct kvm_vcpu *vcpu)
        if (is_machine_check(intr_info))
                return handle_machine_check(vcpu);
 
-       if ((intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR)
+       if (is_nmi(intr_info))
                return 1;  /* already handled by vmx_vcpu_run() */
 
        if (is_no_device(intr_info)) {
@@ -7974,7 +7974,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)
 
        switch (exit_reason) {
        case EXIT_REASON_EXCEPTION_NMI:
-               if (!is_exception(intr_info))
+               if (is_nmi(intr_info))
                        return false;
                else if (is_page_fault(intr_info))
                        return enable_ept;
@@ -8572,8 +8572,7 @@ static void vmx_complete_atomic_exit(struct vcpu_vmx *vmx)
                kvm_machine_check();
 
        /* We need to handle NMIs before interrupts are enabled */
-       if ((exit_intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR &&
-           (exit_intr_info & INTR_INFO_VALID_MASK)) {
+       if (is_nmi(exit_intr_info)) {
                kvm_before_handle_nmi(&vmx->vcpu);
                asm("int $2");
                kvm_after_handle_nmi(&vmx->vcpu);
diff --git a/block/blk-mq.c b/block/blk-mq.c
index c207fa9..494e0d8 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1371,9 +1371,9 @@ static blk_qc_t blk_mq_make_request(struct request_queue 
*q, struct bio *bio)
                blk_mq_put_ctx(data.ctx);
                if (!old_rq)
                        goto done;
-               if (!blk_mq_direct_issue_request(old_rq, &cookie))
-                       goto done;
-               blk_mq_insert_request(old_rq, false, true, true);
+               if (test_bit(BLK_MQ_S_STOPPED, &data.hctx->state) ||
+                   blk_mq_direct_issue_request(old_rq, &cookie) != 0)
+                       blk_mq_insert_request(old_rq, false, true, true);
                goto done;
        }
 
diff --git a/block/bsg.c b/block/bsg.c
index d214e92..b9a5361 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -655,6 +655,9 @@ bsg_write(struct file *file, const char __user *buf, size_t 
count, loff_t *ppos)
 
        dprintk("%s: write %Zd bytes\n", bd->name, count);
 
+       if (unlikely(segment_eq(get_fs(), KERNEL_DS)))
+               return -EINVAL;
+
        bsg_set_block(bd, file);
 
        bytes_written = 0;
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
index a6b36fc..02ded25 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -296,6 +296,26 @@ static const struct dmi_system_id video_detect_dmi_table[] 
= {
                DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V131"),
                },
        },
+       {
+        /* https://bugzilla.redhat.com/show_bug.cgi?id=1123661 */
+        .callback = video_detect_force_native,
+        .ident = "Dell XPS 17 L702X",
+        .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+               DMI_MATCH(DMI_PRODUCT_NAME, "Dell System XPS L702X"),
+               },
+       },
+       {
+       /* https://bugzilla.redhat.com/show_bug.cgi?id=1204476 */
+       /* 
https://bugs.launchpad.net/ubuntu/+source/linux-lts-trusty/+bug/1416940 */
+       .callback = video_detect_force_native,
+       .ident = "HP Pavilion dv6",
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv6 Notebook PC"),
+               },
+       },
+
        { },
 };
 
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 0a8bdad..88df65d 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -836,11 +836,29 @@ static struct kobject *get_device_parent(struct device 
*dev,
        return NULL;
 }
 
+static inline bool live_in_glue_dir(struct kobject *kobj,
+                                   struct device *dev)
+{
+       if (!kobj || !dev->class ||
+           kobj->kset != &dev->class->p->glue_dirs)
+               return false;
+       return true;
+}
+
+static inline struct kobject *get_glue_dir(struct device *dev)
+{
+       return dev->kobj.parent;
+}
+
+/*
+ * make sure cleaning up dir as the last step, we need to make
+ * sure .release handler of kobject is run with holding the
+ * global lock
+ */
 static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
 {
        /* see if we live in a "glue" directory */
-       if (!glue_dir || !dev->class ||
-           glue_dir->kset != &dev->class->p->glue_dirs)
+       if (!live_in_glue_dir(glue_dir, dev))
                return;
 
        mutex_lock(&gdp_mutex);
@@ -848,11 +866,6 @@ static void cleanup_glue_dir(struct device *dev, struct 
kobject *glue_dir)
        mutex_unlock(&gdp_mutex);
 }
 
-static void cleanup_device_parent(struct device *dev)
-{
-       cleanup_glue_dir(dev, dev->kobj.parent);
-}
-
 static int device_add_class_symlinks(struct device *dev)
 {
        struct device_node *of_node = dev_of_node(dev);
@@ -1028,6 +1041,7 @@ int device_add(struct device *dev)
        struct kobject *kobj;
        struct class_interface *class_intf;
        int error = -EINVAL;
+       struct kobject *glue_dir = NULL;
 
        dev = get_device(dev);
        if (!dev)
@@ -1072,8 +1086,10 @@ int device_add(struct device *dev)
        /* first, register with generic layer. */
        /* we require the name to be set before, and pass NULL */
        error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);
-       if (error)
+       if (error) {
+               glue_dir = get_glue_dir(dev);
                goto Error;
+       }
 
        /* notify platform of device entry */
        if (platform_notify)
@@ -1154,9 +1170,10 @@ done:
        device_remove_file(dev, &dev_attr_uevent);
  attrError:
        kobject_uevent(&dev->kobj, KOBJ_REMOVE);
+       glue_dir = get_glue_dir(dev);
        kobject_del(&dev->kobj);
  Error:
-       cleanup_device_parent(dev);
+       cleanup_glue_dir(dev, glue_dir);
        put_device(parent);
 name_error:
        kfree(dev->p);
@@ -1232,6 +1249,7 @@ EXPORT_SYMBOL_GPL(put_device);
 void device_del(struct device *dev)
 {
        struct device *parent = dev->parent;
+       struct kobject *glue_dir = NULL;
        struct class_interface *class_intf;
 
        /* Notify clients of device removal.  This call must come
@@ -1276,8 +1294,9 @@ void device_del(struct device *dev)
                blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
                                             BUS_NOTIFY_REMOVED_DEVICE, dev);
        kobject_uevent(&dev->kobj, KOBJ_REMOVE);
-       cleanup_device_parent(dev);
+       glue_dir = get_glue_dir(dev);
        kobject_del(&dev->kobj);
+       cleanup_glue_dir(dev, glue_dir);
        put_device(parent);
 }
 EXPORT_SYMBOL_GPL(device_del);
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 22d1760..a95e1e5 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -955,13 +955,14 @@ static int _request_firmware_load(struct firmware_priv 
*fw_priv,
                timeout = MAX_JIFFY_OFFSET;
        }
 
-       retval = wait_for_completion_interruptible_timeout(&buf->completion,
+       timeout = wait_for_completion_interruptible_timeout(&buf->completion,
                        timeout);
-       if (retval == -ERESTARTSYS || !retval) {
+       if (timeout == -ERESTARTSYS || !timeout) {
+               retval = timeout;
                mutex_lock(&fw_lock);
                fw_load_abort(fw_priv);
                mutex_unlock(&fw_lock);
-       } else if (retval > 0) {
+       } else if (timeout > 0) {
                retval = 0;
        }
 
diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index df0c709..94b33ce 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -1320,7 +1320,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_put_prop_name);
  * that this function is *NOT* called under RCU protection or in contexts where
  * mutex cannot be locked.
  */
-int dev_pm_opp_set_regulator(struct device *dev, const char *name)
+struct opp_table *dev_pm_opp_set_regulator(struct device *dev, const char 
*name)
 {
        struct opp_table *opp_table;
        struct regulator *reg;
@@ -1358,20 +1358,20 @@ int dev_pm_opp_set_regulator(struct device *dev, const 
char *name)
        opp_table->regulator = reg;
 
        mutex_unlock(&opp_table_lock);
-       return 0;
+       return opp_table;
 
 err:
        _remove_opp_table(opp_table);
 unlock:
        mutex_unlock(&opp_table_lock);
 
-       return ret;
+       return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_set_regulator);
 
 /**
  * dev_pm_opp_put_regulator() - Releases resources blocked for regulator
- * @dev: Device for which regulator was set.
+ * @opp_table: OPP table returned from dev_pm_opp_set_regulator().
  *
  * Locking: The internal opp_table and opp structures are RCU protected.
  * Hence this function internally uses RCU updater strategy with mutex locks
@@ -1379,22 +1379,12 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_set_regulator);
  * that this function is *NOT* called under RCU protection or in contexts where
  * mutex cannot be locked.
  */
-void dev_pm_opp_put_regulator(struct device *dev)
+void dev_pm_opp_put_regulator(struct opp_table *opp_table)
 {
-       struct opp_table *opp_table;
-
        mutex_lock(&opp_table_lock);
 
-       /* Check for existing table for 'dev' first */
-       opp_table = _find_opp_table(dev);
-       if (IS_ERR(opp_table)) {
-               dev_err(dev, "Failed to find opp_table: %ld\n",
-                       PTR_ERR(opp_table));
-               goto unlock;
-       }
-
        if (IS_ERR(opp_table->regulator)) {
-               dev_err(dev, "%s: Doesn't have regulator set\n", __func__);
+               pr_err("%s: Doesn't have regulator set\n", __func__);
                goto unlock;
        }
 
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
index ab19adb..3c606c0 100644
--- a/drivers/block/aoe/aoecmd.c
+++ b/drivers/block/aoe/aoecmd.c
@@ -853,45 +853,6 @@ rqbiocnt(struct request *r)
        return n;
 }
 
-/* This can be removed if we are certain that no users of the block
- * layer will ever use zero-count pages in bios.  Otherwise we have to
- * protect against the put_page sometimes done by the network layer.
- *
- * See http://oss.sgi.com/archives/xfs/2007-01/msg00594.html for
- * discussion.
- *
- * We cannot use get_page in the workaround, because it insists on a
- * positive page count as a precondition.  So we use _refcount directly.
- */
-static void
-bio_pageinc(struct bio *bio)
-{
-       struct bio_vec bv;
-       struct page *page;
-       struct bvec_iter iter;
-
-       bio_for_each_segment(bv, bio, iter) {
-               /* Non-zero page count for non-head members of
-                * compound pages is no longer allowed by the kernel.
-                */
-               page = compound_head(bv.bv_page);
-               page_ref_inc(page);
-       }
-}
-
-static void
-bio_pagedec(struct bio *bio)
-{
-       struct page *page;
-       struct bio_vec bv;
-       struct bvec_iter iter;
-
-       bio_for_each_segment(bv, bio, iter) {
-               page = compound_head(bv.bv_page);
-               page_ref_dec(page);
-       }
-}
-
 static void
 bufinit(struct buf *buf, struct request *rq, struct bio *bio)
 {
@@ -899,7 +860,6 @@ bufinit(struct buf *buf, struct request *rq, struct bio 
*bio)
        buf->rq = rq;
        buf->bio = bio;
        buf->iter = bio->bi_iter;
-       bio_pageinc(bio);
 }
 
 static struct buf *
@@ -1127,7 +1087,6 @@ aoe_end_buf(struct aoedev *d, struct buf *buf)
        if (buf == d->ip.buf)
                d->ip.buf = NULL;
        rq = buf->rq;
-       bio_pagedec(buf->bio);
        mempool_free(buf, d->bufpool);
        n = (unsigned long) rq->special;
        rq->special = (void *) --n;
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index c9f2107..b314a57 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1646,7 +1646,7 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
        blk_mq_start_request(bd->rq);
 
        if (lo->lo_state != Lo_bound)
-               return -EIO;
+               return BLK_MQ_RQ_QUEUE_ERROR;
 
        switch (req_op(cmd->rq)) {
        case REQ_OP_FLUSH:
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 62028f4..a2ab008 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -307,7 +307,6 @@ static int tpmfront_probe(struct xenbus_device *dev,
        rv = setup_ring(dev, priv);
        if (rv) {
                chip = dev_get_drvdata(&dev->dev);
-               tpm_chip_unregister(chip);
                ring_free(priv);
                return rv;
        }
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
index 0fc71cb..3250694 100644
--- a/drivers/clk/bcm/clk-bcm2835.c
+++ b/drivers/clk/bcm/clk-bcm2835.c
@@ -751,7 +751,9 @@ static void bcm2835_pll_divider_off(struct clk_hw *hw)
        cprman_write(cprman, data->cm_reg,
                     (cprman_read(cprman, data->cm_reg) &
                      ~data->load_mask) | data->hold_mask);
-       cprman_write(cprman, data->a2w_reg, A2W_PLL_CHANNEL_DISABLE);
+       cprman_write(cprman, data->a2w_reg,
+                    cprman_read(cprman, data->a2w_reg) |
+                    A2W_PLL_CHANNEL_DISABLE);
        spin_unlock(&cprman->regs_lock);
 }
 
diff --git a/drivers/clk/ti/clk-3xxx.c b/drivers/clk/ti/clk-3xxx.c
index 8831e1a..11d8aa3 100644
--- a/drivers/clk/ti/clk-3xxx.c
+++ b/drivers/clk/ti/clk-3xxx.c
@@ -22,13 +22,6 @@
 
 #include "clock.h"
 
-/*
- * DPLL5_FREQ_FOR_USBHOST: USBHOST and USBTLL are the only clocks
- * that are sourced by DPLL5, and both of these require this clock
- * to be at 120 MHz for proper operation.
- */
-#define DPLL5_FREQ_FOR_USBHOST         120000000
-
 #define OMAP3430ES2_ST_DSS_IDLE_SHIFT                  1
 #define OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT             5
 #define OMAP3430ES2_ST_SSI_IDLE_SHIFT                  8
@@ -546,14 +539,21 @@ void __init omap3_clk_lock_dpll5(void)
        struct clk *dpll5_clk;
        struct clk *dpll5_m2_clk;
 
+       /*
+        * Errata sprz319f advisory 2.1 documents a USB host clock drift issue
+        * that can be worked around using specially crafted dpll5 settings
+        * with a dpll5_m2 divider set to 8. Set the dpll5 rate to 8x the USB
+        * host clock rate, its .set_rate handler() will detect that frequency
+        * and use the errata settings.
+        */
        dpll5_clk = clk_get(NULL, "dpll5_ck");
-       clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST);
+       clk_set_rate(dpll5_clk, OMAP3_DPLL5_FREQ_FOR_USBHOST * 8);
        clk_prepare_enable(dpll5_clk);
 
-       /* Program dpll5_m2_clk divider for no division */
+       /* Program dpll5_m2_clk divider */
        dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck");
        clk_prepare_enable(dpll5_m2_clk);
-       clk_set_rate(dpll5_m2_clk, DPLL5_FREQ_FOR_USBHOST);
+       clk_set_rate(dpll5_m2_clk, OMAP3_DPLL5_FREQ_FOR_USBHOST);
 
        clk_disable_unprepare(dpll5_m2_clk);
        clk_disable_unprepare(dpll5_clk);
diff --git a/drivers/clk/ti/clock.h b/drivers/clk/ti/clock.h
index 90f3f47..13c37f4 100644
--- a/drivers/clk/ti/clock.h
+++ b/drivers/clk/ti/clock.h
@@ -257,11 +257,20 @@ long omap2_dpll_round_rate(struct clk_hw *hw, unsigned 
long target_rate,
 unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw,
                                    unsigned long parent_rate);
 
+/*
+ * OMAP3_DPLL5_FREQ_FOR_USBHOST: USBHOST and USBTLL are the only clocks
+ * that are sourced by DPLL5, and both of these require this clock
+ * to be at 120 MHz for proper operation.
+ */
+#define OMAP3_DPLL5_FREQ_FOR_USBHOST   120000000
+
 unsigned long omap3_dpll_recalc(struct clk_hw *hw, unsigned long parent_rate);
 int omap3_dpll4_set_rate(struct clk_hw *clk, unsigned long rate,
                         unsigned long parent_rate);
 int omap3_dpll4_set_rate_and_parent(struct clk_hw *hw, unsigned long rate,
                                    unsigned long parent_rate, u8 index);
+int omap3_dpll5_set_rate(struct clk_hw *hw, unsigned long rate,
+                        unsigned long parent_rate);
 void omap3_clk_lock_dpll5(void);
 
 unsigned long omap4_dpll_regm4xen_recalc(struct clk_hw *hw,
diff --git a/drivers/clk/ti/dpll.c b/drivers/clk/ti/dpll.c
index 9fc8754..4b9a419 100644
--- a/drivers/clk/ti/dpll.c
+++ b/drivers/clk/ti/dpll.c
@@ -114,6 +114,18 @@ static const struct clk_ops omap3_dpll_ck_ops = {
        .round_rate     = &omap2_dpll_round_rate,
 };
 
+static const struct clk_ops omap3_dpll5_ck_ops = {
+       .enable         = &omap3_noncore_dpll_enable,
+       .disable        = &omap3_noncore_dpll_disable,
+       .get_parent     = &omap2_init_dpll_parent,
+       .recalc_rate    = &omap3_dpll_recalc,
+       .set_rate       = &omap3_dpll5_set_rate,
+       .set_parent     = &omap3_noncore_dpll_set_parent,
+       .set_rate_and_parent    = &omap3_noncore_dpll_set_rate_and_parent,
+       .determine_rate = &omap3_noncore_dpll_determine_rate,
+       .round_rate     = &omap2_dpll_round_rate,
+};
+
 static const struct clk_ops omap3_dpll_per_ck_ops = {
        .enable         = &omap3_noncore_dpll_enable,
        .disable        = &omap3_noncore_dpll_disable,
@@ -474,7 +486,12 @@ static void __init of_ti_omap3_dpll_setup(struct 
device_node *node)
                .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
        };
 
-       of_ti_dpll_setup(node, &omap3_dpll_ck_ops, &dd);
+       if ((of_machine_is_compatible("ti,omap3630") ||
+            of_machine_is_compatible("ti,omap36xx")) &&
+           !strcmp(node->name, "dpll5_ck"))
+               of_ti_dpll_setup(node, &omap3_dpll5_ck_ops, &dd);

_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
unionfs-cvs@fsl.cs.sunysb.edu
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to