mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-11-07 04:09:21 +00:00
8b08aa9e75
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJUyuGRAAoJEDjbvchgkmk+7EwQALYPOeh+AManQFB1MQvFuOgZ /4ulpjhGXw/RPTKHMeyHo8vRfUhMOx8UPF62uql+g1l9b/Zt2bs6qXu4QcxRRsQc trSTUpi+U14y1hkgqOVOcFYP2ZaTjNEBQgLJ4eGn46CliLqme+rfoyRYm2GXzcR4 6cbSAr3mufdFIpi9/8Dn62Gv0aws5lIv3qkHJXznyuux3tisPT5y6Ux2KJoivPn/ SqADtRpwo+7lTjl15fE++9AqNsGMorV6toT2OO/7nXP+824psInKLmREAT2qC99b BG61vcYdxOuHtzmwrvCf1jSRjxhvZT0j2xhBr/vCKcxy08AT0vDv68zrV1r6TIuu U7/CKXtFBY95cjfnkTLJuswBSuIA/+sQHV6DaddH0V8fcZ6rQMLrblQ9ZcFFFkmT 2SG6lmlXqZvcEKYGMnL/Dcow1rkRhB5stiGgTkYxjiRSRpzAHISRJ/GGpsT+rRqK HpBs5p9JshvRl7RWKwAu+DNGaEK1X/WYxc4/jw6dZFWX7lEWSMIPlr9zXgZCZ39y V6lV1VVlT9/CSs1swKHUyhHHehlFsnIlQ6Fkiycr/KkuqBLs92Hyb7WhpVa819yX osXdxSm6J54skiOLKYpBWHpnY09Tc+p28VEfMpErTExgp2oE8F34K7kdhoQPQb97 2mHiXNa+J4CLUNQ+sRmw =HDBo -----END PGP SIGNATURE----- Merge commit 'v3.10.67' into msm-3.10 This merge brings us up to date with upstream kernel.org tag v3.10.67. It also contains changes to allow forbidden warnings introduced in the commit 'core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors'. Once upstream has corrected these warnings, the changes to scripts/gcc-wrapper.py, in this commit, can be reverted. * commit 'v3.10.67' (915 commits) Linux 3.10.67 md/raid5: fetch_block must fetch all the blocks handle_stripe_dirtying wants. ext4: fix warning in ext4_da_update_reserve_space() quota: provide interface for readding allocated space into reserved space crypto: add missing crypto module aliases crypto: include crypto- module prefix in template crypto: prefix module autoloading with "crypto-" drbd: merge_bvec_fn: properly remap bvm->bi_bdev Revert "swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single" ipvs: uninitialized data with IP_VS_IPV6 KEYS: close race between key lookup and freeing sata_dwc_460ex: fix resource leak on error path x86/asm/traps: Disable tracing and kprobes in fixup_bad_iret and sync_regs x86, tls: Interpret an all-zero struct user_desc as "no segment" x86, tls, ldt: Stop checking lm in LDT_empty x86/tsc: Change Fast TSC calibration failed from error to info x86, hyperv: Mark the Hyper-V clocksource as being continuous clocksource: exynos_mct: Fix bitmask regression for exynos4_mct_write can: dev: fix crtlmode_supported check bus: mvebu-mbus: fix support of MBus window 13 ARM: dts: imx25: Fix PWM "per" clocks time: adjtimex: Validate the ADJ_FREQUENCY values time: settimeofday: Validate the values of tv from user dm cache: share cache-metadata object across inactive and active DM tables ipr: wait for aborted command responses drm/i915: Fix mutex->owner inspection race under DEBUG_MUTEXES scripts/recordmcount.pl: There is no -m32 gcc option on Super-H anymore ALSA: usb-audio: Add mic volume fix quirk for Logitech Webcam C210 libata: prevent HSM state change race between ISR and PIO pinctrl: Fix two deadlocks gpio: sysfs: fix gpio device-attribute leak gpio: sysfs: fix gpio-chip device-attribute leak Linux 3.10.66 s390/3215: fix tty output containing tabs s390/3215: fix hanging console issue fsnotify: next_i is freed during fsnotify_unmount_inodes. netfilter: ipset: small potential read beyond the end of buffer mmc: sdhci: Fix sleep in atomic after inserting SD card LOCKD: Fix a race when initialising nlmsvc_timeout x86, um: actually mark system call tables readonly um: Skip futex_atomic_cmpxchg_inatomic() test decompress_bunzip2: off by one in get_next_block() ARM: shmobile: sh73a0 legacy: Set .control_parent for all irqpin instances ARM: omap5/dra7xx: Fix frequency typos ARM: clk-imx6q: fix video divider for rev T0 1.0 ARM: imx6q: drop unnecessary semicolon ARM: dts: imx25: Fix the SPI1 clocks Input: I8042 - add Acer Aspire 7738 to the nomux list Input: i8042 - reset keyboard to fix Elantech touchpad detection can: kvaser_usb: Don't send a RESET_CHIP for non-existing channels can: kvaser_usb: Reset all URB tx contexts upon channel close can: kvaser_usb: Don't free packets when tight on URBs USB: keyspan: fix null-deref at probe USB: cp210x: add IDs for CEL USB sticks and MeshWorks devices USB: cp210x: fix ID for production CEL MeshConnect USB Stick usb: dwc3: gadget: Stop TRB preparation after limit is reached usb: dwc3: gadget: Fix TRB preparation during SG OHCI: add a quirk for ULi M5237 blocking on reset gpiolib: of: Correct error handling in of_get_named_gpiod_flags NFSv4.1: Fix client id trunking on Linux ftrace/jprobes/x86: Fix conflict between jprobes and function graph tracing vfio-pci: Fix the check on pci device type in vfio_pci_probe() uvcvideo: Fix destruction order in uvc_delete() smiapp: Take mutex during PLL update in sensor initialisation af9005: fix kernel panic on init if compiled without IR smiapp-pll: Correct clock debug prints video/logo: prevent use of logos after they have been freed storvsc: ring buffer failures may result in I/O freeze iscsi-target: Fail connection on short sendmsg writes hp_accel: Add support for HP ZBook 15 cfg80211: Fix 160 MHz channels with 80+80 and 160 MHz drivers ARC: [nsimosci] move peripherals to match model to FPGA drm/i915: Force the CS stall for invalidate flushes drm/i915: Invalidate media caches on gen7 drm/radeon: properly filter DP1.2 4k modes on non-DP1.2 hw drm/radeon: check the right ring in radeon_evict_flags() drm/vmwgfx: Fix fence event code enic: fix rx skb checksum alx: fix alx_poll() tcp: Do not apply TSO segment limit to non-TSO packets tg3: tg3_disable_ints using uninitialized mailbox value to disable interrupts netlink: Don't reorder loads/stores before marking mmap netlink frame as available netlink: Always copy on mmap TX. Linux 3.10.65 mm: Don't count the stack guard page towards RLIMIT_STACK mm: propagate error from stack expansion even for guard page mm, vmscan: prevent kswapd livelock due to pfmemalloc-throttled process being killed perf session: Do not fail on processing out of order event perf: Fix events installation during moving group perf/x86/intel/uncore: Make sure only uncore events are collected Btrfs: don't delay inode ref updates during log replay ARM: mvebu: disable I/O coherency on non-SMP situations on Armada 370/375/38x/XP scripts/kernel-doc: don't eat struct members with __aligned nilfs2: fix the nilfs_iget() vs. nilfs_new_inode() races nfsd4: fix xdr4 inclusion of escaped char fs: nfsd: Fix signedness bug in compare_blob serial: samsung: wait for transfer completion before clock disable writeback: fix a subtle race condition in I_DIRTY clearing cdc-acm: memory leak in error case genhd: check for int overflow in disk_expand_part_tbl() USB: cdc-acm: check for valid interfaces ALSA: hda - Fix wrong gpio_dir & gpio_mask hint setups for IDT/STAC codecs ALSA: hda - using uninitialized data ALSA: usb-audio: extend KEF X300A FU 10 tweak to Arcam rPAC driver core: Fix unbalanced device reference in drivers_probe x86, vdso: Use asm volatile in __getcpu x86_64, vdso: Fix the vdso address randomization algorithm HID: Add a new id 0x501a for Genius MousePen i608X HID: add battery quirk for USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO keyboard HID: roccat: potential out of bounds in pyra_sysfs_write_settings() HID: i2c-hid: prevent buffer overflow in early IRQ HID: i2c-hid: fix race condition reading reports iommu/vt-d: Fix an off-by-one bug in __domain_mapping() UBI: Fix double free after do_sync_erase() UBI: Fix invalid vfree() pstore-ram: Allow optional mapping with pgprot_noncached pstore-ram: Fix hangs by using write-combine mappings PCI: Restore detection of read-only BARs ASoC: dwc: Ensure FIFOs are flushed to prevent channel swap ASoC: max98090: Fix ill-defined sidetone route ASoC: sigmadsp: Refuse to load firmware files with a non-supported version ath5k: fix hardware queue index assignment swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single can: peak_usb: fix memset() usage can: peak_usb: fix cleanup sequence order in case of error during init ath9k: fix BE/BK queue order ath9k_hw: fix hardware queue allocation ocfs2: fix journal commit deadlock Linux 3.10.64 Btrfs: fix fs corruption on transaction abort if device supports discard Btrfs: do not move em to modified list when unpinning eCryptfs: Remove buggy and unnecessary write in file name decode routine eCryptfs: Force RO mount when encrypted view is enabled udf: Verify symlink size before loading it exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting ncpfs: return proper error from NCP_IOC_SETROOT ioctl crypto: af_alg - fix backlog handling userns: Unbreak the unprivileged remount tests userns: Allow setting gid_maps without privilege when setgroups is disabled userns: Add a knob to disable setgroups on a per user namespace basis userns: Rename id_map_mutex to userns_state_mutex userns: Only allow the creator of the userns unprivileged mappings userns: Check euid no fsuid when establishing an unprivileged uid mapping userns: Don't allow unprivileged creation of gid mappings userns: Don't allow setgroups until a gid mapping has been setablished userns: Document what the invariant required for safe unprivileged mappings. groups: Consolidate the setgroups permission checks umount: Disallow unprivileged mount force mnt: Update unprivileged remount test mnt: Implicitly add MNT_NODEV on remount when it was implicitly added by mount mac80211: free management frame keys when removing station mac80211: fix multicast LED blinking and counter KEYS: Fix stale key registration at error path isofs: Fix unchecked printing of ER records x86/tls: Don't validate lm in set_thread_area() after all dm space map metadata: fix sm_bootstrap_get_nr_blocks() dm bufio: fix memleak when using a dm_buffer's inline bio nfs41: fix nfs4_proc_layoutget error handling megaraid_sas: corrected return of wait_event from abort frame path mmc: block: add newline to sysfs display of force_ro mfd: tc6393xb: Fail ohci suspend if full state restore is required md/bitmap: always wait for writes on unplug. x86, kvm: Clear paravirt_enabled on KVM guests for espfix32's benefit x86_64, switch_to(): Load TLS descriptors before switching DS and ES x86/tls: Disallow unusual TLS segments x86/tls: Validate TLS entries to protect espfix isofs: Fix infinite looping over CE entries Linux 3.10.63 ALSA: usb-audio: Don't resubmit pending URBs at MIDI error recovery powerpc: 32 bit getcpu VDSO function uses 64 bit instructions ARM: sched_clock: Load cycle count after epoch stabilizes igb: bring link up when PHY is powered up ext2: Fix oops in ext2_get_block() called from ext2_quota_write() nEPT: Nested INVEPT net: sctp: use MAX_HEADER for headroom reserve in output path net: mvneta: fix Tx interrupt delay rtnetlink: release net refcnt on error in do_setlink() net/mlx4_core: Limit count field to 24 bits in qp_alloc_res tg3: fix ring init when there are more TX than RX channels ipv6: gre: fix wrong skb->protocol in WCCP sata_fsl: fix error handling of irq_of_parse_and_map ahci: disable MSI on SAMSUNG 0xa800 SSD AHCI: Add DeviceIDs for Sunrise Point-LP SATA controller media: smiapp: Only some selection targets are settable drm/i915: Unlock panel even when LVDS is disabled drm/radeon: kernel panic in drm_calc_vbltimestamp_from_scanoutpos with 3.18.0-rc6 i2c: davinci: generate STP always when NACK is received i2c: omap: fix i207 errata handling i2c: omap: fix NACK and Arbitration Lost irq handling xen-netfront: Remove BUGs on paged skb data which crosses a page boundary mm: fix swapoff hang after page migration and fork mm: frontswap: invalidate expired data on a dup-store failure Linux 3.10.62 nfsd: Fix ACL null pointer deref powerpc/powernv: Honor the generic "no_64bit_msi" flag bnx2fc: do not add shared skbs to the fcoe_rx_list nfsd4: fix leak of inode reference on delegation failure nfsd: Fix slot wake up race in the nfsv4.1 callback code rt2x00: do not align payload on modern H/W can: dev: avoid calling kfree_skb() from interrupt context spi: dw: Fix dynamic speed change. iser-target: Handle DEVICE_REMOVAL event on network portal listener correctly target: Don't call TFO->write_pending if data_length == 0 srp-target: Retry when QP creation fails with ENOMEM Input: xpad - use proper endpoint type ARM: 8222/1: mvebu: enable strex backoff delay ARM: 8216/1: xscale: correct auxiliary register in suspend/resume ALSA: usb-audio: Add ctrl message delay quirk for Marantz/Denon devices can: esd_usb2: fix memory leak on disconnect USB: xhci: don't start a halted endpoint before its new dequeue is set usb-quirks: Add reset-resume quirk for MS Wireless Laser Mouse 6000 usb: serial: ftdi_sio: add PIDs for Matrix Orbital products USB: serial: cp210x: add IDs for CEL MeshConnect USB Stick USB: keyspan: fix tty line-status reporting USB: keyspan: fix overrun-error reporting USB: ssu100: fix overrun-error reporting iio: Fix IIO_EVENT_CODE_EXTRACT_DIR bit mask powerpc/pseries: Fix endiannes issue in RTAS call from xmon powerpc/pseries: Honor the generic "no_64bit_msi" flag of/base: Fix PowerPC address parsing hack ASoC: wm_adsp: Avoid attempt to free buffers that might still be in use ASoC: sgtl5000: Fix SMALL_POP bit definition PCI/MSI: Add device flag indicating that 64-bit MSIs don't work ipx: fix locking regression in ipx_sendmsg and ipx_recvmsg pptp: fix stack info leak in pptp_getname() qmi_wwan: Add support for HP lt4112 LTE/HSPA+ Gobi 4G Modem ieee802154: fix error handling in ieee802154fake_probe() ipv4: Fix incorrect error code when adding an unreachable route inetdevice: fixed signed integer overflow sparc64: Fix constraints on swab helpers. uprobes, x86: Fix _TIF_UPROBE vs _TIF_NOTIFY_RESUME x86, mm: Set NX across entire PMD at boot x86: Require exact match for 'noxsave' command line option x86_64, traps: Rework bad_iret x86_64, traps: Stop using IST for #SS x86_64, traps: Fix the espfix64 #DF fixup and rewrite it in C MIPS: Loongson: Make platform serial setup always built-in. MIPS: oprofile: Fix backtrace on 64-bit kernel Linux 3.10.61 mm: memcg: handle non-error OOM situations more gracefully mm: memcg: do not trap chargers with full callstack on OOM mm: memcg: rework and document OOM waiting and wakeup mm: memcg: enable memcg OOM killer only for user faults x86: finish user fault error path with fatal signal arch: mm: pass userspace fault flag to generic fault handler arch: mm: do not invoke OOM killer on kernel fault OOM arch: mm: remove obsolete init OOM protection mm: invoke oom-killer from remaining unconverted page fault handlers net: sctp: fix skb_over_panic when receiving malformed ASCONF chunks net: sctp: fix panic on duplicate ASCONF chunks net: sctp: fix remote memory pressure from excessive queueing KVM: x86: Don't report guest userspace emulation error to userspace SCSI: hpsa: fix a race in cmd_free/scsi_done net/mlx4_en: Fix BlueFlame race ARM: Correct BUG() assembly to ensure it is endian-agnostic perf/x86/intel: Use proper dTLB-load-misses event on IvyBridge mei: bus: fix possible boundaries violation perf: Handle compat ioctl MIPS: Fix forgotten preempt_enable() when CPU has inclusive pcaches dell-wmi: Fix access out of memory ARM: probes: fix instruction fetch order with <asm/opcodes.h> br: fix use of ->rx_handler_data in code executed on non-rx_handler path netfilter: nf_nat: fix oops on netns removal netfilter: xt_bpf: add mising opaque struct sk_filter definition netfilter: nf_log: release skbuff on nlmsg put failure netfilter: nfnetlink_log: fix maximum packet length logged to userspace netfilter: nf_log: account for size of NLMSG_DONE attribute ipc: always handle a new value of auto_msgmni clocksource: Remove "weak" from clocksource_default_clock() declaration kgdb: Remove "weak" from kgdb_arch_pc() declaration media: ttusb-dec: buffer overflow in ioctl NFSv4: Fix races between nfs_remove_bad_delegation() and delegation return nfs: Fix use of uninitialized variable in nfs_getattr() NFS: Don't try to reclaim delegation open state if recovery failed NFSv4: Ensure that we remove NFSv4.0 delegations when state has expired Input: alps - allow up to 2 invalid packets without resetting device Input: alps - ignore potential bare packets when device is out of sync dm raid: ensure superblock's size matches device's logical block size dm btree: fix a recursion depth bug in btree walking code block: Fix computation of merged request priority parisc: Use compat layer for msgctl, shmat, shmctl and semtimedop syscalls scsi: only re-lock door after EH on devices that were reset nfs: fix pnfs direct write memory leak firewire: cdev: prevent kernel stack leaking into ioctl arguments arm64: __clear_user: handle exceptions on strb ARM: 8198/1: make kuser helpers depend on MMU drm/radeon: add missing crtc unlock when setting up the MC mac80211: fix use-after-free in defragmentation macvtap: Fix csum_start when VLAN tags are present iwlwifi: configure the LTR libceph: do not crash on large auth tickets xtensa: re-wire umount syscall to sys_oldumount ALSA: usb-audio: Fix memory leak in FTU quirk ahci: disable MSI instead of NCQ on Samsung pci-e SSDs on macbooks ahci: Add Device IDs for Intel Sunrise Point PCH audit: keep inode pinned x86, x32, audit: Fix x32's AUDIT_ARCH wrt audit sparc32: Implement xchg and atomic_xchg using ATOMIC_HASH locks sparc64: Do irq_{enter,exit}() around generic_smp_call_function*(). sparc64: Fix crashes in schizo_pcierr_intr_other(). sunvdc: don't call VD_OP_GET_VTOC vio: fix reuse of vio_dring slot sunvdc: limit each sg segment to a page sunvdc: compute vdisk geometry from capacity sunvdc: add cdrom and v1.1 protocol support net: sctp: fix memory leak in auth key management net: sctp: fix NULL pointer dereference in af->from_addr_param on malformed packet gre6: Move the setting of dev->iflink into the ndo_init functions. ip6_tunnel: Use ip6_tnl_dev_init as the ndo_init function. Linux 3.10.60 libceph: ceph-msgr workqueue needs a resque worker Btrfs: fix kfree on list_head in btrfs_lookup_csums_range error cleanup of: Fix overflow bug in string property parsing functions sysfs: driver core: Fix glue dir race condition by gdp_mutex i2c: at91: don't account as iowait acer-wmi: Add acpi_backlight=video quirk for the Acer KAV80 rbd: Fix error recovery in rbd_obj_read_sync() drm/radeon: remove invalid pci id usb: gadget: udc: core: fix kernel oops with soft-connect usb: gadget: function: acm: make f_acm pass USB20CV Chapter9 usb: dwc3: gadget: fix set_halt() bug with pending transfers crypto: algif - avoid excessive use of socket buffer in skcipher mm: Remove false WARN_ON from pagecache_isize_extended() x86, apic: Handle a bad TSC more gracefully posix-timers: Fix stack info leak in timer_create() mac80211: fix typo in starting baserate for rts_cts_rate_idx PM / Sleep: fix recovery during resuming from hibernation tty: Fix high cpu load if tty is unreleaseable quota: Properly return errors from dquot_writeback_dquots() ext3: Don't check quota format when there are no quota files nfsd4: fix crash on unknown operation number cpc925_edac: Report UE events properly e7xxx_edac: Report CE events properly i3200_edac: Report CE events properly i82860_edac: Report CE events properly scsi: Fix error handling in SCSI_IOCTL_SEND_COMMAND lib/bitmap.c: fix undefined shift in __bitmap_shift_{left|right}() cgroup/kmemleak: add kmemleak_free() for cgroup deallocations. usb: Do not allow usb_alloc_streams on unconfigured devices USB: opticon: fix non-atomic allocation in write path usb-storage: handle a skipped data phase spi: pxa2xx: toggle clocks on suspend if not disabled by runtime PM spi: pl022: Fix incorrect dma_unmap_sg usb: dwc3: gadget: Properly initialize LINK TRB wireless: rt2x00: add new rt2800usb device USB: option: add Haier CE81B CDMA modem usb: option: add support for Telit LE910 USB: cdc-acm: only raise DTR on transitions from B0 USB: cdc-acm: add device id for GW Instek AFG-2225 usb: serial: ftdi_sio: add "bricked" FTDI device PID usb: serial: ftdi_sio: add Awinda Station and Dongle products USB: serial: cp210x: add Silicon Labs 358x VID and PID serial: Fix divide-by-zero fault in uart_get_divisor() staging:iio:ade7758: Remove "raw" from channel name staging:iio:ade7758: Fix check if channels are enabled in prenable staging:iio:ade7758: Fix NULL pointer deref when enabling buffer staging:iio:ad5933: Drop "raw" from channel names staging:iio:ad5933: Fix NULL pointer deref when enabling buffer OOM, PM: OOM killed task shouldn't escape PM suspend freezer: Do not freeze tasks killed by OOM killer ext4: fix oops when loading block bitmap failed cpufreq: intel_pstate: Fix setting max_perf_pct in performance policy ext4: fix overflow when updating superblock backups after resize ext4: check s_chksum_driver when looking for bg csum presence ext4: fix reservation overflow in ext4_da_write_begin ext4: add ext4_iget_normal() which is to be used for dir tree lookups ext4: grab missed write_count for EXT4_IOC_SWAP_BOOT ext4: don't check quota format when there are no quota files ext4: check EA value offset when loading jbd2: free bh when descriptor block checksum fails MIPS: tlbex: Properly fix HUGE TLB Refill exception handler target: Fix APTPL metadata handling for dynamic MappedLUNs target: Fix queue full status NULL pointer for SCF_TRANSPORT_TASK_SENSE qla_target: don't delete changed nacls ARC: Update order of registers in KGDB to match GDB 7.5 ARC: [nsimosci] Allow "headless" models to boot KVM: x86: Emulator fixes for eip canonical checks on near branches KVM: x86: Fix wrong masking on relative jump/call kvm: x86: don't kill guest on unknown exit reason KVM: x86: Check non-canonical addresses upon WRMSR KVM: x86: Improve thread safety in pit KVM: x86: Prevent host from panicking on shared MSR writes. kvm: fix excessive pages un-pinning in kvm_iommu_map error path. media: tda7432: Fix setting TDA7432_MUTE bit for TDA7432_RF register media: ds3000: fix LNB supply voltage on Tevii S480 on initialization media: em28xx-v4l: give back all active video buffers to the vb2 core properly on streaming stop media: v4l2-common: fix overflow in v4l_bound_align_image() drm/nouveau/bios: memset dcb struct to zero before parsing drm/tilcdc: Fix the error path in tilcdc_load() drm/ast: Fix HW cursor image Input: i8042 - quirks for Fujitsu Lifebook A544 and Lifebook AH544 Input: i8042 - add noloop quirk for Asus X750LN framebuffer: fix border color modules, lock around setting of MODULE_STATE_UNFORMED dm log userspace: fix memory leak in dm_ulog_tfr_init failure path block: fix alignment_offset math that assumes io_min is a power-of-2 drbd: compute the end before rb_insert_augmented() dm bufio: update last_accessed when relinking a buffer virtio_pci: fix virtio spec compliance on restore selinux: fix inode security list corruption pstore: Fix duplicate {console,ftrace}-efi entries mfd: rtsx_pcr: Fix MSI enable error handling mnt: Prevent pivot_root from creating a loop in the mount tree UBI: add missing kmem_cache_free() in process_pool_aeb error path random: add and use memzero_explicit() for clearing data crypto: more robust crypto_memneq fix misuses of f_count() in ppp and netlink kill wbuf_queued/wbuf_dwork_lock ALSA: pcm: Zero-clear reserved fields of PCM status ioctl in compat mode evm: check xattr value length and type in evm_inode_setxattr() x86, pageattr: Prevent overflow in slow_virt_to_phys() for X86_PAE x86_64, entry: Fix out of bounds read on sysenter x86_64, entry: Filter RFLAGS.NT on entry from userspace x86, flags: Rename X86_EFLAGS_BIT1 to X86_EFLAGS_FIXED x86, fpu: shift drop_init_fpu() from save_xstate_sig() to handle_signal() x86, fpu: __restore_xstate_sig()->math_state_restore() needs preempt_disable() x86: Reject x32 executables if x32 ABI not supported vfs: fix data corruption when blocksize < pagesize for mmaped data UBIFS: fix free log space calculation UBIFS: fix a race condition UBIFS: remove mst_mutex fs: Fix theoretical division by 0 in super_cache_scan(). fs: make cont_expand_zero interruptible mmc: rtsx_pci_sdmmc: fix incorrect last byte in R2 response libata-sff: Fix controllers with no ctl port pata_serverworks: disable 64-KB DMA transfers on Broadcom OSB4 IDE Controller Revert "percpu: free percpu allocation info for uniprocessor system" lockd: Try to reconnect if statd has moved drivers/net: macvtap and tun depend on INET ipv4: dst_entry leak in ip_send_unicast_reply() ax88179_178a: fix bonding failure ipv4: fix nexthop attlen check in fib_nh_match tracing/syscalls: Ignore numbers outside NR_syscalls' range Linux 3.10.59 ecryptfs: avoid to access NULL pointer when write metadata in xattr ARM: at91/PMC: don't forget to write PMC_PCDR register to disable clocks ALSA: usb-audio: Add support for Steinberg UR22 USB interface ALSA: emu10k1: Fix deadlock in synth voice lookup ALSA: pcm: use the same dma mmap codepath both for arm and arm64 arm64: compat: fix compat types affecting struct compat_elf_prpsinfo spi: dw-mid: terminate ongoing transfers at exit kernel: add support for gcc 5 fanotify: enable close-on-exec on events' fd when requested in fanotify_init() mm: clear __GFP_FS when PF_MEMALLOC_NOIO is set Bluetooth: Fix issue with USB suspend in btusb driver Bluetooth: Fix HCI H5 corrupted ack value rt2800: correct BBP1_TX_POWER_CTRL mask PCI: Generate uppercase hex for modalias interface class PCI: Increase IBM ipr SAS Crocodile BARs to at least system page size iwlwifi: Add missing PCI IDs for the 7260 series NFSv4.1: Fix an NFSv4.1 state renewal regression NFSv4: fix open/lock state recovery error handling NFSv4: Fix lock recovery when CREATE_SESSION/SETCLIENTID_CONFIRM fails lzo: check for length overrun in variable length encoding. Revert "lzo: properly check for overruns" Documentation: lzo: document part of the encoding m68k: Disable/restore interrupts in hwreg_present()/hwreg_write() Drivers: hv: vmbus: Fix a bug in vmbus_open() Drivers: hv: vmbus: Cleanup vmbus_establish_gpadl() Drivers: hv: vmbus: Cleanup vmbus_teardown_gpadl() Drivers: hv: vmbus: Cleanup vmbus_post_msg() firmware_class: make sure fw requests contain a name qla2xxx: Use correct offset to req-q-out for reserve calculation mptfusion: enable no_write_same for vmware scsi disks be2iscsi: check ip buffer before copying regmap: fix NULL pointer dereference in _regmap_write/read regmap: debugfs: fix possbile NULL pointer dereference spi: dw-mid: check that DMA was inited before exit spi: dw-mid: respect 8 bit mode x86/intel/quark: Switch off CR4.PGE so TLB flush uses CR3 instead kvm: don't take vcpu mutex for obviously invalid vcpu ioctls KVM: s390: unintended fallthrough for external call kvm: x86: fix stale mmio cache bug fs: Add a missing permission check to do_umount Btrfs: fix race in WAIT_SYNC ioctl Btrfs: fix build_backref_tree issue with multiple shared blocks Btrfs: try not to ENOSPC on log replay Linux 3.10.58 USB: cp210x: add support for Seluxit USB dongle USB: serial: cp210x: added Ketra N1 wireless interface support USB: Add device quirk for ASUS T100 Base Station keyboard ipv6: reallocate addrconf router for ipv6 address when lo device up tcp: fixing TLP's FIN recovery sctp: handle association restarts when the socket is closed. ip6_gre: fix flowi6_proto value in xmit path hyperv: Fix a bug in netvsc_start_xmit() tg3: Allow for recieve of full-size 8021AD frames tg3: Work around HW/FW limitations with vlan encapsulated frames l2tp: fix race while getting PMTU on PPP pseudo-wire openvswitch: fix panic with multiple vlan headers packet: handle too big packets for PACKET_V3 tcp: fix tcp_release_cb() to dispatch via address family for mtu_reduced() sit: Fix ipip6_tunnel_lookup device matching criteria myri10ge: check for DMA mapping errors Linux 3.10.57 cpufreq: ondemand: Change the calculation of target frequency cpufreq: Fix wrong time unit conversion nl80211: clear skb cb before passing to netlink drbd: fix regression 'out of mem, failed to invoke fence-peer helper' jiffies: Fix timeval conversion to jiffies md/raid5: disable 'DISCARD' by default due to safety concerns. media: vb2: fix VBI/poll regression mm: numa: Do not mark PTEs pte_numa when splitting huge pages mm, thp: move invariant bug check out of loop in __split_huge_page_map ring-buffer: Fix infinite spin in reading buffer init/Kconfig: Fix HAVE_FUTEX_CMPXCHG to not break up the EXPERT menu perf: fix perf bug in fork() udf: Avoid infinite loop when processing indirect ICBs Linux 3.10.56 vm_is_stack: use for_each_thread() rather then buggy while_each_thread() oom_kill: add rcu_read_lock() into find_lock_task_mm() oom_kill: has_intersects_mems_allowed() needs rcu_read_lock() oom_kill: change oom_kill.c to use for_each_thread() introduce for_each_thread() to replace the buggy while_each_thread() kernel/fork.c:copy_process(): unify CLONE_THREAD-or-thread_group_leader code arm: multi_v7_defconfig: Enable Zynq UART driver ext2: Fix fs corruption in ext2_get_xip_mem() serial: 8250_dma: check the result of TX buffer mapping ARM: 7748/1: oabi: handle faults when loading swi instruction from userspace netfilter: nf_conntrack: avoid large timeout for mid-stream pickup PM / sleep: Use valid_state() for platform-dependent sleep states only PM / sleep: Add state field to pm_states[] entries ipvs: fix ipv6 hook registration for local replies ipvs: Maintain all DSCP and ECN bits for ipv6 tun forwarding ipvs: avoid netns exit crash on ip_vs_conn_drop_conntrack md/raid1: fix_read_error should act on all non-faulty devices. media: cx18: fix kernel oops with tda8290 tuner Fix nasty 32-bit overflow bug in buffer i/o code. perf kmem: Make it work again on non NUMA machines perf: Fix a race condition in perf_remove_from_context() alarmtimer: Lock k_itimer during timer callback alarmtimer: Do not signal SIGEV_NONE timers parisc: Only use -mfast-indirect-calls option for 32-bit kernel builds powerpc/perf: Fix ABIv2 kernel backtraces sched: Fix unreleased llc_shared_mask bit during CPU hotplug ocfs2/dlm: do not get resource spinlock if lockres is new nilfs2: fix data loss with mmap() fs/notify: don't show f_handle if exportfs_encode_inode_fh failed fsnotify/fdinfo: use named constants instead of hardcoded values kcmp: fix standard comparison bug Revert "mac80211: disable uAPSD if all ACs are under ACM" usb: dwc3: core: fix ordering for PHY suspend usb: dwc3: core: fix order of PM runtime calls usb: host: xhci: fix compliance mode workaround genhd: fix leftover might_sleep() in blk_free_devt() lockd: fix rpcbind crash on lockd startup failure rtlwifi: rtl8192cu: Add new ID percpu: perform tlb flush after pcpu_map_pages() failure percpu: fix pcpu_alloc_pages() failure path percpu: free percpu allocation info for uniprocessor system ata_piix: Add Device IDs for Intel 9 Series PCH Input: i8042 - add nomux quirk for Avatar AVIU-145A6 Input: i8042 - add Fujitsu U574 to no_timeout dmi table Input: atkbd - do not try 'deactivate' keyboard on any LG laptops Input: elantech - fix detection of touchpad on ASUS s301l Input: synaptics - add support for ForcePads Input: serport - add compat handling for SPIOCSTYPE ioctl dm crypt: fix access beyond the end of allocated space block: Fix dev_t minor allocation lifetime workqueue: apply __WQ_ORDERED to create_singlethread_workqueue() Revert "iwlwifi: dvm: don't enable CTS to self" SCSI: libiscsi: fix potential buffer overrun in __iscsi_conn_send_pdu NFC: microread: Potential overflows in microread_target_discovered() iscsi-target: Fix memory corruption in iscsit_logout_post_handler_diffcid iscsi-target: avoid NULL pointer in iscsi_copy_param_list failure Target/iser: Don't put isert_conn inside disconnected handler Target/iser: Get isert_conn reference once got to connected_handler iio:inkern: fix overwritten -EPROBE_DEFER in of_iio_channel_get_by_name iio:magnetometer: bugfix magnetometers gain values iio: adc: ad_sigma_delta: Fix indio_dev->trig assignment iio: st_sensors: Fix indio_dev->trig assignment iio: meter: ade7758: Fix indio_dev->trig assignment iio: inv_mpu6050: Fix indio_dev->trig assignment iio: gyro: itg3200: Fix indio_dev->trig assignment iio:trigger: modify return value for iio_trigger_get CIFS: Fix SMB2 readdir error handling CIFS: Fix directory rename error ASoC: davinci-mcasp: Correct rx format unit configuration shmem: fix nlink for rename overwrite directory x86 early_ioremap: Increase FIX_BTMAPS_SLOTS to 8 KVM: x86: handle idiv overflow at kvm_write_tsc regmap: Fix handling of volatile registers for format_write() chips ACPICA: Update to GPIO region handler interface. MIPS: mcount: Adjust stack pointer for static trace in MIPS32 MIPS: ZBOOT: add missing <linux/string.h> include ARM: 8165/1: alignment: don't break misaligned NEON load/store ARM: 7897/1: kexec: Use the right ISA for relocate_new_kernel ARM: 8133/1: use irq_set_affinity with force=false when migrating irqs ARM: 8128/1: abort: don't clear the exclusive monitors NFSv4: Fix another bug in the close/open_downgrade code NFSv4: nfs4_state_manager() vs. nfs_server_remove_lists() usb:hub set hub->change_bits when over-current happens usb: dwc3: omap: fix ordering for runtime pm calls USB: EHCI: unlink QHs even after the controller has stopped USB: storage: Add quirks for Entrega/Xircom USB to SCSI converters USB: storage: Add quirk for Ariston Technologies iConnect USB to SCSI adapter USB: storage: Add quirk for Adaptec USBConnect 2000 USB-to-SCSI Adapter storage: Add single-LUN quirk for Jaz USB Adapter usb: hub: take hub->hdev reference when processing from eventlist xhci: fix oops when xhci resumes from hibernate with hw lpm capable devices xhci: Fix null pointer dereference if xhci initialization fails USB: zte_ev: fix removed PIDs USB: ftdi_sio: add support for NOVITUS Bono E thermal printer USB: sierra: add 1199:68AA device ID USB: sierra: avoid CDC class functions on "68A3" devices USB: zte_ev: remove duplicate Qualcom PID USB: zte_ev: remove duplicate Gobi PID Revert "USB: option,zte_ev: move most ZTE CDMA devices to zte_ev" USB: option: add VIA Telecom CDS7 chipset device id USB: option: reduce interrupt-urb logging verbosity USB: serial: fix potential heap buffer overflow USB: sisusb: add device id for Magic Control USB video USB: serial: fix potential stack buffer overflow USB: serial: pl2303: add device id for ztek device xtensa: fix a6 and a7 handling in fast_syscall_xtensa xtensa: fix TLBTEMP_BASE_2 region handling in fast_second_level_miss xtensa: fix access to THREAD_RA/THREAD_SP/THREAD_DS xtensa: fix address checks in dma_{alloc,free}_coherent xtensa: replace IOCTL code definitions with constants drm/radeon: add connector quirk for fujitsu board drm/vmwgfx: Fix a potential infinite spin waiting for fifo idle drm/ast: AST2000 cannot be detected correctly drm/i915: Wait for vblank before enabling the TV encoder drm/i915: Remove bogus __init annotation from DMI callbacks HID: logitech-dj: prevent false errors to be shown HID: magicmouse: sanity check report size in raw_event() callback HID: picolcd: sanity check report size in raw_event() callback cfq-iosched: Fix wrong children_weight calculation ALSA: pcm: fix fifo_size frame calculation ALSA: hda - Fix invalid pin powermap without jack detection ALSA: hda - Fix COEF setups for ALC1150 codec ALSA: core: fix buffer overflow in snd_info_get_line() arm64: ptrace: fix compat hardware watchpoint reporting trace: Fix epoll hang when we race with new entries i2c: at91: Fix a race condition during signal handling in at91_do_twi_xfer. i2c: at91: add bound checking on SMBus block length bytes arm64: flush TLS registers during exec ibmveth: Fix endian issues with rx_no_buffer statistic ahci: add pcid for Marvel 0x9182 controller ahci: Add Device IDs for Intel 9 Series PCH pata_scc: propagate return value of scc_wait_after_reset drm/i915: read HEAD register back in init_ring_common() to enforce ordering drm/radeon: load the lm63 driver for an lm64 thermal chip. drm/ttm: Choose a pool to shrink correctly in ttm_dma_pool_shrink_scan(). drm/ttm: Fix possible division by 0 in ttm_dma_pool_shrink_scan(). drm/tilcdc: fix double kfree drm/tilcdc: fix release order on exit drm/tilcdc: panel: fix leak when unloading the module drm/tilcdc: tfp410: fix dangling sysfs connector node drm/tilcdc: slave: fix dangling sysfs connector node drm/tilcdc: panel: fix dangling sysfs connector node carl9170: fix sending URBs with wrong type when using full-speed Linux 3.10.55 libceph: gracefully handle large reply messages from the mon libceph: rename ceph_msg::front_max to front_alloc_len tpm: Provide a generic means to override the chip returned timeouts vfs: fix bad hashing of dentries dcache.c: get rid of pointless macros IB/srp: Fix deadlock between host removal and multipathd blkcg: don't call into policy draining if root_blkg is already gone mtd: nand: omap: Fix 1-bit Hamming code scheme, omap_calculate_ecc() mtd/ftl: fix the double free of the buffers allocated in build_maps() CIFS: Fix wrong restart readdir for SMB1 CIFS: Fix wrong filename length for SMB2 CIFS: Fix wrong directory attributes after rename CIFS: Possible null ptr deref in SMB2_tcon CIFS: Fix async reading on reconnects CIFS: Fix STATUS_CANNOT_DELETE error mapping for SMB2 libceph: do not hard code max auth ticket len libceph: add process_one_ticket() helper libceph: set last_piece in ceph_msg_data_pages_cursor_init() correctly md/raid1,raid10: always abort recover on write error. xfs: don't zero partial page cache pages during O_DIRECT writes xfs: don't zero partial page cache pages during O_DIRECT writes xfs: don't dirty buffers beyond EOF xfs: quotacheck leaves dquot buffers without verifiers RDMA/iwcm: Use a default listen backlog if needed md/raid10: Fix memory leak when raid10 reshape completes. md/raid10: fix memory leak when reshaping a RAID10. md/raid6: avoid data corruption during recovery of double-degraded RAID6 Bluetooth: Avoid use of session socket after the session gets freed Bluetooth: never linger on process exit mnt: Add tests for unprivileged remount cases that have found to be faulty mnt: Change the default remount atime from relatime to the existing value mnt: Correct permission checks in do_remount mnt: Move the test for MNT_LOCK_READONLY from change_mount_flags into do_remount mnt: Only change user settable mount flags in remount ring-buffer: Up rb_iter_peek() loop count to 3 ring-buffer: Always reset iterator to reader page ACPI / cpuidle: fix deadlock between cpuidle_lock and cpu_hotplug.lock ACPI: Run fixed event device notifications in process context ACPICA: Utilities: Fix memory leak in acpi_ut_copy_iobject_to_iobject bfa: Fix undefined bit shift on big-endian architectures with 32-bit DMA address ASoC: pxa-ssp: drop SNDRV_PCM_FMTBIT_S24_LE ASoC: max98090: Fix missing free_irq ASoC: samsung: Correct I2S DAI suspend/resume ops ASoC: wm_adsp: Add missing MODULE_LICENSE ASoC: pcm: fix dpcm_path_put in dpcm runtime update openrisc: Rework signal handling MIPS: Fix accessing to per-cpu data when flushing the cache MIPS: OCTEON: make get_system_type() thread-safe MIPS: asm: thread_info: Add _TIF_SECCOMP flag MIPS: Cleanup flags in syscall flags handlers. MIPS: asm/reg.h: Make 32- and 64-bit definitions available at the same time MIPS: Remove BUG_ON(!is_fpu_owner()) in do_ade() MIPS: tlbex: Fix a missing statement for HUGETLB MIPS: Prevent user from setting FCSR cause bits MIPS: GIC: Prevent array overrun drivers: scsi: storvsc: Correctly handle TEST_UNIT_READY failure Drivers: scsi: storvsc: Implement a eh_timed_out handler powerpc/pseries: Failure on removing device node powerpc/mm: Use read barrier when creating real_pte powerpc/mm/numa: Fix break placement regulator: arizona-ldo1: remove bypass functionality mfd: omap-usb-host: Fix improper mask use. kernel/smp.c:on_each_cpu_cond(): fix warning in fallback path CAPABILITIES: remove undefined caps from all processes tpm: missing tpm_chip_put in tpm_get_random() firmware: Do not use WARN_ON(!spin_is_locked()) spi: omap2-mcspi: Configure hardware when slave driver changes mode spi: orion: fix incorrect handling of cell-index DT property iommu/amd: Fix cleanup_domain for mass device removal media: media-device: Remove duplicated memset() in media_enum_entities() media: au0828: Only alt setting logic when needed media: xc4000: Fix get_frequency() media: xc5000: Fix get_frequency() Linux 3.10.54 USB: fix build error with CONFIG_PM_RUNTIME disabled NFSv4: Fix problems with close in the presence of a delegation NFSv3: Fix another acl regression svcrdma: Select NFSv4.1 backchannel transport based on forward channel NFSD: Decrease nfsd_users in nfsd_startup_generic fail usb: hub: Prevent hub autosuspend if usbcore.autosuspend is -1 USB: whiteheat: Added bounds checking for bulk command response USB: ftdi_sio: Added PID for new ekey device USB: ftdi_sio: add Basic Micro ATOM Nano USB2Serial PID ARM: OMAP2+: hwmod: Rearm wake-up interrupts for DT when MUSB is idled usb: xhci: amd chipset also needs short TX quirk xhci: Treat not finding the event_seg on COMP_STOP the same as COMP_STOP_INVAL Staging: speakup: Update __speakup_paste_selection() tty (ab)usage to match vt jbd2: fix infinite loop when recovering corrupt journal blocks mei: nfc: fix memory leak in error path mei: reset client state on queued connect request Btrfs: fix csum tree corruption, duplicate and outdated checksums hpsa: fix bad -ENOMEM return value in hpsa_big_passthru_ioctl x86/efi: Enforce CONFIG_RELOCATABLE for EFI boot stub x86_64/vsyscall: Fix warn_bad_vsyscall log output x86: don't exclude low BIOS area when allocating address space for non-PCI cards drm/radeon: add additional SI pci ids ext4: fix BUG_ON in mb_free_blocks() kvm: iommu: fix the third parameter of kvm_iommu_put_pages (CVE-2014-3601) Revert "KVM: x86: Increase the number of fixed MTRR regs to 10" KVM: nVMX: fix "acknowledge interrupt on exit" when APICv is in use KVM: x86: always exit on EOIs for interrupts listed in the IOAPIC redir table KVM: x86: Inter-privilege level ret emulation is not implemeneted crypto: ux500 - make interrupt mode plausible serial: core: Preserve termios c_cflag for console resume ext4: fix ext4_discard_allocated_blocks() if we can't allocate the pa struct drivers/i2c/busses: use correct type for dma_map/unmap hwmon: (dme1737) Prevent overflow problem when writing large limits hwmon: (ads1015) Fix out-of-bounds array access hwmon: (lm85) Fix various errors on attribute writes hwmon: (ads1015) Fix off-by-one for valid channel index checking hwmon: (gpio-fan) Prevent overflow problem when writing large limits hwmon: (lm78) Fix overflow problems seen when writing large temperature limits hwmon: (sis5595) Prevent overflow problem when writing large limits drm: omapdrm: fix compiler errors ARM: OMAP3: Fix choice of omap3_restore_es function in OMAP34XX rev3.1.2 case. mei: start disconnect request timer consistently ALSA: hda/realtek - Avoid setting wrong COEF on ALC269 & co ALSA: hda/ca0132 - Don't try loading firmware at resume when already failed ALSA: virtuoso: add Xonar Essence STX II support ALSA: hda - fix an external mic jack problem on a HP machine USB: Fix persist resume of some SS USB devices USB: ehci-pci: USB host controller support for Intel Quark X1000 USB: serial: ftdi_sio: Add support for new Xsens devices USB: serial: ftdi_sio: Annotate the current Xsens PID assignments USB: OHCI: don't lose track of EDs when a controller dies isofs: Fix unbounded recursion when processing relocated directories HID: fix a couple of off-by-ones HID: logitech: perform bounds checking on device_id early enough stable_kernel_rules: Add pointer to netdev-FAQ for network patches Linux 3.10.53 arch/sparc/math-emu/math_32.c: drop stray break operator sparc64: ldc_connect() should not return EINVAL when handshake is in progress. sunsab: Fix detection of BREAK on sunsab serial console bbc-i2c: Fix BBC I2C envctrl on SunBlade 2000 sparc64: Guard against flushing openfirmware mappings. sparc64: Do not insert non-valid PTEs into the TSB hash table. sparc64: Add membar to Niagara2 memcpy code. sparc64: Fix huge TSB mapping on pre-UltraSPARC-III cpus. sparc64: Don't bark so loudly about 32-bit tasks generating 64-bit fault addresses. sparc64: Fix top-level fault handling bugs. sparc64: Handle 32-bit tasks properly in compute_effective_address(). sparc64: Make itc_sync_lock raw sparc64: Fix argument sign extension for compat_sys_futex(). sctp: fix possible seqlock seadlock in sctp_packet_transmit() iovec: make sure the caller actually wants anything in memcpy_fromiovecend net: Correctly set segment mac_len in skb_segment(). macvlan: Initialize vlan_features to turn on offload support. net: sctp: inherit auth_capable on INIT collisions tcp: Fix integer-overflow in TCP vegas tcp: Fix integer-overflows in TCP veno net: sendmsg: fix NULL pointer dereference ip: make IP identifiers less predictable inetpeer: get rid of ip_id_count bnx2x: fix crash during TSO tunneling Linux 3.10.52 x86/espfix/xen: Fix allocation of pages for paravirt page tables lib/btree.c: fix leak of whole btree nodes net/l2tp: don't fall back on UDP [get|set]sockopt net: mvneta: replace Tx timer with a real interrupt net: mvneta: add missing bit descriptions for interrupt masks and causes net: mvneta: do not schedule in mvneta_tx_timeout net: mvneta: use per_cpu stats to fix an SMP lock up net: mvneta: increase the 64-bit rx/tx stats out of the hot path Revert "mac80211: move "bufferable MMPDU" check to fix AP mode scan" staging: vt6655: Fix Warning on boot handle_irq_event_percpu. x86_64/entry/xen: Do not invoke espfix64 on Xen x86, espfix: Make it possible to disable 16-bit support x86, espfix: Make espfix64 a Kconfig option, fix UML x86, espfix: Fix broken header guard x86, espfix: Move espfix definitions into a separate header file x86-64, espfix: Don't leak bits 31:16 of %esp returning to 16-bit stack Revert "x86-64, modify_ldt: Make support for 16-bit segments a runtime option" timer: Fix lock inversion between hrtimer_bases.lock and scheduler locks printk: rename printk_sched to printk_deferred iio: buffer: Fix demux table creation staging: vt6655: Fix disassociated messages every 10 seconds mm, thp: do not allow thp faults to avoid cpuset restrictions scsi: handle flush errors properly rapidio/tsi721_dma: fix failure to obtain transaction descriptor cfg80211: fix mic_failure tracing ARM: 8115/1: LPAE: reduce damage caused by idmap to virtual memory layout crypto: af_alg - properly label AF_ALG socket Linux 3.10.51 core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors x86/efi: Include a .bss section within the PE/COFF headers s390/ptrace: fix PSW mask check Fix gcc-4.9.0 miscompilation of load_balance() in scheduler mm: hugetlb: fix copy_hugetlb_page_range() x86_32, entry: Store badsys error code in %eax hwmon: (smsc47m192) Fix temperature limit and vrm write operations parisc: Remove SA_RESTORER define coredump: fix the setting of PF_DUMPCORE Input: fix defuzzing logic slab_common: fix the check for duplicate slab names slab_common: Do not check for duplicate slab names tracing: Fix wraparound problems in "uptime" trace clock blkcg: don't call into policy draining if root_blkg is already gone ahci: add support for the Promise FastTrak TX8660 SATA HBA (ahci mode) libata: introduce ata_host->n_tags to avoid oops on SAS controllers libata: support the ata host which implements a queue depth less than 32 block: don't assume last put of shared tags is for the host block: provide compat ioctl for BLKZEROOUT media: tda10071: force modulation to QPSK on DVB-S media: hdpvr: fix two audio bugs Linux 3.10.50 ARC: Implement ptrace(PTRACE_GET_THREAD_AREA) sched: Fix possible divide by zero in avg_atom() calculation locking/mutex: Disable optimistic spinning on some architectures PM / sleep: Fix request_firmware() error at resume dm cache metadata: do not allow the data block size to change dm thin metadata: do not allow the data block size to change alarmtimer: Fix bug where relative alarm timers were treated as absolute drm/radeon: avoid leaking edid data drm/qxl: return IRQ_NONE if it was not our irq drm/radeon: set default bl level to something reasonable irqchip: gic: Fix core ID calculation when topology is read from DT irqchip: gic: Add support for cortex a7 compatible string ring-buffer: Fix polling on trace_pipe mwifiex: fix Tx timeout issue perf/x86/intel: ignore CondChgd bit to avoid false NMI handling ipv4: fix buffer overflow in ip_options_compile() dns_resolver: Null-terminate the right string dns_resolver: assure that dns_query() result is null-terminated sunvnet: clean up objects created in vnet_new() on vnet_exit() net: pppoe: use correct channel MTU when using Multilink PPP net: sctp: fix information leaks in ulpevent layer tipc: clear 'next'-pointer of message fragments before reassembly be2net: set EQ DB clear-intr bit in be_open() netlink: Fix handling of error from netlink_dump(). net: mvneta: Fix big endian issue in mvneta_txq_desc_csum() net: mvneta: fix operation in 10 Mbit/s mode appletalk: Fix socket referencing in skb tcp: fix false undo corner cases igmp: fix the problem when mc leave group net: qmi_wwan: add two Sierra Wireless/Netgear devices net: qmi_wwan: Add ID for Telewell TW-LTE 4G v2 ipv4: icmp: Fix pMTU handling for rare case tcp: Fix divide by zero when pushing during tcp-repair bnx2x: fix possible panic under memory stress net: fix sparse warning in sk_dst_set() ipv4: irq safe sk_dst_[re]set() and ipv4_sk_update_pmtu() fix ipv4: fix dst race in sk_dst_get() 8021q: fix a potential memory leak net: sctp: check proc_dointvec result in proc_sctp_do_auth tcp: fix tcp_match_skb_to_sack() for unaligned SACK at end of an skb ip_tunnel: fix ip_tunnel_lookup shmem: fix splicing from a hole while it's punched shmem: fix faulting into a hole, not taking i_mutex shmem: fix faulting into a hole while it's punched iwlwifi: dvm: don't enable CTS to self igb: do a reset on SR-IOV re-init if device is down hwmon: (adt7470) Fix writes to temperature limit registers hwmon: (da9052) Don't use dash in the name attribute hwmon: (da9055) Don't use dash in the name attribute tracing: Add ftrace_trace_stack into __trace_puts/__trace_bputs tracing: Fix graph tracer with stack tracer on other archs fuse: handle large user and group ID Bluetooth: Ignore H5 non-link packets in non-active state Drivers: hv: util: Fix a bug in the KVP code media: gspca_pac7302: Add new usb-id for Genius i-Look 317 usb: Check if port status is equal to RxDetect Signed-off-by: Ian Maund <imaund@codeaurora.org>
770 lines
20 KiB
C
770 lines
20 KiB
C
/*
|
|
* This file is part of UBIFS.
|
|
*
|
|
* Copyright (C) 2006-2008 Nokia Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published by
|
|
* the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program; if not, write to the Free Software Foundation, Inc., 51
|
|
* Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* Authors: Artem Bityutskiy (Битюцкий Артём)
|
|
* Adrian Hunter
|
|
*/
|
|
|
|
/*
|
|
* This file is a part of UBIFS journal implementation and contains various
|
|
* functions which manipulate the log. The log is a fixed area on the flash
|
|
* which does not contain any data but refers to buds. The log is a part of the
|
|
* journal.
|
|
*/
|
|
|
|
#include "ubifs.h"
|
|
|
|
static int dbg_check_bud_bytes(struct ubifs_info *c);
|
|
|
|
/**
|
|
* ubifs_search_bud - search bud LEB.
|
|
* @c: UBIFS file-system description object
|
|
* @lnum: logical eraseblock number to search
|
|
*
|
|
* This function searches bud LEB @lnum. Returns bud description object in case
|
|
* of success and %NULL if there is no bud with this LEB number.
|
|
*/
|
|
struct ubifs_bud *ubifs_search_bud(struct ubifs_info *c, int lnum)
|
|
{
|
|
struct rb_node *p;
|
|
struct ubifs_bud *bud;
|
|
|
|
spin_lock(&c->buds_lock);
|
|
p = c->buds.rb_node;
|
|
while (p) {
|
|
bud = rb_entry(p, struct ubifs_bud, rb);
|
|
if (lnum < bud->lnum)
|
|
p = p->rb_left;
|
|
else if (lnum > bud->lnum)
|
|
p = p->rb_right;
|
|
else {
|
|
spin_unlock(&c->buds_lock);
|
|
return bud;
|
|
}
|
|
}
|
|
spin_unlock(&c->buds_lock);
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* ubifs_get_wbuf - get the wbuf associated with a LEB, if there is one.
|
|
* @c: UBIFS file-system description object
|
|
* @lnum: logical eraseblock number to search
|
|
*
|
|
* This functions returns the wbuf for @lnum or %NULL if there is not one.
|
|
*/
|
|
struct ubifs_wbuf *ubifs_get_wbuf(struct ubifs_info *c, int lnum)
|
|
{
|
|
struct rb_node *p;
|
|
struct ubifs_bud *bud;
|
|
int jhead;
|
|
|
|
if (!c->jheads)
|
|
return NULL;
|
|
|
|
spin_lock(&c->buds_lock);
|
|
p = c->buds.rb_node;
|
|
while (p) {
|
|
bud = rb_entry(p, struct ubifs_bud, rb);
|
|
if (lnum < bud->lnum)
|
|
p = p->rb_left;
|
|
else if (lnum > bud->lnum)
|
|
p = p->rb_right;
|
|
else {
|
|
jhead = bud->jhead;
|
|
spin_unlock(&c->buds_lock);
|
|
return &c->jheads[jhead].wbuf;
|
|
}
|
|
}
|
|
spin_unlock(&c->buds_lock);
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* empty_log_bytes - calculate amount of empty space in the log.
|
|
* @c: UBIFS file-system description object
|
|
*/
|
|
static inline long long empty_log_bytes(const struct ubifs_info *c)
|
|
{
|
|
long long h, t;
|
|
|
|
h = (long long)c->lhead_lnum * c->leb_size + c->lhead_offs;
|
|
t = (long long)c->ltail_lnum * c->leb_size;
|
|
|
|
if (h > t)
|
|
return c->log_bytes - h + t;
|
|
else if (h != t)
|
|
return t - h;
|
|
else if (c->lhead_lnum != c->ltail_lnum)
|
|
return 0;
|
|
else
|
|
return c->log_bytes;
|
|
}
|
|
|
|
/**
|
|
* ubifs_add_bud - add bud LEB to the tree of buds and its journal head list.
|
|
* @c: UBIFS file-system description object
|
|
* @bud: the bud to add
|
|
*/
|
|
void ubifs_add_bud(struct ubifs_info *c, struct ubifs_bud *bud)
|
|
{
|
|
struct rb_node **p, *parent = NULL;
|
|
struct ubifs_bud *b;
|
|
struct ubifs_jhead *jhead;
|
|
|
|
spin_lock(&c->buds_lock);
|
|
p = &c->buds.rb_node;
|
|
while (*p) {
|
|
parent = *p;
|
|
b = rb_entry(parent, struct ubifs_bud, rb);
|
|
ubifs_assert(bud->lnum != b->lnum);
|
|
if (bud->lnum < b->lnum)
|
|
p = &(*p)->rb_left;
|
|
else
|
|
p = &(*p)->rb_right;
|
|
}
|
|
|
|
rb_link_node(&bud->rb, parent, p);
|
|
rb_insert_color(&bud->rb, &c->buds);
|
|
if (c->jheads) {
|
|
jhead = &c->jheads[bud->jhead];
|
|
list_add_tail(&bud->list, &jhead->buds_list);
|
|
} else
|
|
ubifs_assert(c->replaying && c->ro_mount);
|
|
|
|
/*
|
|
* Note, although this is a new bud, we anyway account this space now,
|
|
* before any data has been written to it, because this is about to
|
|
* guarantee fixed mount time, and this bud will anyway be read and
|
|
* scanned.
|
|
*/
|
|
c->bud_bytes += c->leb_size - bud->start;
|
|
|
|
dbg_log("LEB %d:%d, jhead %s, bud_bytes %lld", bud->lnum,
|
|
bud->start, dbg_jhead(bud->jhead), c->bud_bytes);
|
|
spin_unlock(&c->buds_lock);
|
|
}
|
|
|
|
/**
|
|
* ubifs_add_bud_to_log - add a new bud to the log.
|
|
* @c: UBIFS file-system description object
|
|
* @jhead: journal head the bud belongs to
|
|
* @lnum: LEB number of the bud
|
|
* @offs: starting offset of the bud
|
|
*
|
|
* This function writes reference node for the new bud LEB @lnum it to the log,
|
|
* and adds it to the buds tress. It also makes sure that log size does not
|
|
* exceed the 'c->max_bud_bytes' limit. Returns zero in case of success,
|
|
* %-EAGAIN if commit is required, and a negative error codes in case of
|
|
* failure.
|
|
*/
|
|
int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)
|
|
{
|
|
int err;
|
|
struct ubifs_bud *bud;
|
|
struct ubifs_ref_node *ref;
|
|
|
|
bud = kmalloc(sizeof(struct ubifs_bud), GFP_NOFS);
|
|
if (!bud)
|
|
return -ENOMEM;
|
|
ref = kzalloc(c->ref_node_alsz, GFP_NOFS);
|
|
if (!ref) {
|
|
kfree(bud);
|
|
return -ENOMEM;
|
|
}
|
|
|
|
mutex_lock(&c->log_mutex);
|
|
ubifs_assert(!c->ro_media && !c->ro_mount);
|
|
if (c->ro_error) {
|
|
err = -EROFS;
|
|
goto out_unlock;
|
|
}
|
|
|
|
/* Make sure we have enough space in the log */
|
|
if (empty_log_bytes(c) - c->ref_node_alsz < c->min_log_bytes) {
|
|
dbg_log("not enough log space - %lld, required %d",
|
|
empty_log_bytes(c), c->min_log_bytes);
|
|
ubifs_commit_required(c);
|
|
err = -EAGAIN;
|
|
goto out_unlock;
|
|
}
|
|
|
|
/*
|
|
* Make sure the amount of space in buds will not exceed the
|
|
* 'c->max_bud_bytes' limit, because we want to guarantee mount time
|
|
* limits.
|
|
*
|
|
* It is not necessary to hold @c->buds_lock when reading @c->bud_bytes
|
|
* because we are holding @c->log_mutex. All @c->bud_bytes take place
|
|
* when both @c->log_mutex and @c->bud_bytes are locked.
|
|
*/
|
|
if (c->bud_bytes + c->leb_size - offs > c->max_bud_bytes) {
|
|
dbg_log("bud bytes %lld (%lld max), require commit",
|
|
c->bud_bytes, c->max_bud_bytes);
|
|
ubifs_commit_required(c);
|
|
err = -EAGAIN;
|
|
goto out_unlock;
|
|
}
|
|
|
|
/*
|
|
* If the journal is full enough - start background commit. Note, it is
|
|
* OK to read 'c->cmt_state' without spinlock because integer reads
|
|
* are atomic in the kernel.
|
|
*/
|
|
if (c->bud_bytes >= c->bg_bud_bytes &&
|
|
c->cmt_state == COMMIT_RESTING) {
|
|
dbg_log("bud bytes %lld (%lld max), initiate BG commit",
|
|
c->bud_bytes, c->max_bud_bytes);
|
|
ubifs_request_bg_commit(c);
|
|
}
|
|
|
|
bud->lnum = lnum;
|
|
bud->start = offs;
|
|
bud->jhead = jhead;
|
|
|
|
ref->ch.node_type = UBIFS_REF_NODE;
|
|
ref->lnum = cpu_to_le32(bud->lnum);
|
|
ref->offs = cpu_to_le32(bud->start);
|
|
ref->jhead = cpu_to_le32(jhead);
|
|
|
|
if (c->lhead_offs > c->leb_size - c->ref_node_alsz) {
|
|
c->lhead_lnum = ubifs_next_log_lnum(c, c->lhead_lnum);
|
|
c->lhead_offs = 0;
|
|
}
|
|
|
|
if (c->lhead_offs == 0) {
|
|
/* Must ensure next log LEB has been unmapped */
|
|
err = ubifs_leb_unmap(c, c->lhead_lnum);
|
|
if (err)
|
|
goto out_unlock;
|
|
}
|
|
|
|
if (bud->start == 0) {
|
|
/*
|
|
* Before writing the LEB reference which refers an empty LEB
|
|
* to the log, we have to make sure it is mapped, because
|
|
* otherwise we'd risk to refer an LEB with garbage in case of
|
|
* an unclean reboot, because the target LEB might have been
|
|
* unmapped, but not yet physically erased.
|
|
*/
|
|
err = ubifs_leb_map(c, bud->lnum);
|
|
if (err)
|
|
goto out_unlock;
|
|
}
|
|
|
|
dbg_log("write ref LEB %d:%d",
|
|
c->lhead_lnum, c->lhead_offs);
|
|
err = ubifs_write_node(c, ref, UBIFS_REF_NODE_SZ, c->lhead_lnum,
|
|
c->lhead_offs);
|
|
if (err)
|
|
goto out_unlock;
|
|
|
|
c->lhead_offs += c->ref_node_alsz;
|
|
|
|
ubifs_add_bud(c, bud);
|
|
|
|
mutex_unlock(&c->log_mutex);
|
|
kfree(ref);
|
|
return 0;
|
|
|
|
out_unlock:
|
|
mutex_unlock(&c->log_mutex);
|
|
kfree(ref);
|
|
kfree(bud);
|
|
return err;
|
|
}
|
|
|
|
/**
|
|
* remove_buds - remove used buds.
|
|
* @c: UBIFS file-system description object
|
|
*
|
|
* This function removes use buds from the buds tree. It does not remove the
|
|
* buds which are pointed to by journal heads.
|
|
*/
|
|
static void remove_buds(struct ubifs_info *c)
|
|
{
|
|
struct rb_node *p;
|
|
|
|
ubifs_assert(list_empty(&c->old_buds));
|
|
c->cmt_bud_bytes = 0;
|
|
spin_lock(&c->buds_lock);
|
|
p = rb_first(&c->buds);
|
|
while (p) {
|
|
struct rb_node *p1 = p;
|
|
struct ubifs_bud *bud;
|
|
struct ubifs_wbuf *wbuf;
|
|
|
|
p = rb_next(p);
|
|
bud = rb_entry(p1, struct ubifs_bud, rb);
|
|
wbuf = &c->jheads[bud->jhead].wbuf;
|
|
|
|
if (wbuf->lnum == bud->lnum) {
|
|
/*
|
|
* Do not remove buds which are pointed to by journal
|
|
* heads (non-closed buds).
|
|
*/
|
|
c->cmt_bud_bytes += wbuf->offs - bud->start;
|
|
dbg_log("preserve %d:%d, jhead %s, bud bytes %d, cmt_bud_bytes %lld",
|
|
bud->lnum, bud->start, dbg_jhead(bud->jhead),
|
|
wbuf->offs - bud->start, c->cmt_bud_bytes);
|
|
bud->start = wbuf->offs;
|
|
} else {
|
|
c->cmt_bud_bytes += c->leb_size - bud->start;
|
|
dbg_log("remove %d:%d, jhead %s, bud bytes %d, cmt_bud_bytes %lld",
|
|
bud->lnum, bud->start, dbg_jhead(bud->jhead),
|
|
c->leb_size - bud->start, c->cmt_bud_bytes);
|
|
rb_erase(p1, &c->buds);
|
|
/*
|
|
* If the commit does not finish, the recovery will need
|
|
* to replay the journal, in which case the old buds
|
|
* must be unchanged. Do not release them until post
|
|
* commit i.e. do not allow them to be garbage
|
|
* collected.
|
|
*/
|
|
list_move(&bud->list, &c->old_buds);
|
|
}
|
|
}
|
|
spin_unlock(&c->buds_lock);
|
|
}
|
|
|
|
/**
|
|
* ubifs_log_start_commit - start commit.
|
|
* @c: UBIFS file-system description object
|
|
* @ltail_lnum: return new log tail LEB number
|
|
*
|
|
* The commit operation starts with writing "commit start" node to the log and
|
|
* reference nodes for all journal heads which will define new journal after
|
|
* the commit has been finished. The commit start and reference nodes are
|
|
* written in one go to the nearest empty log LEB (hence, when commit is
|
|
* finished UBIFS may safely unmap all the previous log LEBs). This function
|
|
* returns zero in case of success and a negative error code in case of
|
|
* failure.
|
|
*/
|
|
int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum)
|
|
{
|
|
void *buf;
|
|
struct ubifs_cs_node *cs;
|
|
struct ubifs_ref_node *ref;
|
|
int err, i, max_len, len;
|
|
|
|
err = dbg_check_bud_bytes(c);
|
|
if (err)
|
|
return err;
|
|
|
|
max_len = UBIFS_CS_NODE_SZ + c->jhead_cnt * UBIFS_REF_NODE_SZ;
|
|
max_len = ALIGN(max_len, c->min_io_size);
|
|
buf = cs = kmalloc(max_len, GFP_NOFS);
|
|
if (!buf)
|
|
return -ENOMEM;
|
|
|
|
cs->ch.node_type = UBIFS_CS_NODE;
|
|
cs->cmt_no = cpu_to_le64(c->cmt_no);
|
|
ubifs_prepare_node(c, cs, UBIFS_CS_NODE_SZ, 0);
|
|
|
|
/*
|
|
* Note, we do not lock 'c->log_mutex' because this is the commit start
|
|
* phase and we are exclusively using the log. And we do not lock
|
|
* write-buffer because nobody can write to the file-system at this
|
|
* phase.
|
|
*/
|
|
|
|
len = UBIFS_CS_NODE_SZ;
|
|
for (i = 0; i < c->jhead_cnt; i++) {
|
|
int lnum = c->jheads[i].wbuf.lnum;
|
|
int offs = c->jheads[i].wbuf.offs;
|
|
|
|
if (lnum == -1 || offs == c->leb_size)
|
|
continue;
|
|
|
|
dbg_log("add ref to LEB %d:%d for jhead %s",
|
|
lnum, offs, dbg_jhead(i));
|
|
ref = buf + len;
|
|
ref->ch.node_type = UBIFS_REF_NODE;
|
|
ref->lnum = cpu_to_le32(lnum);
|
|
ref->offs = cpu_to_le32(offs);
|
|
ref->jhead = cpu_to_le32(i);
|
|
|
|
ubifs_prepare_node(c, ref, UBIFS_REF_NODE_SZ, 0);
|
|
len += UBIFS_REF_NODE_SZ;
|
|
}
|
|
|
|
ubifs_pad(c, buf + len, ALIGN(len, c->min_io_size) - len);
|
|
|
|
/* Switch to the next log LEB */
|
|
if (c->lhead_offs) {
|
|
c->lhead_lnum = ubifs_next_log_lnum(c, c->lhead_lnum);
|
|
c->lhead_offs = 0;
|
|
}
|
|
|
|
if (c->lhead_offs == 0) {
|
|
/* Must ensure next LEB has been unmapped */
|
|
err = ubifs_leb_unmap(c, c->lhead_lnum);
|
|
if (err)
|
|
goto out;
|
|
}
|
|
|
|
len = ALIGN(len, c->min_io_size);
|
|
dbg_log("writing commit start at LEB %d:0, len %d", c->lhead_lnum, len);
|
|
err = ubifs_leb_write(c, c->lhead_lnum, cs, 0, len);
|
|
if (err)
|
|
goto out;
|
|
|
|
*ltail_lnum = c->lhead_lnum;
|
|
|
|
c->lhead_offs += len;
|
|
if (c->lhead_offs == c->leb_size) {
|
|
c->lhead_lnum = ubifs_next_log_lnum(c, c->lhead_lnum);
|
|
c->lhead_offs = 0;
|
|
}
|
|
|
|
remove_buds(c);
|
|
|
|
/*
|
|
* We have started the commit and now users may use the rest of the log
|
|
* for new writes.
|
|
*/
|
|
c->min_log_bytes = 0;
|
|
|
|
out:
|
|
kfree(buf);
|
|
return err;
|
|
}
|
|
|
|
/**
|
|
* ubifs_log_end_commit - end commit.
|
|
* @c: UBIFS file-system description object
|
|
* @ltail_lnum: new log tail LEB number
|
|
*
|
|
* This function is called on when the commit operation was finished. It
|
|
* moves log tail to new position and updates the master node so that it stores
|
|
* the new log tail LEB number. Returns zero in case of success and a negative
|
|
* error code in case of failure.
|
|
*/
|
|
int ubifs_log_end_commit(struct ubifs_info *c, int ltail_lnum)
|
|
{
|
|
int err;
|
|
|
|
/*
|
|
* At this phase we have to lock 'c->log_mutex' because UBIFS allows FS
|
|
* writes during commit. Its only short "commit" start phase when
|
|
* writers are blocked.
|
|
*/
|
|
mutex_lock(&c->log_mutex);
|
|
|
|
dbg_log("old tail was LEB %d:0, new tail is LEB %d:0",
|
|
c->ltail_lnum, ltail_lnum);
|
|
|
|
c->ltail_lnum = ltail_lnum;
|
|
/*
|
|
* The commit is finished and from now on it must be guaranteed that
|
|
* there is always enough space for the next commit.
|
|
*/
|
|
c->min_log_bytes = c->leb_size;
|
|
|
|
spin_lock(&c->buds_lock);
|
|
c->bud_bytes -= c->cmt_bud_bytes;
|
|
spin_unlock(&c->buds_lock);
|
|
|
|
err = dbg_check_bud_bytes(c);
|
|
if (err)
|
|
goto out;
|
|
|
|
err = ubifs_write_master(c);
|
|
|
|
out:
|
|
mutex_unlock(&c->log_mutex);
|
|
return err;
|
|
}
|
|
|
|
/**
|
|
* ubifs_log_post_commit - things to do after commit is completed.
|
|
* @c: UBIFS file-system description object
|
|
* @old_ltail_lnum: old log tail LEB number
|
|
*
|
|
* Release buds only after commit is completed, because they must be unchanged
|
|
* if recovery is needed.
|
|
*
|
|
* Unmap log LEBs only after commit is completed, because they may be needed for
|
|
* recovery.
|
|
*
|
|
* This function returns %0 on success and a negative error code on failure.
|
|
*/
|
|
int ubifs_log_post_commit(struct ubifs_info *c, int old_ltail_lnum)
|
|
{
|
|
int lnum, err = 0;
|
|
|
|
while (!list_empty(&c->old_buds)) {
|
|
struct ubifs_bud *bud;
|
|
|
|
bud = list_entry(c->old_buds.next, struct ubifs_bud, list);
|
|
err = ubifs_return_leb(c, bud->lnum);
|
|
if (err)
|
|
return err;
|
|
list_del(&bud->list);
|
|
kfree(bud);
|
|
}
|
|
mutex_lock(&c->log_mutex);
|
|
for (lnum = old_ltail_lnum; lnum != c->ltail_lnum;
|
|
lnum = ubifs_next_log_lnum(c, lnum)) {
|
|
dbg_log("unmap log LEB %d", lnum);
|
|
err = ubifs_leb_unmap(c, lnum);
|
|
if (err)
|
|
goto out;
|
|
}
|
|
out:
|
|
mutex_unlock(&c->log_mutex);
|
|
return err;
|
|
}
|
|
|
|
/**
|
|
* struct done_ref - references that have been done.
|
|
* @rb: rb-tree node
|
|
* @lnum: LEB number
|
|
*/
|
|
struct done_ref {
|
|
struct rb_node rb;
|
|
int lnum;
|
|
};
|
|
|
|
/**
|
|
* done_already - determine if a reference has been done already.
|
|
* @done_tree: rb-tree to store references that have been done
|
|
* @lnum: LEB number of reference
|
|
*
|
|
* This function returns %1 if the reference has been done, %0 if not, otherwise
|
|
* a negative error code is returned.
|
|
*/
|
|
static int done_already(struct rb_root *done_tree, int lnum)
|
|
{
|
|
struct rb_node **p = &done_tree->rb_node, *parent = NULL;
|
|
struct done_ref *dr;
|
|
|
|
while (*p) {
|
|
parent = *p;
|
|
dr = rb_entry(parent, struct done_ref, rb);
|
|
if (lnum < dr->lnum)
|
|
p = &(*p)->rb_left;
|
|
else if (lnum > dr->lnum)
|
|
p = &(*p)->rb_right;
|
|
else
|
|
return 1;
|
|
}
|
|
|
|
dr = kzalloc(sizeof(struct done_ref), GFP_NOFS);
|
|
if (!dr)
|
|
return -ENOMEM;
|
|
|
|
dr->lnum = lnum;
|
|
|
|
rb_link_node(&dr->rb, parent, p);
|
|
rb_insert_color(&dr->rb, done_tree);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* destroy_done_tree - destroy the done tree.
|
|
* @done_tree: done tree to destroy
|
|
*/
|
|
static void destroy_done_tree(struct rb_root *done_tree)
|
|
{
|
|
struct rb_node *this = done_tree->rb_node;
|
|
struct done_ref *dr;
|
|
|
|
while (this) {
|
|
if (this->rb_left) {
|
|
this = this->rb_left;
|
|
continue;
|
|
} else if (this->rb_right) {
|
|
this = this->rb_right;
|
|
continue;
|
|
}
|
|
dr = rb_entry(this, struct done_ref, rb);
|
|
this = rb_parent(this);
|
|
if (this) {
|
|
if (this->rb_left == &dr->rb)
|
|
this->rb_left = NULL;
|
|
else
|
|
this->rb_right = NULL;
|
|
}
|
|
kfree(dr);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* add_node - add a node to the consolidated log.
|
|
* @c: UBIFS file-system description object
|
|
* @buf: buffer to which to add
|
|
* @lnum: LEB number to which to write is passed and returned here
|
|
* @offs: offset to where to write is passed and returned here
|
|
* @node: node to add
|
|
*
|
|
* This function returns %0 on success and a negative error code on failure.
|
|
*/
|
|
static int add_node(struct ubifs_info *c, void *buf, int *lnum, int *offs,
|
|
void *node)
|
|
{
|
|
struct ubifs_ch *ch = node;
|
|
int len = le32_to_cpu(ch->len), remains = c->leb_size - *offs;
|
|
|
|
if (len > remains) {
|
|
int sz = ALIGN(*offs, c->min_io_size), err;
|
|
|
|
ubifs_pad(c, buf + *offs, sz - *offs);
|
|
err = ubifs_leb_change(c, *lnum, buf, sz);
|
|
if (err)
|
|
return err;
|
|
*lnum = ubifs_next_log_lnum(c, *lnum);
|
|
*offs = 0;
|
|
}
|
|
memcpy(buf + *offs, node, len);
|
|
*offs += ALIGN(len, 8);
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* ubifs_consolidate_log - consolidate the log.
|
|
* @c: UBIFS file-system description object
|
|
*
|
|
* Repeated failed commits could cause the log to be full, but at least 1 LEB is
|
|
* needed for commit. This function rewrites the reference nodes in the log
|
|
* omitting duplicates, and failed CS nodes, and leaving no gaps.
|
|
*
|
|
* This function returns %0 on success and a negative error code on failure.
|
|
*/
|
|
int ubifs_consolidate_log(struct ubifs_info *c)
|
|
{
|
|
struct ubifs_scan_leb *sleb;
|
|
struct ubifs_scan_node *snod;
|
|
struct rb_root done_tree = RB_ROOT;
|
|
int lnum, err, first = 1, write_lnum, offs = 0;
|
|
void *buf;
|
|
|
|
dbg_rcvry("log tail LEB %d, log head LEB %d", c->ltail_lnum,
|
|
c->lhead_lnum);
|
|
buf = vmalloc(c->leb_size);
|
|
if (!buf)
|
|
return -ENOMEM;
|
|
lnum = c->ltail_lnum;
|
|
write_lnum = lnum;
|
|
while (1) {
|
|
sleb = ubifs_scan(c, lnum, 0, c->sbuf, 0);
|
|
if (IS_ERR(sleb)) {
|
|
err = PTR_ERR(sleb);
|
|
goto out_free;
|
|
}
|
|
list_for_each_entry(snod, &sleb->nodes, list) {
|
|
switch (snod->type) {
|
|
case UBIFS_REF_NODE: {
|
|
struct ubifs_ref_node *ref = snod->node;
|
|
int ref_lnum = le32_to_cpu(ref->lnum);
|
|
|
|
err = done_already(&done_tree, ref_lnum);
|
|
if (err < 0)
|
|
goto out_scan;
|
|
if (err != 1) {
|
|
err = add_node(c, buf, &write_lnum,
|
|
&offs, snod->node);
|
|
if (err)
|
|
goto out_scan;
|
|
}
|
|
break;
|
|
}
|
|
case UBIFS_CS_NODE:
|
|
if (!first)
|
|
break;
|
|
err = add_node(c, buf, &write_lnum, &offs,
|
|
snod->node);
|
|
if (err)
|
|
goto out_scan;
|
|
first = 0;
|
|
break;
|
|
}
|
|
}
|
|
ubifs_scan_destroy(sleb);
|
|
if (lnum == c->lhead_lnum)
|
|
break;
|
|
lnum = ubifs_next_log_lnum(c, lnum);
|
|
}
|
|
if (offs) {
|
|
int sz = ALIGN(offs, c->min_io_size);
|
|
|
|
ubifs_pad(c, buf + offs, sz - offs);
|
|
err = ubifs_leb_change(c, write_lnum, buf, sz);
|
|
if (err)
|
|
goto out_free;
|
|
offs = ALIGN(offs, c->min_io_size);
|
|
}
|
|
destroy_done_tree(&done_tree);
|
|
vfree(buf);
|
|
if (write_lnum == c->lhead_lnum) {
|
|
ubifs_err("log is too full", c->vi.ubi_num);
|
|
return -EINVAL;
|
|
}
|
|
/* Unmap remaining LEBs */
|
|
lnum = write_lnum;
|
|
do {
|
|
lnum = ubifs_next_log_lnum(c, lnum);
|
|
err = ubifs_leb_unmap(c, lnum);
|
|
if (err)
|
|
return err;
|
|
} while (lnum != c->lhead_lnum);
|
|
c->lhead_lnum = write_lnum;
|
|
c->lhead_offs = offs;
|
|
dbg_rcvry("new log head at %d:%d", c->lhead_lnum, c->lhead_offs);
|
|
return 0;
|
|
|
|
out_scan:
|
|
ubifs_scan_destroy(sleb);
|
|
out_free:
|
|
destroy_done_tree(&done_tree);
|
|
vfree(buf);
|
|
return err;
|
|
}
|
|
|
|
/**
|
|
* dbg_check_bud_bytes - make sure bud bytes calculation are all right.
|
|
* @c: UBIFS file-system description object
|
|
*
|
|
* This function makes sure the amount of flash space used by closed buds
|
|
* ('c->bud_bytes' is correct). Returns zero in case of success and %-EINVAL in
|
|
* case of failure.
|
|
*/
|
|
static int dbg_check_bud_bytes(struct ubifs_info *c)
|
|
{
|
|
int i, err = 0;
|
|
struct ubifs_bud *bud;
|
|
long long bud_bytes = 0;
|
|
|
|
if (!dbg_is_chk_gen(c))
|
|
return 0;
|
|
|
|
spin_lock(&c->buds_lock);
|
|
for (i = 0; i < c->jhead_cnt; i++)
|
|
list_for_each_entry(bud, &c->jheads[i].buds_list, list)
|
|
bud_bytes += c->leb_size - bud->start;
|
|
|
|
if (c->bud_bytes != bud_bytes) {
|
|
ubifs_err("bad bud_bytes %lld, calculated %lld", c->vi.ubi_num,
|
|
c->bud_bytes, bud_bytes);
|
|
err = -EINVAL;
|
|
}
|
|
spin_unlock(&c->buds_lock);
|
|
|
|
return err;
|
|
}
|