Commit 6792dfe3 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'akpm' (patches from Andrew Morton)

Merge misc fixes from Andrew Morton:
 "A bunch of fixes"

* emailed patches fron Andrew Morton <akpm@linux-foundation.org>:
  ocfs2: check existence of old dentry in ocfs2_link()
  ocfs2: update inode size after zeroing the hole
  ocfs2: fix issue that ocfs2_setattr() does not deal with new_i_size==i_size
  mm/memory-failure.c: move refcount only in !MF_COUNT_INCREASED
  smp.h: fix x86+cpu.c sparse warnings about arch nonboot CPU calls
  mm: fix page leak at nfs_symlink()
  slub: do not assert not having lock in removing freed partial
  gitignore: add all.config
  ocfs2: fix ocfs2_sync_file() if filesystem is readonly
  drivers/edac/edac_mc_sysfs.c: poll timeout cannot be zero
  fs/file.c:fdtable: avoid triggering OOMs from alloc_fdmem
  xen: properly account for _PAGE_NUMA during xen pte translations
  mm/slub.c: list_lock may not be held in some circumstances
  drivers/md/bcache/extents.c: use %zi to format size_t
  vmcore: prevent PT_NOTE p_memsz overflow during header update
  drivers/message/i2o/i2o_config.c: fix deadlock in compat_ioctl(I2OGETIOPS)
  Documentation/: update 00-INDEX files
  checkpatch: fix detection of git repository
  get_maintainer: fix detection of git repository
  drivers/misc/sgi-gru/grukdump.c: unlocking should be conditional in gru_dump_context()
parents cbf2822a 0e048316
...@@ -92,3 +92,6 @@ extra_certificates ...@@ -92,3 +92,6 @@ extra_certificates
signing_key.priv signing_key.priv
signing_key.x509 signing_key.x509
x509.genkey x509.genkey
# Kconfig presets
all.config
...@@ -29,6 +29,8 @@ DMA-ISA-LPC.txt ...@@ -29,6 +29,8 @@ DMA-ISA-LPC.txt
- How to do DMA with ISA (and LPC) devices. - How to do DMA with ISA (and LPC) devices.
DMA-attributes.txt DMA-attributes.txt
- listing of the various possible attributes a DMA region can have - listing of the various possible attributes a DMA region can have
dmatest.txt
- how to compile, configure and use the dmatest system.
DocBook/ DocBook/
- directory with DocBook templates etc. for kernel documentation. - directory with DocBook templates etc. for kernel documentation.
EDID/ EDID/
...@@ -77,6 +79,8 @@ arm/ ...@@ -77,6 +79,8 @@ arm/
- directory with info about Linux on the ARM architecture. - directory with info about Linux on the ARM architecture.
arm64/ arm64/
- directory with info about Linux on the 64 bit ARM architecture. - directory with info about Linux on the 64 bit ARM architecture.
assoc_array.txt
- generic associative array intro.
atomic_ops.txt atomic_ops.txt
- semantics and behavior of atomic and bitmask operations. - semantics and behavior of atomic and bitmask operations.
auxdisplay/ auxdisplay/
...@@ -87,6 +91,8 @@ bad_memory.txt ...@@ -87,6 +91,8 @@ bad_memory.txt
- how to use kernel parameters to exclude bad RAM regions. - how to use kernel parameters to exclude bad RAM regions.
basic_profiling.txt basic_profiling.txt
- basic instructions for those who wants to profile Linux kernel. - basic instructions for those who wants to profile Linux kernel.
bcache.txt
- Block-layer cache on fast SSDs to improve slow (raid) I/O performance.
binfmt_misc.txt binfmt_misc.txt
- info on the kernel support for extra binary formats. - info on the kernel support for extra binary formats.
blackfin/ blackfin/
...@@ -171,6 +177,8 @@ early-userspace/ ...@@ -171,6 +177,8 @@ early-userspace/
- info about initramfs, klibc, and userspace early during boot. - info about initramfs, klibc, and userspace early during boot.
edac.txt edac.txt
- information on EDAC - Error Detection And Correction - information on EDAC - Error Detection And Correction
efi-stub.txt
- How to use the EFI boot stub to bypass GRUB or elilo on EFI systems.
eisa.txt eisa.txt
- info on EISA bus support. - info on EISA bus support.
email-clients.txt email-clients.txt
...@@ -195,8 +203,8 @@ futex-requeue-pi.txt ...@@ -195,8 +203,8 @@ futex-requeue-pi.txt
- info on requeueing of tasks from a non-PI futex to a PI futex - info on requeueing of tasks from a non-PI futex to a PI futex
gcov.txt gcov.txt
- use of GCC's coverage testing tool "gcov" with the Linux kernel - use of GCC's coverage testing tool "gcov" with the Linux kernel
gpio.txt gpio/
- overview of GPIO (General Purpose Input/Output) access conventions. - gpio related documentation
hid/ hid/
- directory with information on human interface devices - directory with information on human interface devices
highuid.txt highuid.txt
...@@ -255,6 +263,8 @@ kernel-docs.txt ...@@ -255,6 +263,8 @@ kernel-docs.txt
- listing of various WWW + books that document kernel internals. - listing of various WWW + books that document kernel internals.
kernel-parameters.txt kernel-parameters.txt
- summary listing of command line / boot prompt args for the kernel. - summary listing of command line / boot prompt args for the kernel.
kernel-per-CPU-kthreads.txt
- List of all per-CPU kthreads and how they introduce jitter.
kmemcheck.txt kmemcheck.txt
- info on dynamic checker that detects uses of uninitialized memory. - info on dynamic checker that detects uses of uninitialized memory.
kmemleak.txt kmemleak.txt
...@@ -299,8 +309,6 @@ memory-devices/ ...@@ -299,8 +309,6 @@ memory-devices/
- directory with info on parts like the Texas Instruments EMIF driver - directory with info on parts like the Texas Instruments EMIF driver
memory-hotplug.txt memory-hotplug.txt
- Hotpluggable memory support, how to use and current status. - Hotpluggable memory support, how to use and current status.
memory.txt
- info on typical Linux memory problems.
metag/ metag/
- directory with info about Linux on Meta architecture. - directory with info about Linux on Meta architecture.
mips/ mips/
...@@ -311,6 +319,8 @@ mmc/ ...@@ -311,6 +319,8 @@ mmc/
- directory with info about the MMC subsystem - directory with info about the MMC subsystem
mn10300/ mn10300/
- directory with info about the mn10300 architecture port - directory with info about the mn10300 architecture port
module-signing.txt
- Kernel module signing for increased security when loading modules.
mtd/ mtd/
- directory with info about memory technology devices (flash) - directory with info about memory technology devices (flash)
mono.txt mono.txt
...@@ -343,6 +353,8 @@ pcmcia/ ...@@ -343,6 +353,8 @@ pcmcia/
- info on the Linux PCMCIA driver. - info on the Linux PCMCIA driver.
percpu-rw-semaphore.txt percpu-rw-semaphore.txt
- RCU based read-write semaphore optimized for locking for reading - RCU based read-write semaphore optimized for locking for reading
phy.txt
- Description of the generic PHY framework.
pi-futex.txt pi-futex.txt
- documentation on lightweight priority inheritance futexes. - documentation on lightweight priority inheritance futexes.
pinctrl.txt pinctrl.txt
...@@ -431,6 +443,8 @@ sysrq.txt ...@@ -431,6 +443,8 @@ sysrq.txt
- info on the magic SysRq key. - info on the magic SysRq key.
target/ target/
- directory with info on generating TCM v4 fabric .ko modules - directory with info on generating TCM v4 fabric .ko modules
this_cpu_ops.txt
- List rationale behind and the way to use this_cpu operations.
thermal/ thermal/
- directory with information on managing thermal issues (CPU/temp) - directory with information on managing thermal issues (CPU/temp)
trace/ trace/
...@@ -469,6 +483,8 @@ wimax/ ...@@ -469,6 +483,8 @@ wimax/
- directory with info about Intel Wireless Wimax Connections - directory with info about Intel Wireless Wimax Connections
workqueue.txt workqueue.txt
- information on the Concurrency Managed Workqueue implementation - information on the Concurrency Managed Workqueue implementation
ww-mutex-design.txt
- Intro to Mutex wait/would deadlock handling.s
x86/x86_64/ x86/x86_64/
- directory with info on Linux support for AMD x86-64 (Hammer) machines. - directory with info on Linux support for AMD x86-64 (Hammer) machines.
xtensa/ xtensa/
......
...@@ -8,6 +8,8 @@ listRCU.txt ...@@ -8,6 +8,8 @@ listRCU.txt
- Using RCU to Protect Read-Mostly Linked Lists - Using RCU to Protect Read-Mostly Linked Lists
lockdep.txt lockdep.txt
- RCU and lockdep checking - RCU and lockdep checking
lockdep-splat.txt
- RCU Lockdep splats explained.
NMI-RCU.txt NMI-RCU.txt
- Using RCU to Protect Dynamic NMI Handlers - Using RCU to Protect Dynamic NMI Handlers
rcubarrier.txt rcubarrier.txt
......
...@@ -4,6 +4,8 @@ Booting ...@@ -4,6 +4,8 @@ Booting
- requirements for booting - requirements for booting
Interrupts Interrupts
- ARM Interrupt subsystem documentation - ARM Interrupt subsystem documentation
IXP4xx
- Intel IXP4xx Network processor.
msm msm
- MSM specific documentation - MSM specific documentation
Netwinder Netwinder
...@@ -24,8 +26,16 @@ SPEAr ...@@ -24,8 +26,16 @@ SPEAr
- ST SPEAr platform Linux Overview - ST SPEAr platform Linux Overview
VFP/ VFP/
- Release notes for Linux Kernel Vector Floating Point support code - Release notes for Linux Kernel Vector Floating Point support code
cluster-pm-race-avoidance.txt
- Algorithm for CPU and Cluster setup/teardown
empeg/ empeg/
- Ltd's Empeg MP3 Car Audio Player - Ltd's Empeg MP3 Car Audio Player
firmware.txt
- Secure firmware registration and calling.
kernel_mode_neon.txt
- How to use NEON instructions in kernel mode
kernel_user_helpers.txt
- Helper functions in kernel space made available for userspace.
mem_alignment mem_alignment
- alignment abort handler documentation - alignment abort handler documentation
memory.txt memory.txt
...@@ -34,3 +44,7 @@ nwfpe/ ...@@ -34,3 +44,7 @@ nwfpe/
- NWFPE floating point emulator documentation - NWFPE floating point emulator documentation
swp_emulation swp_emulation
- SWP/SWPB emulation handler/logging description - SWP/SWPB emulation handler/logging description
tcm.txt
- ARM Tightly Coupled Memory
vlocks.txt
- Voting locks, low-level mechanism relying on memory system atomic writes.
00-INDEX 00-INDEX
- This file - This file
Makefile
- Makefile for gptimers example file.
bfin-gpio-notes.txt bfin-gpio-notes.txt
- Notes in developing/using bfin-gpio driver. - Notes in developing/using bfin-gpio driver.
bfin-spi-notes.txt bfin-spi-notes.txt
- Notes for using bfin spi bus driver. - Notes for using bfin spi bus driver.
gptimers-example.c
- gptimers example
...@@ -14,6 +14,8 @@ deadline-iosched.txt ...@@ -14,6 +14,8 @@ deadline-iosched.txt
- Deadline IO scheduler tunables - Deadline IO scheduler tunables
ioprio.txt ioprio.txt
- Block io priorities (in CFQ scheduler) - Block io priorities (in CFQ scheduler)
null_blk.txt
- Null block for block-layer benchmarking.
queue-sysfs.txt queue-sysfs.txt
- Queue's sysfs entries - Queue's sysfs entries
request.txt request.txt
......
...@@ -8,3 +8,5 @@ https://lists.ozlabs.org/listinfo/devicetree-discuss ...@@ -8,3 +8,5 @@ https://lists.ozlabs.org/listinfo/devicetree-discuss
- this file - this file
booting-without-of.txt booting-without-of.txt
- Booting Linux without Open Firmware, describes history and format of device trees. - Booting Linux without Open Firmware, describes history and format of device trees.
usage-model.txt
- How Linux uses DT and what DT aims to solve.
\ No newline at end of file
...@@ -5,6 +5,8 @@ please mail me. ...@@ -5,6 +5,8 @@ please mail me.
00-INDEX 00-INDEX
- this file. - this file.
api.txt
- The frame buffer API between applications and buffer devices.
arkfb.txt arkfb.txt
- info on the fbdev driver for ARK Logic chips. - info on the fbdev driver for ARK Logic chips.
aty128fb.txt aty128fb.txt
...@@ -51,12 +53,16 @@ sh7760fb.txt ...@@ -51,12 +53,16 @@ sh7760fb.txt
- info on the SH7760/SH7763 integrated LCDC Framebuffer driver. - info on the SH7760/SH7763 integrated LCDC Framebuffer driver.
sisfb.txt sisfb.txt
- info on the framebuffer device driver for various SiS chips. - info on the framebuffer device driver for various SiS chips.
sm501.txt
- info on the framebuffer device driver for sm501 videoframebuffer.
sstfb.txt sstfb.txt
- info on the frame buffer driver for 3dfx' Voodoo Graphics boards. - info on the frame buffer driver for 3dfx' Voodoo Graphics boards.
tgafb.txt tgafb.txt
- info on the TGA (DECChip 21030) frame buffer driver. - info on the TGA (DECChip 21030) frame buffer driver.
tridentfb.txt tridentfb.txt
info on the framebuffer driver for some Trident chip based cards. info on the framebuffer driver for some Trident chip based cards.
udlfb.txt
- Driver for DisplayLink USB 2.0 chips.
uvesafb.txt uvesafb.txt
- info on the userspace VESA (VBE2+ compliant) frame buffer device. - info on the userspace VESA (VBE2+ compliant) frame buffer device.
vesafb.txt vesafb.txt
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
- this file (info on some of the filesystems supported by linux). - this file (info on some of the filesystems supported by linux).
Locking Locking
- info on locking rules as they pertain to Linux VFS. - info on locking rules as they pertain to Linux VFS.
Makefile
- Makefile for building the filsystems-part of DocBook.
9p.txt 9p.txt
- 9p (v9fs) is an implementation of the Plan 9 remote fs protocol. - 9p (v9fs) is an implementation of the Plan 9 remote fs protocol.
adfs.txt adfs.txt
......
...@@ -12,6 +12,8 @@ nfs41-server.txt ...@@ -12,6 +12,8 @@ nfs41-server.txt
- info on the Linux server implementation of NFSv4 minor version 1. - info on the Linux server implementation of NFSv4 minor version 1.
nfs-rdma.txt nfs-rdma.txt
- how to install and setup the Linux NFS/RDMA client and server software - how to install and setup the Linux NFS/RDMA client and server software
nfsd-admin-interfaces.txt
- Administrative interfaces for nfsd.
nfsroot.txt nfsroot.txt
- short guide on setting up a diskless box with NFS root filesystem. - short guide on setting up a diskless box with NFS root filesystem.
pnfs.txt pnfs.txt
...@@ -20,5 +22,5 @@ rpc-cache.txt ...@@ -20,5 +22,5 @@ rpc-cache.txt
- introduction to the caching mechanisms in the sunrpc layer. - introduction to the caching mechanisms in the sunrpc layer.
idmapper.txt idmapper.txt
- information for configuring request-keys to be used by idmapper - information for configuring request-keys to be used by idmapper
knfsd-rpcgss.txt rpc-server-gss.txt
- Information on GSS authentication support in the NFS Server - Information on GSS authentication support in the NFS Server
...@@ -10,3 +10,5 @@ ide-tape.txt ...@@ -10,3 +10,5 @@ ide-tape.txt
- info on the IDE ATAPI streaming tape driver - info on the IDE ATAPI streaming tape driver
ide.txt ide.txt
- important info for users of ATA devices (IDE/EIDE disks and CD-ROMS). - important info for users of ATA devices (IDE/EIDE disks and CD-ROMS).
warm-plug-howto.txt
- using sysfs to remove and add IDE devices.
\ No newline at end of file
00-INDEX 00-INDEX
- This file - This file
acer-wmi.txt Makefile
- information on the Acer Laptop WMI Extras driver. - Makefile for building dslm example program.
asus-laptop.txt asus-laptop.txt
- information on the Asus Laptop Extras driver. - information on the Asus Laptop Extras driver.
disk-shock-protection.txt disk-shock-protection.txt
- information on hard disk shock protection. - information on hard disk shock protection.
dslm.c dslm.c
- Simple Disk Sleep Monitor program - Simple Disk Sleep Monitor program
hpfall.c
- (HP) laptop accelerometer program for disk protection.
laptop-mode.txt laptop-mode.txt
- how to conserve battery power using laptop-mode. - how to conserve battery power using laptop-mode.
sony-laptop.txt sony-laptop.txt
......
00-INDEX
- This file
leds-blinkm.txt
- Driver for BlinkM LED-devices.
leds-class.txt leds-class.txt
- documents LED handling under Linux. - documents LED handling under Linux.
leds-lp3944.txt leds-lp3944.txt
...@@ -12,3 +16,7 @@ leds-lp55xx.txt ...@@ -12,3 +16,7 @@ leds-lp55xx.txt
- description about lp55xx common driver. - description about lp55xx common driver.
leds-lm3556.txt leds-lm3556.txt
- notes on how to use the leds-lm3556 driver. - notes on how to use the leds-lm3556 driver.
ledtrig-oneshot.txt
- One-shot LED trigger for both sporadic and dense events.
ledtrig-transient.txt
- LED Transient Trigger, one shot timer activation.
00-INDEX 00-INDEX
- this file - this file
README.buddha
- Amiga Buddha and Catweasel IDE Driver
kernel-options.txt kernel-options.txt
- command line options for Linux/m68k - command line options for Linux/m68k
...@@ -6,8 +6,14 @@ ...@@ -6,8 +6,14 @@
- information on the 3Com Etherlink III Series Ethernet cards. - information on the 3Com Etherlink III Series Ethernet cards.
6pack.txt 6pack.txt
- info on the 6pack protocol, an alternative to KISS for AX.25 - info on the 6pack protocol, an alternative to KISS for AX.25
DLINK.txt LICENSE.qla3xxx
- info on the D-Link DE-600/DE-620 parallel port pocket adapters - GPLv2 for QLogic Linux Networking HBA Driver
LICENSE.qlge
- GPLv2 for QLogic Linux qlge NIC Driver
LICENSE.qlcnic
- GPLv2 for QLogic Linux qlcnic NIC Driver
Makefile
- Makefile for docsrc.
PLIP.txt PLIP.txt
- PLIP: The Parallel Line Internet Protocol device driver - PLIP: The Parallel Line Internet Protocol device driver
README.ipw2100 README.ipw2100
...@@ -17,7 +23,7 @@ README.ipw2200 ...@@ -17,7 +23,7 @@ README.ipw2200
README.sb1000 README.sb1000
- info on General Instrument/NextLevel SURFboard1000 cable modem. - info on General Instrument/NextLevel SURFboard1000 cable modem.
alias.txt alias.txt
- info on using alias network devices - info on using alias network devices.
arcnet-hardware.txt arcnet-hardware.txt
- tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc. - tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc.
arcnet.txt arcnet.txt
...@@ -80,7 +86,7 @@ framerelay.txt ...@@ -80,7 +86,7 @@ framerelay.txt
- info on using Frame Relay/Data Link Connection Identifier (DLCI). - info on using Frame Relay/Data Link Connection Identifier (DLCI).
gen_stats.txt gen_stats.txt
- Generic networking statistics for netlink users. - Generic networking statistics for netlink users.
generic_hdlc.txt generic-hdlc.txt
- The generic High Level Data Link Control (HDLC) layer. - The generic High Level Data Link Control (HDLC) layer.
generic_netlink.txt generic_netlink.txt
- info on Generic Netlink - info on Generic Netlink
...@@ -88,6 +94,8 @@ gianfar.txt ...@@ -88,6 +94,8 @@ gianfar.txt
- Gianfar Ethernet Driver. - Gianfar Ethernet Driver.
i40e.txt i40e.txt
- README for the Intel Ethernet Controller XL710 Driver (i40e). - README for the Intel Ethernet Controller XL710 Driver (i40e).
i40evf.txt
- Short note on the Driver for the Intel(R) XL710 X710 Virtual Function
ieee802154.txt ieee802154.txt
- Linux IEEE 802.15.4 implementation, API and drivers - Linux IEEE 802.15.4 implementation, API and drivers
igb.txt igb.txt
...@@ -102,6 +110,8 @@ ipddp.txt ...@@ -102,6 +110,8 @@ ipddp.txt
- AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation - AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
iphase.txt iphase.txt
- Interphase PCI ATM (i)Chip IA Linux driver info. - Interphase PCI ATM (i)Chip IA Linux driver info.
ipsec.txt
- Note on not compressing IPSec payload and resulting failed policy check.
ipv6.txt ipv6.txt
- Options to the ipv6 kernel module. - Options to the ipv6 kernel module.
ipvs-sysctl.txt ipvs-sysctl.txt
...@@ -120,6 +130,8 @@ lapb-module.txt ...@@ -120,6 +130,8 @@ lapb-module.txt
- programming information of the LAPB module. - programming information of the LAPB module.
ltpc.txt ltpc.txt
- the Apple or Farallon LocalTalk PC card driver - the Apple or Farallon LocalTalk PC card driver
mac80211-auth-assoc-deauth.txt
- authentication and association / deauth-disassoc with max80211
mac80211-injection.txt mac80211-injection.txt
- HOWTO use packet injection with mac80211 - HOWTO use packet injection with mac80211
multiqueue.txt multiqueue.txt
...@@ -134,6 +146,10 @@ netdevices.txt ...@@ -134,6 +146,10 @@ netdevices.txt
- info on network device driver functions exported to the kernel. - info on network device driver functions exported to the kernel.
netif-msg.txt netif-msg.txt
- Design of the network interface message level setting (NETIF_MSG_*). - Design of the network interface message level setting (NETIF_MSG_*).
netlink_mmap.txt
- memory mapped I/O with netlink
nf_conntrack-sysctl.txt
- list of netfilter-sysctl knobs.
nfc.txt nfc.txt
- The Linux Near Field Communication (NFS) subsystem. - The Linux Near Field Communication (NFS) subsystem.
openvswitch.txt openvswitch.txt
...@@ -176,7 +192,7 @@ skfp.txt ...@@ -176,7 +192,7 @@ skfp.txt
- SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info. - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
smc9.txt smc9.txt
- the driver for SMC's 9000 series of Ethernet cards - the driver for SMC's 9000 series of Ethernet cards
spider-net.txt spider_net.txt
- README for the Spidernet Driver (as found in PS3 / Cell BE). - README for the Spidernet Driver (as found in PS3 / Cell BE).
stmmac.txt stmmac.txt
- README for the STMicro Synopsys Ethernet driver. - README for the STMicro Synopsys Ethernet driver.
...@@ -188,6 +204,8 @@ tcp.txt ...@@ -188,6 +204,8 @@ tcp.txt
- short blurb on how TCP output takes place. - short blurb on how TCP output takes place.
tcp-thin.txt tcp-thin.txt
- kernel tuning options for low rate 'thin' TCP streams. - kernel tuning options for low rate 'thin' TCP streams.
team.txt
- pointer to information for ethernet teaming devices.
tlan.txt tlan.txt
- ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info. - ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info.
tproxy.txt tproxy.txt
...@@ -200,6 +218,8 @@ vortex.txt ...@@ -200,6 +218,8 @@ vortex.txt
- info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards. - info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
vxge.txt vxge.txt
- README for the Neterion X3100 PCIe Server Adapter. - README for the Neterion X3100 PCIe Server Adapter.
vxlan.txt
- Virtual extensible LAN overview
x25.txt x25.txt
- general info on X.25 development. - general info on X.25 development.
x25-iface.txt x25-iface.txt
......
...@@ -4,6 +4,8 @@ apm-acpi.txt ...@@ -4,6 +4,8 @@ apm-acpi.txt
- basic info about the APM and ACPI support. - basic info about the APM and ACPI support.
basic-pm-debugging.txt basic-pm-debugging.txt
- Debugging suspend and resume - Debugging suspend and resume
charger-manager.txt
- Battery charger management.
devices.txt devices.txt
- How drivers interact with system-wide power management - How drivers interact with system-wide power management
drivers-testing.txt drivers-testing.txt
...@@ -22,6 +24,8 @@ pm_qos_interface.txt ...@@ -22,6 +24,8 @@ pm_qos_interface.txt
- info on Linux PM Quality of Service interface - info on Linux PM Quality of Service interface
power_supply_class.txt power_supply_class.txt
- Tells userspace about battery, UPS, AC or DC power supply properties - Tells userspace about battery, UPS, AC or DC power supply properties
runtime_pm.txt
- Power management framework for I/O devices.
s2ram.txt s2ram.txt
- How to get suspend to ram working (and debug it when it isn't) - How to get suspend to ram working (and debug it when it isn't)
states.txt states.txt
...@@ -38,7 +42,5 @@ tricks.txt ...@@ -38,7 +42,5 @@ tricks.txt
- How to trick software suspend (to disk) into working when it isn't - How to trick software suspend (to disk) into working when it isn't
userland-swsusp.txt userland-swsusp.txt
- Experimental implementation of software suspend in userspace - Experimental implementation of software suspend in userspace
video_extension.txt
- ACPI video extensions
video.txt video.txt
- Video issues during resume from suspend - Video issues during resume from suspend
...@@ -16,11 +16,13 @@ Debugging390.txt ...@@ -16,11 +16,13 @@ Debugging390.txt
- hints for debugging on s390 systems. - hints for debugging on s390 systems.
driver-model.txt driver-model.txt
- information on s390 devices and the driver model. - information on s390 devices and the driver model.
kvm.txt
- ioctl calls to /dev/kvm on s390.
monreader.txt monreader.txt
- information on accessing the z/VM monitor stream from Linux. - information on accessing the z/VM monitor stream from Linux.
qeth.txt
- HiperSockets Bridge Port Support.
s390dbf.txt s390dbf.txt
- information on using the s390 debug feature. - information on using the s390 debug feature.
TAPE zfcpdump.txt
- information on the driver for channel-attached tapes.
zfcpdump
- information on the s390 SCSI dump tool. - information on the s390 SCSI dump tool.
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
- this file. - this file.
sched-arch.txt sched-arch.txt
- CPU Scheduler implementation hints for architecture specific code. - CPU Scheduler implementation hints for architecture specific code.
sched-bwc.txt
- CFS bandwidth control overview.
sched-design-CFS.txt sched-design-CFS.txt
- goals, design and implementation of the Completely Fair Scheduler. - goals, design and implementation of the Completely Fair Scheduler.
sched-domains.txt sched-domains.txt
......
...@@ -36,6 +36,8 @@ NinjaSCSI.txt ...@@ -36,6 +36,8 @@ NinjaSCSI.txt
- info on WorkBiT NinjaSCSI-32/32Bi driver - info on WorkBiT NinjaSCSI-32/32Bi driver
aacraid.txt aacraid.txt
- Driver supporting Adaptec RAID controllers - Driver supporting Adaptec RAID controllers
advansys.txt
- List of Advansys Host Adapters
aha152x.txt aha152x.txt
- info on driver for Adaptec AHA152x based adapters - info on driver for Adaptec AHA152x based adapters
aic79xx.txt aic79xx.txt
...@@ -44,6 +46,12 @@ aic7xxx.txt ...@@ -44,6 +46,12 @@ aic7xxx.txt
- info on driver for Adaptec controllers - info on driver for Adaptec controllers
arcmsr_spec.txt arcmsr_spec.txt
- ARECA FIRMWARE SPEC (for IOP331 adapter) - ARECA FIRMWARE SPEC (for IOP331 adapter)
bfa.txt
- Brocade FC/FCOE adapter driver.
bnx2fc.txt
- FCoE hardware offload for Broadcom network interfaces.
cxgb3i.txt
- Chelsio iSCSI Linux Driver
dc395x.txt dc395x.txt
- README file for the dc395x SCSI driver - README file for the dc395x SCSI driver
dpti.txt dpti.txt
...@@ -52,18 +60,24 @@ dtc3x80.txt ...@@ -52,18 +60,24 @@ dtc3x80.txt
- info on driver for DTC 2x80 based adapters - info on driver for DTC 2x80 based adapters
g_NCR5380.txt g_NCR5380.txt
- info on driver for NCR5380 and NCR53c400 based adapters - info on driver for NCR5380 and NCR53c400 based adapters
hpsa.txt
- HP Smart Array Controller SCSI driver.
hptiop.txt hptiop.txt
- HIGHPOINT ROCKETRAID 3xxx RAID DRIVER - HIGHPOINT ROCKETRAID 3xxx RAID DRIVER
in2000.txt in2000.txt
- info on in2000 driver - info on in2000 driver
libsas.txt libsas.txt
- Serial Attached SCSI management layer. - Serial Attached SCSI management layer.
link_power_management_policy.txt
- Link power management options.
lpfc.txt lpfc.txt
- LPFC driver release notes - LPFC driver release notes
megaraid.txt megaraid.txt
- Common Management Module, shared code handling ioctls for LSI drivers - Common Management Module, shared code handling ioctls for LSI drivers
ncr53c8xx.txt ncr53c8xx.txt
- info on driver for NCR53c8xx based adapters - info on driver for NCR53c8xx based adapters
osd.txt
Object-Based Storage Device, command set introduction.
osst.txt osst.txt
- info on driver for OnStream SC-x0 SCSI tape - info on driver for OnStream SC-x0 SCSI tape
ppa.txt ppa.txt
...@@ -74,6 +88,8 @@ scsi-changer.txt ...@@ -74,6 +88,8 @@ scsi-changer.txt
- README for the SCSI media changer driver - README for the SCSI media changer driver
scsi-generic.txt scsi-generic.txt
- info on the sg driver for generic (non-disk/CD/tape) SCSI devices. - info on the sg driver for generic (non-disk/CD/tape) SCSI devices.
scsi-parameters.txt
- List of SCSI-parameters to pass to the kernel at module load-time.
scsi.txt scsi.txt
- short blurb on using SCSI support as a module. - short blurb on using SCSI support as a module.
scsi_mid_low_api.txt scsi_mid_low_api.txt
......
...@@ -4,10 +4,12 @@ README.cycladesZ ...@@ -4,10 +4,12 @@ README.cycladesZ
- info on Cyclades-Z firmware loading. - info on Cyclades-Z firmware loading.
digiepca.txt digiepca.txt
- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards. - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
hayes-esp.txt driver
- info on using the Hayes ESP serial driver. - intro to the low level serial driver.
moxa-smartio moxa-smartio
- file with info on installing/using Moxa multiport serial driver. - file with info on installing/using Moxa multiport serial driver.
n_gsm.txt
- GSM 0710 tty multiplexer howto.
riscom8.txt riscom8.txt
- notes on using the RISCom/8 multi-port serial driver. - notes on using the RISCom/8 multi-port serial driver.
rocket.txt rocket.txt
......
00-INDEX
- this file.
Makefile
- Makefile for the example sourcefiles.
butterfly
- AVR Butterfly SPI driver overview and pin configuration.
ep93xx_spi
- Basic EP93xx SPI driver configuration.
pxa2xx
- PXA2xx SPI master controller build by spi_message fifo wq
spidev
- Intro to the userspace API for spi devices
spidev_fdx.c
- spidev example file
spi-lm70llp
- Connecting an LM70-LLP sensor to the kernel via the SPI subsys.
spi-sc18is602
- NXP SC18IS602/603 I2C-bus to SPI bridge
spi-summary
- (Linux) SPI overview. If unsure about SPI or SPI in Linux, start here.
spidev_test.c
- SPI testing utility.
...@@ -8,6 +8,8 @@ hpet_example.c ...@@ -8,6 +8,8 @@ hpet_example.c
- sample hpet timer test program - sample hpet timer test program
hrtimers.txt hrtimers.txt
- subsystem for high-resolution kernel timers - subsystem for high-resolution kernel timers
Makefile
- Build and link hpet_example
NO_HZ.txt NO_HZ.txt
- Summary of the different methods for the scheduler clock-interrupts management. - Summary of the different methods for the scheduler clock-interrupts management.
timers-howto.txt timers-howto.txt
......
...@@ -20,5 +20,7 @@ ppc-pv.txt ...@@ -20,5 +20,7 @@ ppc-pv.txt
- the paravirtualization interface on PowerPC. - the paravirtualization interface on PowerPC.
review-checklist.txt review-checklist.txt
- review checklist for KVM patches. - review checklist for KVM patches.
s390-diag.txt
- Diagnose hypercall description (for IBM S/390)
timekeeping.txt timekeeping.txt
- timekeeping virtualization for x86-based architectures. - timekeeping virtualization for x86-based architectures.
...@@ -16,8 +16,6 @@ hwpoison.txt ...@@ -16,8 +16,6 @@ hwpoison.txt
- explains what hwpoison is - explains what hwpoison is
ksm.txt ksm.txt
- how to use the Kernel Samepage Merging feature. - how to use the Kernel Samepage Merging feature.
locking
- info on how locking and synchronization is done in the Linux vm code.
numa numa
- information about NUMA specific code in the Linux vm. - information about NUMA specific code in the Linux vm.
numa_memory_policy.txt numa_memory_policy.txt
...@@ -32,6 +30,8 @@ slub.txt ...@@ -32,6 +30,8 @@ slub.txt
- a short users guide for SLUB. - a short users guide for SLUB.
soft-dirty.txt soft-dirty.txt
- short explanation for soft-dirty PTEs - short explanation for soft-dirty PTEs
split_page_table_lock
- Separate per-table lock to improve scalability of the old page_table_lock.
transhuge.txt transhuge.txt
- Transparent Hugepage Support, alternative way of using hugepages. - Transparent Hugepage Support, alternative way of using hugepages.
unevictable-lru.txt unevictable-lru.txt
......
...@@ -4,7 +4,9 @@ ds2482 ...@@ -4,7 +4,9 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses. - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
ds2490 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges. - The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges.
mxc_w1 mxc-w1
- W1 master controller driver found on Freescale MX2/MX3 SoCs - W1 master controller driver found on Freescale MX2/MX3 SoCs
omap-hdq
- HDQ/1-wire module of TI OMAP 2430/3430.
w1-gpio w1-gpio
- GPIO 1-wire bus master driver. - GPIO 1-wire bus master driver.
...@@ -4,3 +4,5 @@ w1_therm ...@@ -4,3 +4,5 @@ w1_therm
- The Maxim/Dallas Semiconductor ds18*20 temperature sensor. - The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
w1_ds2423 w1_ds2423
- The Maxim/Dallas Semiconductor ds2423 counter device. - The Maxim/Dallas Semiconductor ds2423 counter device.
w1_ds28e04
- The Maxim/Dallas Semiconductor ds28e04 eeprom.
00-INDEX 00-INDEX
- this file - this file
mtrr.txt boot.txt
- how to use x86 Memory Type Range Registers to increase performance - List of boot protocol versions
early-microcode.txt
- How to load microcode from an initrd-CPIO archive early to fix CPU issues.
earlyprintk.txt
- Using earlyprintk with a USB2 debug port key.
entry_64.txt
- Describe (some of the) kernel entry points for x86.
exception-tables.txt exception-tables.txt
- why and how Linux kernel uses exception tables on x86 - why and how Linux kernel uses exception tables on x86
mtrr.txt
- how to use x86 Memory Type Range Registers to increase performance
pat.txt
- Page Attribute Table intro and API
usb-legacy-support.txt
- how to fix/avoid quirks when using emulated PS/2 mouse/keyboard.
zero-page.txt
- layout of the first page of memory.
...@@ -445,10 +445,20 @@ static inline int pte_same(pte_t a, pte_t b) ...@@ -445,10 +445,20 @@ static inline int pte_same(pte_t a, pte_t b)
return a.pte == b.pte; return a.pte == b.pte;
} }
static inline int pteval_present(pteval_t pteval)
{
/*
* Yes Linus, _PAGE_PROTNONE == _PAGE_NUMA. Expressing it this
* way clearly states that the intent is that protnone and numa
* hinting ptes are considered present for the purposes of
* pagetable operations like zapping, protection changes, gup etc.
*/
return pteval & (_PAGE_PRESENT | _PAGE_PROTNONE | _PAGE_NUMA);
}
static inline int pte_present(pte_t a) static inline int pte_present(pte_t a)
{ {
return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE | return pteval_present(pte_flags(a));
_PAGE_NUMA);
} }
#define pte_accessible pte_accessible #define pte_accessible pte_accessible
......
...@@ -365,7 +365,7 @@ void xen_ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr, ...@@ -365,7 +365,7 @@ void xen_ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr,
/* Assume pteval_t is equivalent to all the other *val_t types. */ /* Assume pteval_t is equivalent to all the other *val_t types. */
static pteval_t pte_mfn_to_pfn(pteval_t val) static pteval_t pte_mfn_to_pfn(pteval_t val)
{ {
if (val & _PAGE_PRESENT) { if (pteval_present(val)) {
unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
unsigned long pfn = mfn_to_pfn(mfn); unsigned long pfn = mfn_to_pfn(mfn);
...@@ -381,7 +381,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val) ...@@ -381,7 +381,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
static pteval_t pte_pfn_to_mfn(pteval_t val) static pteval_t pte_pfn_to_mfn(pteval_t val)
{ {
if (val & _PAGE_PRESENT) { if (pteval_present(val)) {
unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
pteval_t flags = val & PTE_FLAGS_MASK; pteval_t flags = val & PTE_FLAGS_MASK;
unsigned long mfn; unsigned long mfn;
......
...@@ -61,7 +61,7 @@ static int edac_set_poll_msec(const char *val, struct kernel_param *kp) ...@@ -61,7 +61,7 @@ static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
ret = kstrtol(val, 0, &l); ret = kstrtol(val, 0, &l);
if (ret) if (ret)
return ret; return ret;
if ((int)l != l) if (!l || ((int)l != l))
return -EINVAL; return -EINVAL;
*((int *)kp->arg) = l; *((int *)kp->arg) = l;
......
...@@ -194,7 +194,7 @@ static bool btree_ptr_bad_expensive(struct btree *b, const struct bkey *k) ...@@ -194,7 +194,7 @@ static bool btree_ptr_bad_expensive(struct btree *b, const struct bkey *k)
mutex_unlock(&b->c->bucket_lock); mutex_unlock(&b->c->bucket_lock);
bch_extent_to_text(buf, sizeof(buf), k); bch_extent_to_text(buf, sizeof(buf), k);
btree_bug(b, btree_bug(b,
"inconsistent btree pointer %s: bucket %li pin %i prio %i gen %i last_gc %i mark %llu gc_gen %i", "inconsistent btree pointer %s: bucket %zi pin %i prio %i gen %i last_gc %i mark %llu gc_gen %i",
buf, PTR_BUCKET_NR(b->c, k, i), atomic_read(&g->pin), buf, PTR_BUCKET_NR(b->c, k, i), atomic_read(&g->pin),
g->prio, g->gen, g->last_gc, GC_MARK(g), g->gc_gen); g->prio, g->gen, g->last_gc, GC_MARK(g), g->gc_gen);
return true; return true;
......
...@@ -754,19 +754,19 @@ static long i2o_cfg_compat_ioctl(struct file *file, unsigned cmd, ...@@ -754,19 +754,19 @@ static long i2o_cfg_compat_ioctl(struct file *file, unsigned cmd,
unsigned long arg) unsigned long arg)
{ {
int ret; int ret;
mutex_lock(&i2o_cfg_mutex);
switch (cmd) { switch (cmd) {
case I2OGETIOPS: case I2OGETIOPS:
ret = i2o_cfg_ioctl(file, cmd, arg); ret = i2o_cfg_ioctl(file, cmd, arg);
break; break;
case I2OPASSTHRU32: case I2OPASSTHRU32:
mutex_lock(&i2o_cfg_mutex);
ret = i2o_cfg_passthru32(file, cmd, arg); ret = i2o_cfg_passthru32(file, cmd, arg);
mutex_unlock(&i2o_cfg_mutex);
break; break;
default: default:
ret = -ENOIOCTLCMD; ret = -ENOIOCTLCMD;
break; break;
} }
mutex_unlock(&i2o_cfg_mutex);
return ret; return ret;
} }
......
...@@ -139,8 +139,11 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum, ...@@ -139,8 +139,11 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum,
ubuf += sizeof(hdr); ubuf += sizeof(hdr);
ubufcch = ubuf; ubufcch = ubuf;
if (gru_user_copy_handle(&ubuf, cch)) if (gru_user_copy_handle(&ubuf, cch)) {
goto fail; if (cch_locked)
unlock_cch_handle(cch);
return -EFAULT;
}
if (cch_locked) if (cch_locked)
ubufcch->delresp = 0; ubufcch->delresp = 0;
bytes = sizeof(hdr) + GRU_CACHE_LINE_BYTES; bytes = sizeof(hdr) + GRU_CACHE_LINE_BYTES;
...@@ -179,10 +182,6 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum, ...@@ -179,10 +182,6 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum,
ret = -EFAULT; ret = -EFAULT;
return ret ? ret : bytes; return ret ? ret : bytes;
fail:
unlock_cch_handle(cch);
return -EFAULT;
} }
int gru_dump_chiplet_request(unsigned long arg) int gru_dump_chiplet_request(unsigned long arg)
......
...@@ -34,7 +34,7 @@ static void *alloc_fdmem(size_t size) ...@@ -34,7 +34,7 @@ static void *alloc_fdmem(size_t size)
* vmalloc() if the allocation size will be considered "large" by the VM. * vmalloc() if the allocation size will be considered "large" by the VM.
*/ */
if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) { if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {
void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN); void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN|__GFP_NORETRY);
if (data != NULL) if (data != NULL)
return data; return data;
} }
......
...@@ -1846,6 +1846,11 @@ int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) ...@@ -1846,6 +1846,11 @@ int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
GFP_KERNEL)) { GFP_KERNEL)) {
SetPageUptodate(page); SetPageUptodate(page);
unlock_page(page); unlock_page(page);
/*
* add_to_page_cache_lru() grabs an extra page refcount.
* Drop it here to avoid leaking this page later.
*/
page_cache_release(page);
} else } else
__free_page(page); __free_page(page);
......
...@@ -7158,7 +7158,7 @@ int ocfs2_truncate_inline(struct inode *inode, struct buffer_head *di_bh, ...@@ -7158,7 +7158,7 @@ int ocfs2_truncate_inline(struct inode *inode, struct buffer_head *di_bh,
if (end > i_size_read(inode)) if (end > i_size_read(inode))
end = i_size_read(inode); end = i_size_read(inode);
BUG_ON(start >= end); BUG_ON(start > end);
if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) || if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) ||
!(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL) || !(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL) ||
......
...@@ -185,6 +185,9 @@ static int ocfs2_sync_file(struct file *file, loff_t start, loff_t end, ...@@ -185,6 +185,9 @@ static int ocfs2_sync_file(struct file *file, loff_t start, loff_t end,
file->f_path.dentry->d_name.name, file->f_path.dentry->d_name.name,
(unsigned long long)datasync); (unsigned long long)datasync);
if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
return -EROFS;
err = filemap_write_and_wait_range(inode->i_mapping, start, end); err = filemap_write_and_wait_range(inode->i_mapping, start, end);
if (err) if (err)
return err; return err;
...@@ -474,11 +477,6 @@ static int ocfs2_truncate_file(struct inode *inode, ...@@ -474,11 +477,6 @@ static int ocfs2_truncate_file(struct inode *inode,
goto bail; goto bail;
} }
/* lets handle the simple truncate cases before doing any more
* cluster locking. */
if (new_i_size == le64_to_cpu(fe->i_size))
goto bail;
down_write(&OCFS2_I(inode)->ip_alloc_sem); down_write(&OCFS2_I(inode)->ip_alloc_sem);
ocfs2_resv_discard(&osb->osb_la_resmap, ocfs2_resv_discard(&osb->osb_la_resmap,
...@@ -718,7 +716,8 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, ...@@ -718,7 +716,8 @@ static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start,
* While a write will already be ordering the data, a truncate will not. * While a write will already be ordering the data, a truncate will not.
* Thus, we need to explicitly order the zeroed pages. * Thus, we need to explicitly order the zeroed pages.
*/ */
static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode) static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode,
struct buffer_head *di_bh)
{ {
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
handle_t *handle = NULL; handle_t *handle = NULL;
...@@ -735,7 +734,14 @@ static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode) ...@@ -735,7 +734,14 @@ static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode)
} }
ret = ocfs2_jbd2_file_inode(handle, inode); ret = ocfs2_jbd2_file_inode(handle, inode);
if (ret < 0) if (ret < 0) {
mlog_errno(ret);
goto out;
}
ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
OCFS2_JOURNAL_ACCESS_WRITE);
if (ret)
mlog_errno(ret); mlog_errno(ret);
out: out:
...@@ -751,7 +757,7 @@ static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode) ...@@ -751,7 +757,7 @@ static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode)
* to be too fragile to do exactly what we need without us having to * to be too fragile to do exactly what we need without us having to
* worry about recursive locking in ->write_begin() and ->write_end(). */ * worry about recursive locking in ->write_begin() and ->write_end(). */
static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
u64 abs_to) u64 abs_to, struct buffer_head *di_bh)
{ {
struct address_space *mapping = inode->i_mapping; struct address_space *mapping = inode->i_mapping;
struct page *page; struct page *page;
...@@ -759,6 +765,7 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, ...@@ -759,6 +765,7 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
handle_t *handle = NULL; handle_t *handle = NULL;
int ret = 0; int ret = 0;
unsigned zero_from, zero_to, block_start, block_end; unsigned zero_from, zero_to, block_start, block_end;
struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
BUG_ON(abs_from >= abs_to); BUG_ON(abs_from >= abs_to);
BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT)); BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT));
...@@ -801,7 +808,8 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, ...@@ -801,7 +808,8 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
} }
if (!handle) { if (!handle) {
handle = ocfs2_zero_start_ordered_transaction(inode); handle = ocfs2_zero_start_ordered_transaction(inode,
di_bh);
if (IS_ERR(handle)) { if (IS_ERR(handle)) {
ret = PTR_ERR(handle); ret = PTR_ERR(handle);
handle = NULL; handle = NULL;
...@@ -818,8 +826,22 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, ...@@ -818,8 +826,22 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
ret = 0; ret = 0;
} }
if (handle) if (handle) {
/*
* fs-writeback will release the dirty pages without page lock
* whose offset are over inode size, the release happens at
* block_write_full_page_endio().
*/
i_size_write(inode, abs_to);
inode->i_blocks = ocfs2_inode_sector_count(inode);
di->i_size = cpu_to_le64((u64)i_size_read(inode));
inode->i_mtime = inode->i_ctime = CURRENT_TIME;
di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec);
di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
di->i_mtime_nsec = di->i_ctime_nsec;
ocfs2_journal_dirty(handle, di_bh);
ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
}
out_unlock: out_unlock:
unlock_page(page); unlock_page(page);
...@@ -915,7 +937,7 @@ static int ocfs2_zero_extend_get_range(struct inode *inode, ...@@ -915,7 +937,7 @@ static int ocfs2_zero_extend_get_range(struct inode *inode,
* has made sure that the entire range needs zeroing. * has made sure that the entire range needs zeroing.
*/ */
static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start, static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start,
u64 range_end) u64 range_end, struct buffer_head *di_bh)
{ {
int rc = 0; int rc = 0;
u64 next_pos; u64 next_pos;
...@@ -931,7 +953,7 @@ static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start, ...@@ -931,7 +953,7 @@ static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start,
next_pos = (zero_pos & PAGE_CACHE_MASK) + PAGE_CACHE_SIZE; next_pos = (zero_pos & PAGE_CACHE_MASK) + PAGE_CACHE_SIZE;
if (next_pos > range_end) if (next_pos > range_end)
next_pos = range_end; next_pos = range_end;
rc = ocfs2_write_zero_page(inode, zero_pos, next_pos); rc = ocfs2_write_zero_page(inode, zero_pos, next_pos, di_bh);
if (rc < 0) { if (rc < 0) {
mlog_errno(rc); mlog_errno(rc);
break; break;
...@@ -977,7 +999,7 @@ int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh, ...@@ -977,7 +999,7 @@ int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh,
range_end = zero_to_size; range_end = zero_to_size;
ret = ocfs2_zero_extend_range(inode, range_start, ret = ocfs2_zero_extend_range(inode, range_start,
range_end); range_end, di_bh);
if (ret) { if (ret) {
mlog_errno(ret); mlog_errno(ret);
break; break;
...@@ -1145,14 +1167,14 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) ...@@ -1145,14 +1167,14 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
goto bail_unlock_rw; goto bail_unlock_rw;
} }
if (size_change && attr->ia_size != i_size_read(inode)) { if (size_change) {
status = inode_newsize_ok(inode, attr->ia_size); status = inode_newsize_ok(inode, attr->ia_size);
if (status) if (status)
goto bail_unlock; goto bail_unlock;
inode_dio_wait(inode); inode_dio_wait(inode);
if (i_size_read(inode) > attr->ia_size) { if (i_size_read(inode) >= attr->ia_size) {
if (ocfs2_should_order_data(inode)) { if (ocfs2_should_order_data(inode)) {
status = ocfs2_begin_ordered_truncate(inode, status = ocfs2_begin_ordered_truncate(inode,
attr->ia_size); attr->ia_size);
......
...@@ -664,6 +664,7 @@ static int ocfs2_link(struct dentry *old_dentry, ...@@ -664,6 +664,7 @@ static int ocfs2_link(struct dentry *old_dentry,
struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
struct ocfs2_dir_lookup_result lookup = { NULL, }; struct ocfs2_dir_lookup_result lookup = { NULL, };
sigset_t oldset; sigset_t oldset;
u64 old_de_ino;
trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno, trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno,
old_dentry->d_name.len, old_dentry->d_name.name, old_dentry->d_name.len, old_dentry->d_name.name,
...@@ -686,6 +687,22 @@ static int ocfs2_link(struct dentry *old_dentry, ...@@ -686,6 +687,22 @@ static int ocfs2_link(struct dentry *old_dentry,
goto out; goto out;
} }
err = ocfs2_lookup_ino_from_name(dir, old_dentry->d_name.name,
old_dentry->d_name.len, &old_de_ino);
if (err) {
err = -ENOENT;
goto out;
}
/*
* Check whether another node removed the source inode while we
* were in the vfs.
*/
if (old_de_ino != OCFS2_I(inode)->ip_blkno) {
err = -ENOENT;
goto out;
}
err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
dentry->d_name.len); dentry->d_name.len);
if (err) if (err)
......
...@@ -468,17 +468,24 @@ static int __init update_note_header_size_elf64(const Elf64_Ehdr *ehdr_ptr) ...@@ -468,17 +468,24 @@ static int __init update_note_header_size_elf64(const Elf64_Ehdr *ehdr_ptr)
return rc; return rc;
} }
nhdr_ptr = notes_section; nhdr_ptr = notes_section;
while (real_sz < max_sz) { while (nhdr_ptr->n_namesz != 0) {
if (nhdr_ptr->n_namesz == 0)
break;
sz = sizeof(Elf64_Nhdr) + sz = sizeof(Elf64_Nhdr) +
((nhdr_ptr->n_namesz + 3) & ~3) + ((nhdr_ptr->n_namesz + 3) & ~3) +
((nhdr_ptr->n_descsz + 3) & ~3); ((nhdr_ptr->n_descsz + 3) & ~3);
if ((real_sz + sz) > max_sz) {
pr_warn("Warning: Exceeded p_memsz, dropping PT_NOTE entry n_namesz=0x%x, n_descsz=0x%x\n",
nhdr_ptr->n_namesz, nhdr_ptr->n_descsz);
break;
}
real_sz += sz; real_sz += sz;
nhdr_ptr = (Elf64_Nhdr*)((char*)nhdr_ptr + sz); nhdr_ptr = (Elf64_Nhdr*)((char*)nhdr_ptr + sz);
} }
kfree(notes_section); kfree(notes_section);
phdr_ptr->p_memsz = real_sz; phdr_ptr->p_memsz = real_sz;
if (real_sz == 0) {
pr_warn("Warning: Zero PT_NOTE entries found\n");
return -EINVAL;
}
} }
return 0; return 0;
...@@ -648,17 +655,24 @@ static int __init update_note_header_size_elf32(const Elf32_Ehdr *ehdr_ptr) ...@@ -648,17 +655,24 @@ static int __init update_note_header_size_elf32(const Elf32_Ehdr *ehdr_ptr)
return rc; return rc;
} }
nhdr_ptr = notes_section; nhdr_ptr = notes_section;
while (real_sz < max_sz) { while (nhdr_ptr->n_namesz != 0) {
if (nhdr_ptr->n_namesz == 0)
break;
sz = sizeof(Elf32_Nhdr) + sz = sizeof(Elf32_Nhdr) +
((nhdr_ptr->n_namesz + 3) & ~3) + ((nhdr_ptr->n_namesz + 3) & ~3) +
((nhdr_ptr->n_descsz + 3) & ~3); ((nhdr_ptr->n_descsz + 3) & ~3);
if ((real_sz + sz) > max_sz) {
pr_warn("Warning: Exceeded p_memsz, dropping PT_NOTE entry n_namesz=0x%x, n_descsz=0x%x\n",
nhdr_ptr->n_namesz, nhdr_ptr->n_descsz);
break;
}
real_sz += sz; real_sz += sz;
nhdr_ptr = (Elf32_Nhdr*)((char*)nhdr_ptr + sz); nhdr_ptr = (Elf32_Nhdr*)((char*)nhdr_ptr + sz);
} }
kfree(notes_section); kfree(notes_section);
phdr_ptr->p_memsz = real_sz; phdr_ptr->p_memsz = real_sz;
if (real_sz == 0) {
pr_warn("Warning: Zero PT_NOTE entries found\n");
return -EINVAL;
}
} }
return 0; return 0;
......
...@@ -188,6 +188,9 @@ static inline void kick_all_cpus_sync(void) { } ...@@ -188,6 +188,9 @@ static inline void kick_all_cpus_sync(void) { }
*/ */
extern void arch_disable_smp_support(void); extern void arch_disable_smp_support(void);
extern void arch_enable_nonboot_cpus_begin(void);
extern void arch_enable_nonboot_cpus_end(void);
void smp_setup_processor_id(void); void smp_setup_processor_id(void);
#endif /* __LINUX_SMP_H */ #endif /* __LINUX_SMP_H */
...@@ -945,8 +945,10 @@ static int hwpoison_user_mappings(struct page *p, unsigned long pfn, ...@@ -945,8 +945,10 @@ static int hwpoison_user_mappings(struct page *p, unsigned long pfn,
* to it. Similarly, page lock is shifted. * to it. Similarly, page lock is shifted.
*/ */
if (hpage != p) { if (hpage != p) {
put_page(hpage); if (!(flags & MF_COUNT_INCREASED)) {
get_page(p); put_page(hpage);
get_page(p);
}
lock_page(p); lock_page(p);
unlock_page(hpage); unlock_page(hpage);
*hpagep = p; *hpagep = p;
......
...@@ -1004,21 +1004,19 @@ static inline void slab_free_hook(struct kmem_cache *s, void *x) ...@@ -1004,21 +1004,19 @@ static inline void slab_free_hook(struct kmem_cache *s, void *x)
static void add_full(struct kmem_cache *s, static void add_full(struct kmem_cache *s,
struct kmem_cache_node *n, struct page *page) struct kmem_cache_node *n, struct page *page)
{ {
lockdep_assert_held(&n->list_lock);
if (!(s->flags & SLAB_STORE_USER)) if (!(s->flags & SLAB_STORE_USER))
return; return;
lockdep_assert_held(&n->list_lock);
list_add(&page->lru, &n->full); list_add(&page->lru, &n->full);
} }
static void remove_full(struct kmem_cache *s, struct kmem_cache_node *n, struct page *page) static void remove_full(struct kmem_cache *s, struct kmem_cache_node *n, struct page *page)
{ {
lockdep_assert_held(&n->list_lock);
if (!(s->flags & SLAB_STORE_USER)) if (!(s->flags & SLAB_STORE_USER))
return; return;
lockdep_assert_held(&n->list_lock);
list_del(&page->lru); list_del(&page->lru);
} }
...@@ -1520,11 +1518,9 @@ static void discard_slab(struct kmem_cache *s, struct page *page) ...@@ -1520,11 +1518,9 @@ static void discard_slab(struct kmem_cache *s, struct page *page)
/* /*
* Management of partially allocated slabs. * Management of partially allocated slabs.
*/ */
static inline void add_partial(struct kmem_cache_node *n, static inline void
struct page *page, int tail) __add_partial(struct kmem_cache_node *n, struct page *page, int tail)
{ {
lockdep_assert_held(&n->list_lock);
n->nr_partial++; n->nr_partial++;
if (tail == DEACTIVATE_TO_TAIL) if (tail == DEACTIVATE_TO_TAIL)
list_add_tail(&page->lru, &n->partial); list_add_tail(&page->lru, &n->partial);
...@@ -1532,15 +1528,27 @@ static inline void add_partial(struct kmem_cache_node *n, ...@@ -1532,15 +1528,27 @@ static inline void add_partial(struct kmem_cache_node *n,
list_add(&page->lru, &n->partial); list_add(&page->lru, &n->partial);
} }
static inline void remove_partial(struct kmem_cache_node *n, static inline void add_partial(struct kmem_cache_node *n,
struct page *page) struct page *page, int tail)
{ {
lockdep_assert_held(&n->list_lock); lockdep_assert_held(&n->list_lock);
__add_partial(n, page, tail);
}
static inline void
__remove_partial(struct kmem_cache_node *n, struct page *page)
{
list_del(&page->lru); list_del(&page->lru);
n->nr_partial--; n->nr_partial--;
} }
static inline void remove_partial(struct kmem_cache_node *n,
struct page *page)
{
lockdep_assert_held(&n->list_lock);
__remove_partial(n, page);
}
/* /*
* Remove slab from the partial list, freeze it and * Remove slab from the partial list, freeze it and
* return the pointer to the freelist. * return the pointer to the freelist.
...@@ -2906,12 +2914,10 @@ static void early_kmem_cache_node_alloc(int node) ...@@ -2906,12 +2914,10 @@ static void early_kmem_cache_node_alloc(int node)
inc_slabs_node(kmem_cache_node, node, page->objects); inc_slabs_node(kmem_cache_node, node, page->objects);
/* /*
* the lock is for lockdep's sake, not for any actual * No locks need to be taken here as it has just been
* race protection * initialized and there is no concurrent access.
*/ */
spin_lock(&n->list_lock); __add_partial(n, page, DEACTIVATE_TO_HEAD);
add_partial(n, page, DEACTIVATE_TO_HEAD);
spin_unlock(&n->list_lock);
} }
static void free_kmem_cache_nodes(struct kmem_cache *s) static void free_kmem_cache_nodes(struct kmem_cache *s)
...@@ -3197,7 +3203,7 @@ static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n) ...@@ -3197,7 +3203,7 @@ static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n)
list_for_each_entry_safe(page, h, &n->partial, lru) { list_for_each_entry_safe(page, h, &n->partial, lru) {
if (!page->inuse) { if (!page->inuse) {
remove_partial(n, page); __remove_partial(n, page);
discard_slab(s, page); discard_slab(s, page);
} else { } else {
list_slab_objects(s, page, list_slab_objects(s, page,
......
...@@ -471,7 +471,7 @@ sub seed_camelcase_includes { ...@@ -471,7 +471,7 @@ sub seed_camelcase_includes {
$camelcase_seeded = 1; $camelcase_seeded = 1;
if (-d ".git") { if (-e ".git") {
my $git_last_include_commit = `git log --no-merges --pretty=format:"%h%n" -1 -- include`; my $git_last_include_commit = `git log --no-merges --pretty=format:"%h%n" -1 -- include`;
chomp $git_last_include_commit; chomp $git_last_include_commit;
$camelcase_cache = ".checkpatch-camelcase.git.$git_last_include_commit"; $camelcase_cache = ".checkpatch-camelcase.git.$git_last_include_commit";
...@@ -499,7 +499,7 @@ sub seed_camelcase_includes { ...@@ -499,7 +499,7 @@ sub seed_camelcase_includes {
return; return;
} }
if (-d ".git") { if (-e ".git") {
$files = `git ls-files "include/*.h"`; $files = `git ls-files "include/*.h"`;
@include_files = split('\n', $files); @include_files = split('\n', $files);
} }
......
...@@ -95,7 +95,7 @@ my %VCS_cmds; ...@@ -95,7 +95,7 @@ my %VCS_cmds;
my %VCS_cmds_git = ( my %VCS_cmds_git = (
"execute_cmd" => \&git_execute_cmd, "execute_cmd" => \&git_execute_cmd,
"available" => '(which("git") ne "") && (-d ".git")', "available" => '(which("git") ne "") && (-e ".git")',
"find_signers_cmd" => "find_signers_cmd" =>
"git log --no-color --follow --since=\$email_git_since " . "git log --no-color --follow --since=\$email_git_since " .
'--numstat --no-merges ' . '--numstat --no-merges ' .
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment