Merge tag 'for-linus' of git://github.com/prasad-joshi/logfs_upstream
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 31 Jan 2012 17:23:59 +0000 (09:23 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 31 Jan 2012 17:23:59 +0000 (09:23 -0800)
There are few important bug fixes for LogFS

* tag 'for-linus' of git://github.com/prasad-joshi/logfs_upstream:
  Logfs: Allow NULL block_isbad() methods
  logfs: Grow inode in delete path
  logfs: Free areas before calling generic_shutdown_super()
  logfs: remove useless BUG_ON
  MAINTAINERS: Add Prasad Joshi in LogFS maintiners
  logfs: Propagate page parameter to __logfs_write_inode
  logfs: set superblock shutdown flag after generic sb shutdown
  logfs: take write mutex lock during fsync and sync
  logfs: Prevent memory corruption
  logfs: update page reference count for pined pages

Fix up conflict in fs/logfs/dev_mtd.c due to semantic change in what
"mtd->block_isbad" means in commit f2933e86ad93: "Logfs: Allow NULL
block_isbad() methods" clashing with the abstraction changes in the
commits 7086c19d0742: "mtd: introduce mtd_block_isbad interface" and
d58b27ed58a3: "logfs: do not use 'mtd->block_isbad' directly".

This resolution takes the semantics from commit f2933e86ad93, and just
makes mtd_block_isbad() return zero (false) if the 'block_isbad'
function is NULL.  But that also means that now "mtd_can_have_bb()"
always returns 0.

Now, "mtd_block_markbad()" will obviously return an error if the
low-level driver doesn't support bad blocks, so this is somewhat
non-symmetric, but it actually makes sense if a NULL "block_isbad"
function is considered to mean "I assume that all my blocks are always
good".

1  2 
MAINTAINERS
fs/logfs/dir.c
fs/logfs/inode.c
fs/logfs/logfs.h
include/linux/mtd/mtd.h

diff --combined MAINTAINERS
index 6803338dc88504fb890c8438bc1868efabf80b64,ce7029b79cf56fe92d5614efa4cc269dbfbc95be..a1fce9a3ab207938fba0cbd08fa59c9eaf724a08
@@@ -184,6 -184,11 +184,6 @@@ S:        Maintaine
  F:    Documentation/filesystems/9p.txt
  F:    fs/9p/
  
 -A2232 SERIAL BOARD DRIVER
 -L:    linux-m68k@lists.linux-m68k.org
 -S:    Orphan
 -F:    drivers/staging/generic_serial/ser_a2232*
 -
  AACRAID SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@adaptec.com>
  L:    linux-scsi@vger.kernel.org
@@@ -342,7 -347,7 +342,7 @@@ S: Supporte
  F:    drivers/mfd/adp5520.c
  F:    drivers/video/backlight/adp5520_bl.c
  F:    drivers/leds/leds-adp5520.c
 -F:    drivers/gpio/adp5520-gpio.c
 +F:    drivers/gpio/gpio-adp5520.c
  F:    drivers/input/keyboard/adp5520-keys.c
  
  ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
@@@ -351,7 -356,7 +351,7 @@@ L: device-drivers-devel@blackfin.uclinu
  W:    http://wiki.analog.com/ADP5588
  S:    Supported
  F:    drivers/input/keyboard/adp5588-keys.c
 -F:    drivers/gpio/adp5588-gpio.c
 +F:    drivers/gpio/gpio-adp5588.c
  
  ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
  M:    Michael Hennerich <michael.hennerich@analog.com>
@@@ -537,7 -542,6 +537,7 @@@ F: sound/soc/codecs/adau
  F:    sound/soc/codecs/adav*
  F:    sound/soc/codecs/ad1*
  F:    sound/soc/codecs/ssm*
 +F:    sound/soc/codecs/sigmadsp.*
  
  ANALOG DEVICES INC ASOC DRIVERS
  L:    uclinux-dist-devel@blackfin.uclinux.org
@@@ -745,7 -749,6 +745,7 @@@ M: Barry Song <baohua.song@csr.com
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-prima2/
 +F:    drivers/dma/sirf-dma*
  
  ARM/EBSA110 MACHINE SUPPORT
  M:    Russell King <linux@arm.linux.org.uk>
@@@ -916,6 -919,7 +916,6 @@@ M: Lennert Buytenhek <kernel@wantstofly
  M:    Nicolas Pitre <nico@fluxnic.net>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Odd Fixes
 -F:    arch/arm/mach-loki/
  F:    arch/arm/mach-kirkwood/
  F:    arch/arm/mach-mv78xx0/
  F:    arch/arm/mach-orion5x/
@@@ -1077,8 -1081,8 +1077,8 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/mach-s5pv210/mach-aquila.c
  F:    arch/arm/mach-s5pv210/mach-goni.c
 -F:    arch/arm/mach-exynos4/mach-universal_c210.c
 -F:    arch/arm/mach-exynos4/mach-nuri.c
 +F:    arch/arm/mach-exynos/mach-universal_c210.c
 +F:    arch/arm/mach-exynos/mach-nuri.c
  
  ARM/SAMSUNG S5P SERIES FIMC SUPPORT
  M:    Kyungmin Park <kyungmin.park@samsung.com>
@@@ -1106,6 -1110,7 +1106,6 @@@ M:      Tomasz Stanislawski <t.stanislaws@sa
  L:    linux-arm-kernel@lists.infradead.org
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    arch/arm/plat-s5p/dev-tv.c
  F:    drivers/media/video/s5p-tv/
  
  ARM/SHMOBILE ARM ARCHITECTURE
@@@ -1119,6 -1124,13 +1119,6 @@@ S:     Supporte
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
  
 -ARM/TELECHIPS ARM ARCHITECTURE
 -M:    "Hans J. Koch" <hjk@hansjkoch.de>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/plat-tcc/
 -F:    arch/arm/mach-tcc8k/
 -
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1140,13 -1152,14 +1140,13 @@@ L:   linux-arm-kernel@lists.infradead.or
  W:    http://www.mcuos.com
  S:    Maintained
  F:    arch/arm/mach-w90x900/
 -F:    arch/arm/mach-nuc93x/
  F:    drivers/input/keyboard/w90p910_keypad.c
  F:    drivers/input/touchscreen/w90p910_ts.c
  F:    drivers/watchdog/nuc900_wdt.c
  F:    drivers/net/ethernet/nuvoton/w90p910_ether.c
  F:    drivers/mtd/nand/nuc900_nand.c
  F:    drivers/rtc/rtc-nuc900.c
 -F:    drivers/spi/spi_nuc900.c
 +F:    drivers/spi/spi-nuc900.c
  F:    drivers/usb/host/ehci-w90x900.c
  F:    drivers/video/nuc900fb.c
  
@@@ -1171,6 -1184,7 +1171,6 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/mach-ux500/
  F:    drivers/dma/ste_dma40*
 -F:    drivers/mfd/ab3550*
  F:    drivers/mfd/abx500*
  F:    drivers/mfd/ab8500*
  F:    drivers/mfd/stmpe*
@@@ -1350,7 -1364,7 +1350,7 @@@ F:      drivers/net/ethernet/cadence
  ATMEL SPI DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
 -F:    drivers/spi/atmel_spi.*
 +F:    drivers/spi/spi-atmel.*
  
  ATMEL USBA UDC DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -1412,7 -1426,6 +1412,7 @@@ F:      net/ax25
  B43 WIRELESS DRIVER
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
 +L:    b43-dev@lists.infradead.org (moderated for non-subscribers)
  W:    http://linuxwireless.org/en/users/Drivers/b43
  S:    Maintained
  F:    drivers/net/wireless/b43/
@@@ -1490,7 -1503,7 +1490,7 @@@ M:      Sonic Zhang <sonic.zhang@analog.com
  L:    uclinux-dist-devel@blackfin.uclinux.org
  W:    http://blackfin.uclinux.org
  S:    Supported
 -F:    drivers/tty/serial/bfin_5xx.c
 +F:    drivers/tty/serial/bfin_uart.c
  
  BLACKFIN WATCHDOG DRIVER
  M:    Mike Frysinger <vapier.adi@gmail.com>
@@@ -1581,7 -1594,7 +1581,7 @@@ M:      Franky (Zhenhui) Lin <frankyl@broadc
  M:    Kan Yan <kanyan@broadcom.com>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
 -F:    drivers/staging/brcm80211/
 +F:    drivers/net/wireless/brcm80211/
  
  BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER
  M:    Bhanu Prakash Gollapudi <bprakash@broadcom.com>
@@@ -1589,13 -1602,6 +1589,13 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/bnx2fc/
  
 +BROADCOM SPECIFIC AMBA DRIVER (BCMA)
 +M:    Rafał Miłecki <zajec5@gmail.com>
 +L:    linux-wireless@vger.kernel.org
 +S:    Maintained
 +F:    drivers/bcma/
 +F:    include/linux/bcma/
 +
  BROCADE BFA FC SCSI DRIVER
  M:    Jing Huang <huangj@brocade.com>
  L:    linux-scsi@vger.kernel.org
@@@ -1627,7 -1633,7 +1627,7 @@@ BT8XXGPIO DRIVE
  M:    Michael Buesch <m@bues.ch>
  W:    http://bu3sch.de/btgpio.php
  S:    Maintained
 -F:    drivers/gpio/bt8xxgpio.c
 +F:    drivers/gpio/gpio-bt8xx.c
  
  BTRFS FILE SYSTEM
  M:    Chris Mason <chris.mason@oracle.com>
@@@ -1655,14 -1661,6 +1655,14 @@@ T:    git git://git.alsa-project.org/alsa-
  S:    Maintained
  F:    sound/pci/oxygen/
  
 +C6X ARCHITECTURE
 +M:    Mark Salter <msalter@redhat.com>
 +M:    Aurelien Jacquiot <a-jacquiot@ti.com>
 +L:    linux-c6x-dev@linux-c6x.org
 +W:    http://www.linux-c6x.org/wiki/index.php/Main_Page
 +S:    Maintained
 +F:    arch/c6x/
 +
  CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
  M:    David Howells <dhowells@redhat.com>
  L:    linux-cachefs@redhat.com
@@@ -1676,7 -1674,7 +1676,7 @@@ L:      linux-media@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
  S:    Maintained
  F:    Documentation/video4linux/cafe_ccic
 -F:    drivers/media/video/cafe_ccic*
 +F:    drivers/media/video/marvell-ccic/
  
  CAIF NETWORK LAYER
  M:    Sjur Braendeland <sjur.brandeland@stericsson.com>
@@@ -1700,9 -1698,11 +1700,9 @@@ F:     arch/x86/include/asm/tce.
  
  CAN NETWORK LAYER
  M:    Oliver Hartkopp <socketcan@hartkopp.net>
 -M:    Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
 -M:    Urs Thuermann <urs.thuermann@volkswagen.de>
  L:    linux-can@vger.kernel.org
 -L:    netdev@vger.kernel.org
 -W:    http://developer.berlios.de/projects/socketcan/
 +W:    http://gitorious.org/linux-can
 +T:    git git://gitorious.org/linux-can/linux-can-next.git
  S:    Maintained
  F:    net/can/
  F:    include/linux/can.h
@@@ -1713,10 -1713,9 +1713,10 @@@ F:    include/linux/can/gw.
  
  CAN NETWORK DRIVERS
  M:    Wolfgang Grandegger <wg@grandegger.com>
 +M:    Marc Kleine-Budde <mkl@pengutronix.de>
  L:    linux-can@vger.kernel.org
 -L:    netdev@vger.kernel.org
 -W:    http://developer.berlios.de/projects/socketcan/
 +W:    http://gitorious.org/linux-can
 +T:    git git://gitorious.org/linux-can/linux-can-next.git
  S:    Maintained
  F:    drivers/net/can/
  F:    include/linux/can/dev.h
@@@ -1900,6 -1899,12 +1900,6 @@@ L:     platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/compal-laptop.c
  
 -COMPUTONE INTELLIPORT MULTIPORT CARD
 -W:    http://www.wittsend.com/computone.html
 -S:    Orphan
 -F:    Documentation/serial/computone.txt
 -F:    drivers/staging/tty/ip2/
 -
  CONEXANT ACCESSRUNNER USB DRIVER
  M:    Simon Arlott <cxacru@fire.lp0.eu>
  L:    accessrunner-general@lists.sourceforge.net
@@@ -2114,7 -2119,7 +2114,7 @@@ DAVICOM FAST ETHERNET (DMFE) NETWORK DR
  L:    netdev@vger.kernel.org
  S:    Orphan
  F:    Documentation/networking/dmfe.txt
 -F:    drivers/net/ethernet/tulip/dmfe.c
 +F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
  M:    Kurt Garloff <garloff@suse.de>
@@@ -2187,13 -2192,6 +2187,13 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/usb/dwc3/
  
 +DEVICE FREQUENCY (DEVFREQ)
 +M:    MyungJoo Ham <myungjoo.ham@samsung.com>
 +M:    Kyungmin Park <kyungmin.park@samsung.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/devfreq/
 +
  DEVICE NUMBER REGISTRY
  M:    Torben Mathiasen <device@lanana.org>
  W:    http://lanana.org/docs/device-list/index.html
@@@ -2210,6 -2208,15 +2210,6 @@@ F:     drivers/md/dm
  F:    include/linux/device-mapper.h
  F:    include/linux/dm-*.h
  
 -DIGI INTL. EPCA DRIVER
 -M:    "Digi International, Inc" <Eng.Linux@digi.com>
 -L:    Eng.Linux@digi.com
 -W:    http://www.digi.com
 -S:    Orphan
 -F:    Documentation/serial/digiepca.txt
 -F:    drivers/staging/tty/epca*
 -F:    drivers/staging/tty/digi*
 -
  DIOLAN U2C-12 I2C DRIVER
  M:    Guenter Roeck <guenter.roeck@ericsson.com>
  L:    linux-i2c@vger.kernel.org
@@@ -2246,17 -2253,6 +2246,17 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    fs/dlm/
  
 +DMA BUFFER SHARING FRAMEWORK
 +M:    Sumit Semwal <sumit.semwal@linaro.org>
 +S:    Maintained
 +L:    linux-media@vger.kernel.org
 +L:    dri-devel@lists.freedesktop.org
 +L:    linaro-mm-sig@lists.linaro.org
 +F:    drivers/base/dma-buf*
 +F:    include/linux/dma-buf*
 +F:    Documentation/dma-buf-sharing.txt
 +T:    git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git
 +
  DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
  M:    Vinod Koul <vinod.koul@intel.com>
  M:    Dan Williams <dan.j.williams@intel.com>
@@@ -2350,9 -2346,6 +2350,9 @@@ F:      include/drm/i915
  
  DRM DRIVERS FOR EXYNOS
  M:    Inki Dae <inki.dae@samsung.com>
 +M:    Joonyoung Shim <jy0922.shim@samsung.com>
 +M:    Seung-Woo Kim <sw0312.kim@samsung.com>
 +M:    Kyungmin Park <kyungmin.park@samsung.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  F:    drivers/gpu/drm/exynos
@@@ -2405,7 -2398,7 +2405,7 @@@ F:      net/bridge/netfilter/ebt*.
  
  ECRYPT FILE SYSTEM
  M:    Tyler Hicks <tyhicks@canonical.com>
 -M:    Dustin Kirkland <kirkland@canonical.com>
 +M:    Dustin Kirkland <dustin.kirkland@gazzang.com>
  L:    ecryptfs@vger.kernel.org
  W:    https://launchpad.net/ecryptfs
  S:    Supported
@@@ -2844,14 -2837,6 +2844,14 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/fujitsu-laptop.c
  
 +FUJITSU M-5MO LS CAMERA ISP DRIVER
 +M:    Kyungmin Park <kyungmin.park@samsung.com>
 +M:    Heungjun Kim <riverful.kim@samsung.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/video/m5mols/
 +F:    include/media/m5mols.h
 +
  FUSE: FILESYSTEM IN USERSPACE
  M:    Miklos Szeredi <miklos@szeredi.hu>
  L:    fuse-devel@lists.sourceforge.net
@@@ -2935,7 -2920,6 +2935,7 @@@ F:      include/linux/gigaset_dev.
  
  GPIO SUBSYSTEM
  M:    Grant Likely <grant.likely@secretlab.ca>
 +M:    Linus Walleij <linus.walleij@stericsson.com>
  S:    Maintained
  T:    git git://git.secretlab.ca/git/linux-2.6.git
  F:    Documentation/gpio.txt
@@@ -2953,7 -2937,7 +2953,7 @@@ GRETH 10/100/1G Ethernet MAC device dri
  M:    Kristoffer Glembo <kristoffer@gaisler.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/greth*
 +F:    drivers/net/ethernet/aeroflex/
  
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
@@@ -3205,16 -3189,6 +3205,16 @@@ M:    William Irwin <wli@holomorphy.com
  S:    Maintained
  F:    fs/hugetlbfs/
  
 +Hyper-V CORE AND DRIVERS
 +M:    K. Y. Srinivasan <kys@microsoft.com>
 +M:    Haiyang Zhang <haiyangz@microsoft.com>
 +L:    devel@linuxdriverproject.org
 +S:    Maintained
 +F:    drivers/hv/
 +F:    drivers/hid/hid-hyperv.c
 +F:    drivers/net/hyperv/
 +F:    drivers/staging/hv/
 +
  I2C/SMBUS STUB DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
  L:    linux-i2c@vger.kernel.org
@@@ -3224,7 -3198,6 +3224,7 @@@ F:      drivers/i2c/busses/i2c-stub.
  I2C SUBSYSTEM
  M:    "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
  M:    "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
 +M:    "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de>
  L:    linux-i2c@vger.kernel.org
  W:    http://i2c.wiki.kernel.org/
  T:    quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
@@@ -3611,7 -3584,8 +3611,7 @@@ F:      net/netfilter/ipvs
  IPWIRELESS DRIVER
  M:    Jiri Kosina <jkosina@suse.cz>
  M:    David Sterba <dsterba@suse.cz>
 -S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git
 +S:    Odd Fixes
  F:    drivers/tty/ipwireless/
  
  IPX NETWORK LAYER
@@@ -3806,6 -3780,7 +3806,6 @@@ S:      Odd Fixe
  
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
  M:    "J. Bruce Fields" <bfields@fieldses.org>
 -M:    Neil Brown <neilb@suse.de>
  L:    linux-nfs@vger.kernel.org
  W:    http://nfs.sourceforge.net/
  S:    Supported
@@@ -3903,7 -3878,8 +3903,7 @@@ L:      keyrings@linux-nfs.or
  S:    Supported
  F:    Documentation/security/keys-trusted-encrypted.txt
  F:    include/keys/encrypted-type.h
 -F:    security/keys/encrypted.c
 -F:    security/keys/encrypted.h
 +F:    security/keys/encrypted-keys/
  
  KGDB / KDB /debug_core
  M:    Jason Wessel <jason.wessel@windriver.com>
@@@ -4036,7 -4012,7 +4036,7 @@@ M:      Josh Boyer <jwboyer@gmail.com
  M:    Matt Porter <mporter@kernel.crashing.org>
  W:    http://www.penguinppc.org/
  L:    linuxppc-dev@lists.ozlabs.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
 +T:    git git://git.infradead.org/users/jwboyer/powerpc-4xx.git
  S:    Maintained
  F:    arch/powerpc/platforms/40x/
  F:    arch/powerpc/platforms/44x/
@@@ -4140,6 -4116,7 +4140,7 @@@ F:      fs/partitions/ldm.
  
  LogFS
  M:    Joern Engel <joern@logfs.org>
+ M:    Prasad Joshi <prasadjoshi.linux@gmail.com>
  L:    logfs@logfs.org
  W:    logfs.org
  S:    Maintained
@@@ -4281,6 -4258,13 +4282,6 @@@ S:     Orpha
  F:    drivers/video/matrox/matroxfb_*
  F:    include/linux/matroxfb.h
  
 -MAX1668 TEMPERATURE SENSOR DRIVER
 -M:    "David George" <david.george@ska.ac.za>
 -L:    lm-sensors@lm-sensors.org
 -S:    Maintained
 -F:    Documentation/hwmon/max1668
 -F:    drivers/hwmon/max1668.c
 -
  MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
  M:    "Hans J. Koch" <hjk@hansjkoch.de>
  L:    lm-sensors@lm-sensors.org
@@@ -4707,8 -4691,6 +4708,8 @@@ Q:      http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
  S:    Maintained
  F:    arch/arm/*omap*/
 +F:    drivers/i2c/busses/i2c-omap.c
 +F:    include/linux/i2c-omap.h
  
  OMAP CLOCK FRAMEWORK SUPPORT
  M:    Paul Walmsley <paul@pwsan.com>
@@@ -4874,14 -4856,6 +4875,14 @@@ S:    Maintaine
  T:    git git://openrisc.net/~jonas/linux
  F:    arch/openrisc
  
 +OPENVSWITCH
 +M:    Jesse Gross <jesse@nicira.com>
 +L:    dev@openvswitch.org
 +W:    http://openvswitch.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch.git
 +S:    Maintained
 +F:    net/openvswitch/
 +
  OPL4 DRIVER
  M:    Clemens Ladisch <clemens@ladisch.de>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -5148,19 -5122,10 +5149,19 @@@ L:   linux-mtd@lists.infradead.or
  S:    Maintained
  F:    drivers/mtd/devices/phram.c
  
 +PICOXCELL SUPPORT
 +M:    Jamie Iles <jamie@jamieiles.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://github.com/jamieiles/linux-2.6-ji.git
 +S:    Supported
 +F:    arch/arm/mach-picoxcell
 +F:    drivers/*/picoxcell*
 +F:    drivers/*/*/picoxcell*
 +
  PIN CONTROL SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
 -F:    drivers/pinmux/
 +F:    drivers/pinctrl/
  
  PKTCDVD DRIVER
  M:    Peter Osterlund <petero2@telia.com>
@@@ -5343,27 -5308,35 +5344,27 @@@ F:   drivers/media/video/pvrusb2
  PXA2xx/PXA3xx SUPPORT
  M:    Eric Miao <eric.y.miao@gmail.com>
  M:    Russell King <linux@arm.linux.org.uk>
 +M:    Haojian Zhuang <haojian.zhuang@marvell.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://github.com/hzhuang1/linux.git
 +T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
  S:    Maintained
  F:    arch/arm/mach-pxa/
  F:    drivers/pcmcia/pxa2xx*
 -F:    drivers/spi/pxa2xx*
 +F:    drivers/spi/spi-pxa2xx*
  F:    drivers/usb/gadget/pxa2*
  F:    include/sound/pxa2xx-lib.h
  F:    sound/arm/pxa*
  F:    sound/soc/pxa
  
 -PXA168 SUPPORT
 +MMP SUPPORT
  M:    Eric Miao <eric.y.miao@gmail.com>
 -M:    Jason Chagas <jason.chagas@marvell.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 -S:    Maintained
 -
 -PXA910 SUPPORT
 -M:    Eric Miao <eric.y.miao@gmail.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 -S:    Maintained
 -
 -MMP2 SUPPORT (aka ARMADA610)
  M:    Haojian Zhuang <haojian.zhuang@marvell.com>
 -M:    Eric Miao <eric.y.miao@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 +T:    git git://github.com/hzhuang1/linux.git
 +T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
  S:    Maintained
 +F:    arch/arm/mach-mmp/
  
  PXA MMCI DRIVER
  S:    Orphan
@@@ -5402,7 -5375,6 +5403,7 @@@ S:      Supporte
  F:    drivers/scsi/qla4xxx/
  
  QLOGIC QLA3XXX NETWORK DRIVER
 +M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
@@@ -5573,6 -5545,11 +5574,6 @@@ M:     Maxim Levitsky <maximlevitsky@gmail.
  S:    Maintained
  F:    drivers/memstick/host/r592.*
  
 -RISCOM8 DRIVER
 -S:    Orphan
 -F:    Documentation/serial/riscom8.txt
 -F:    drivers/staging/tty/riscom8*
 -
  ROCKETPORT DRIVER
  P:    Comtrol Corp.
  W:    http://www.comtrol.com
@@@ -5693,12 -5670,6 +5694,12 @@@ L:    alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/samsung
  
 +SAMSUNG FRAMEBUFFER DRIVER
 +M:    Jingoo Han <jg1.han@samsung.com>
 +L:    linux-fbdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/video/s3c-fb.c
 +
  SERIAL DRIVERS
  M:    Alan Cox <alan@linux.intel.com>
  L:    linux-serial@vger.kernel.org
@@@ -5838,14 -5809,13 +5839,14 @@@ L:   linux-mmc@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
  S:    Maintained
  F:    drivers/mmc/host/sdhci.*
 +F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
  M:    Anton Vorontsov <avorontsov@ru.mvista.com>
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-mmc@vger.kernel.org
  S:    Maintained
 -F:    drivers/mmc/host/sdhci-of.*
 +F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER
  M:    Ben Dooks <ben-linux@fluff.org>
@@@ -5862,7 -5832,7 +5863,7 @@@ F:      drivers/mmc/host/sdhci-spear.
  SECURITY SUBSYSTEM
  M:    James Morris <jmorris@namei.org>
  L:    linux-security-module@vger.kernel.org (suggested Cc:)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
  W:    http://security.wiki.kernel.org/
  S:    Supported
  F:    security/
@@@ -5924,6 -5894,7 +5925,6 @@@ F:      drivers/net/ethernet/emulex/benet
  
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
 -M:    Steve Hodgson <shodgson@solarflare.com>
  M:    Ben Hutchings <bhutchings@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -5988,7 -5959,6 +5989,7 @@@ L:      davinci-linux-open-source@linux.davi
  Q:    http://patchwork.kernel.org/project/linux-davinci/list/
  S:    Supported
  F:    arch/arm/mach-davinci
 +F:    drivers/i2c/busses/i2c-davinci.c
  
  SIS 190 ETHERNET DRIVER
  M:    Francois Romieu <romieu@fr.zoreil.com>
@@@ -6132,6 -6102,13 +6133,6 @@@ S:     Maintaine
  F:    drivers/ssb/
  F:    include/linux/ssb/
  
 -BROADCOM SPECIFIC AMBA DRIVER (BCMA)
 -M:    Rafał Miłecki <zajec5@gmail.com>
 -L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 -F:    drivers/bcma/
 -F:    include/linux/bcma/
 -
  SONY VAIO CONTROL DEVICE DRIVER
  M:    Mattia Dongili <malattia@linux.it>
  L:    platform-driver-x86@vger.kernel.org
@@@ -6218,7 -6195,9 +6219,7 @@@ M:      Viresh Kumar <viresh.kumar@st.com
  W:    http://www.st.com/spear
  S:    Maintained
  F:    arch/arm/mach-spear*/clock.c
 -F:    arch/arm/mach-spear*/include/mach/clkdev.h
  F:    arch/arm/plat-spear/clock.c
 -F:    arch/arm/plat-spear/include/plat/clkdev.h
  F:    arch/arm/plat-spear/include/plat/clock.h
  
  SPEAR PAD MULTIPLEXING SUPPORT
@@@ -6234,6 -6213,11 +6235,6 @@@ F:     arch/arm/mach-spear3xx/spear3*0_evb.
  F:    arch/arm/mach-spear6xx/spear600.c
  F:    arch/arm/mach-spear6xx/spear600_evb.c
  
 -SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
 -S:    Orphan
 -F:    Documentation/serial/specialix.txt
 -F:    drivers/staging/tty/specialix*
 -
  SPI SUBSYSTEM
  M:    Grant Likely <grant.likely@secretlab.ca>
  L:    spi-devel-general@lists.sourceforge.net
@@@ -6276,7 -6260,7 +6277,7 @@@ F:      arch/alpha/kernel/srm_env.
  
  STABLE BRANCH
  M:    Greg Kroah-Hartman <greg@kroah.com>
 -L:    stable@kernel.org
 +L:    stable@vger.kernel.org
  S:    Maintained
  
  STAGING SUBSYSTEM
@@@ -6311,6 -6295,11 +6312,6 @@@ M:     Manu Abraham <abraham.manu@gmail.com
  S:    Odd Fixes
  F:    drivers/staging/crystalhd/
  
 -STAGING - CYPRESS WESTBRIDGE SUPPORT
 -M:    David Cross <david.cross@cypress.com>
 -S:    Odd Fixes
 -F:    drivers/staging/westbridge/
 -
  STAGING - ECHO CANCELLER
  M:    Steve Underwood <steveu@coppice.org>
  M:    David Rowe <david@rowetel.com>
@@@ -6332,6 -6321,12 +6333,6 @@@ M:     David Täht <d@teklibre.com
  S:    Odd Fixes
  F:    drivers/staging/frontier/
  
 -STAGING - HYPER-V (MICROSOFT)
 -M:    Hank Janssen <hjanssen@microsoft.com>
 -M:    Haiyang Zhang <haiyangz@microsoft.com>
 -S:    Odd Fixes
 -F:    drivers/staging/hv/
 -
  STAGING - INDUSTRIAL IO
  M:    Jonathan Cameron <jic23@cam.ac.uk>
  L:    linux-iio@vger.kernel.org
@@@ -6342,7 -6337,7 +6343,7 @@@ STAGING - LIRC (LINUX INFRARED REMOTE C
  M:    Jarod Wilson <jarod@wilsonet.com>
  W:    http://www.lirc.org/
  S:    Odd Fixes
 -F:    drivers/staging/lirc/
 +F:    drivers/staging/media/lirc/
  
  STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec)
  M:    Julian Andres Klode <jak@jak-linux.org>
@@@ -6378,7 -6373,7 +6379,7 @@@ F:      drivers/staging/sm7xx
  STAGING - SOFTLOGIC 6x10 MPEG CODEC
  M:    Ben Collins <bcollins@bluecherry.net>
  S:    Odd Fixes
 -F:    drivers/staging/solo6x10/
 +F:    drivers/staging/media/solo6x10/
  
  STAGING - SPEAKUP CONSOLE SPEECH DRIVER
  M:    William Hubbs <w.d.hubbs@gmail.com>
@@@ -6416,7 -6411,7 +6417,7 @@@ S:      Odd Fixe
  F:    drivers/staging/winbond/
  
  STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
 -M:    Arnaud Patard <apatard@mandriva.com>
 +M:    Arnaud Patard <arnaud.patard@rtp-net.org>
  S:    Odd Fixes
  F:    drivers/staging/xgifb/
  
@@@ -6507,13 -6502,6 +6508,13 @@@ W:    http://tcp-lp-mod.sourceforge.net
  S:    Maintained
  F:    net/ipv4/tcp_lp.c
  
 +TEAM DRIVER
 +M:    Jiri Pirko <jpirko@redhat.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/team/
 +F:    include/linux/if_team.h
 +
  TEGRA SUPPORT
  M:    Colin Cross <ccross@android.com>
  M:    Olof Johansson <olof@lixom.net>
@@@ -6671,7 -6659,7 +6672,7 @@@ TTY LAYE
  M:    Greg Kroah-Hartman <gregkh@suse.de>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
 -F:    drivers/tty/*
 +F:    drivers/tty/
  F:    drivers/tty/serial/serial_core.c
  F:    include/linux/serial_core.h
  F:    include/linux/serial.h
@@@ -6681,7 -6669,7 +6682,7 @@@ TULIP NETWORK DRIVER
  M:    Grant Grundler <grundler@parisc-linux.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ethernet/tulip/
 +F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
  M:    Maxim Krasnyansky <maxk@qualcomm.com>
@@@ -7207,7 -7195,7 +7208,7 @@@ S:      Maintaine
  F:    drivers/net/vmxnet3/
  
  VMware PVSCSI driver
 -M:    Alok Kataria <akataria@vmware.com>
 +M:    Arvind Kumar <arvindkumar@vmware.com>
  M:    VMware PV-Drivers <pv-drivers@vmware.com>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
@@@ -7364,7 -7352,6 +7365,7 @@@ S:      Supporte
  F:    Documentation/hwmon/wm83??
  F:    arch/arm/mach-s3c64xx/mach-crag6410*
  F:    drivers/leds/leds-wm83*.c
 +F:    drivers/hwmon/wm83??-hwmon.c
  F:    drivers/input/misc/wm831x-on.c
  F:    drivers/input/touchscreen/wm831x-ts.c
  F:    drivers/input/touchscreen/wm97*.c
diff --combined fs/logfs/dir.c
index 501043e8966ce010bd77412c767461e99da411e8,b6404898da83a89d8f1b12dcdfd42c87a0ee8665..3de7a32cadbe109fb7d270235f20df1314e663de
@@@ -71,7 -71,7 +71,7 @@@ static int write_dir(struct inode *dir
  
  static int write_inode(struct inode *inode)
  {
-       return __logfs_write_inode(inode, WF_LOCK);
+       return __logfs_write_inode(inode, NULL, WF_LOCK);
  }
  
  static s64 dir_seek_data(struct inode *inode, s64 pos)
@@@ -482,7 -482,7 +482,7 @@@ out
        return ret;
  }
  
 -static int logfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
 +static int logfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
  {
        struct inode *inode;
  
        return __logfs_create(dir, dentry, inode, NULL, 0);
  }
  
 -static int logfs_create(struct inode *dir, struct dentry *dentry, int mode,
 +static int logfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
                struct nameidata *nd)
  {
        struct inode *inode;
        return __logfs_create(dir, dentry, inode, NULL, 0);
  }
  
 -static int logfs_mknod(struct inode *dir, struct dentry *dentry, int mode,
 +static int logfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
                dev_t rdev)
  {
        struct inode *inode;
diff --combined fs/logfs/inode.c
index 388df1aa35e583f728d0a085db9fc7b810635438,7c42c132c1779c200184ce6c84e8f28241ea2d69..a422f42238b250764011fa421d24a1a0858dd153
@@@ -144,6 -144,7 +144,6 @@@ struct inode *logfs_safe_iget(struct su
  static void logfs_i_callback(struct rcu_head *head)
  {
        struct inode *inode = container_of(head, struct inode, i_rcu);
 -      INIT_LIST_HEAD(&inode->i_dentry);
        kmem_cache_free(logfs_inode_cache, logfs_inode(inode));
  }
  
@@@ -286,7 -287,7 +286,7 @@@ static int logfs_write_inode(struct ino
        if (logfs_inode(inode)->li_flags & LOGFS_IF_STILLBORN)
                return 0;
  
-       ret = __logfs_write_inode(inode, flags);
+       ret = __logfs_write_inode(inode, NULL, flags);
        LOGFS_BUG_ON(ret, inode->i_sb);
        return ret;
  }
@@@ -323,7 -324,7 +323,7 @@@ static void logfs_set_ino_generation(st
        mutex_unlock(&super->s_journal_mutex);
  }
  
 -struct inode *logfs_new_inode(struct inode *dir, int mode)
 +struct inode *logfs_new_inode(struct inode *dir, umode_t mode)
  {
        struct super_block *sb = dir->i_sb;
        struct inode *inode;
@@@ -363,7 -364,9 +363,9 @@@ static void logfs_init_once(void *_li
  
  static int logfs_sync_fs(struct super_block *sb, int wait)
  {
+       logfs_get_wblocks(sb, NULL, WF_LOCK);
        logfs_write_anchor(sb);
+       logfs_put_wblocks(sb, NULL, WF_LOCK);
        return 0;
  }
  
diff --combined fs/logfs/logfs.h
index 926373866a5510c310936c0d6cc52140a335f645,59ed32cd62d1245dcce5772124290390c55a3f2c..5f09376094651c76c7ded9f52535fe1a1351ed6b
@@@ -520,7 -520,7 +520,7 @@@ extern const struct super_operations lo
  struct inode *logfs_iget(struct super_block *sb, ino_t ino);
  struct inode *logfs_safe_iget(struct super_block *sb, ino_t ino, int *cookie);
  void logfs_safe_iput(struct inode *inode, int cookie);
 -struct inode *logfs_new_inode(struct inode *dir, int mode);
 +struct inode *logfs_new_inode(struct inode *dir, umode_t mode);
  struct inode *logfs_new_meta_inode(struct super_block *sb, u64 ino);
  struct inode *logfs_read_meta_inode(struct super_block *sb, u64 ino);
  int logfs_init_inode_cache(void);
@@@ -528,7 -528,7 +528,7 @@@ void logfs_destroy_inode_cache(void)
  void logfs_set_blocks(struct inode *inode, u64 no);
  /* these logically belong into inode.c but actually reside in readwrite.c */
  int logfs_read_inode(struct inode *inode);
- int __logfs_write_inode(struct inode *inode, long flags);
+ int __logfs_write_inode(struct inode *inode, struct page *, long flags);
  void logfs_evict_inode(struct inode *inode);
  
  /* journal.c */
@@@ -577,6 -577,8 +577,8 @@@ void initialize_block_counters(struct p
                __be64 *array, int page_is_empty);
  int logfs_exist_block(struct inode *inode, u64 bix);
  int get_page_reserve(struct inode *inode, struct page *page);
+ void logfs_get_wblocks(struct super_block *sb, struct page *page, int lock);
+ void logfs_put_wblocks(struct super_block *sb, struct page *page, int lock);
  extern struct logfs_block_ops indirect_block_ops;
  
  /* segment.c */
@@@ -594,6 -596,7 +596,7 @@@ int logfs_init_mapping(struct super_blo
  void logfs_sync_area(struct logfs_area *area);
  void logfs_sync_segments(struct super_block *sb);
  void freeseg(struct super_block *sb, u32 segno);
+ void free_areas(struct super_block *sb);
  
  /* area handling */
  int logfs_init_areas(struct super_block *sb);
diff --combined include/linux/mtd/mtd.h
index 1a81fde8f3331d9652054325aa36809cb40b45f1,9f5b312af7838d5275ff9611030da3861ec2d612..221295208fd0bf18fd4302955558be0a3f4f05e9
@@@ -171,60 -171,87 +171,60 @@@ struct mtd_info 
        struct mtd_erase_region_info *eraseregions;
  
        /*
 -       * Erase is an asynchronous operation.  Device drivers are supposed
 -       * to call instr->callback() whenever the operation completes, even
 -       * if it completes with a failure.
 -       * Callers are supposed to pass a callback function and wait for it
 -       * to be called before writing to the block.
 +       * Do not call via these pointers, use corresponding mtd_*()
 +       * wrappers instead.
         */
        int (*erase) (struct mtd_info *mtd, struct erase_info *instr);
 -
 -      /* This stuff for eXecute-In-Place */
 -      /* phys is optional and may be set to NULL */
        int (*point) (struct mtd_info *mtd, loff_t from, size_t len,
 -                      size_t *retlen, void **virt, resource_size_t *phys);
 -
 -      /* We probably shouldn't allow XIP if the unpoint isn't a NULL */
 +                    size_t *retlen, void **virt, resource_size_t *phys);
        void (*unpoint) (struct mtd_info *mtd, loff_t from, size_t len);
 -
 -      /* Allow NOMMU mmap() to directly map the device (if not NULL)
 -       * - return the address to which the offset maps
 -       * - return -ENOSYS to indicate refusal to do the mapping
 -       */
        unsigned long (*get_unmapped_area) (struct mtd_info *mtd,
                                            unsigned long len,
                                            unsigned long offset,
                                            unsigned long flags);
 -
 -      /* Backing device capabilities for this device
 -       * - provides mmap capabilities
 -       */
 -      struct backing_dev_info *backing_dev_info;
 -
 -
 -      int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
 -      int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
 -
 -      /* In blackbox flight recorder like scenarios we want to make successful
 -         writes in interrupt context. panic_write() is only intended to be
 -         called when its known the kernel is about to panic and we need the
 -         write to succeed. Since the kernel is not going to be running for much
 -         longer, this function can break locks and delay to ensure the write
 -         succeeds (but not sleep). */
 -
 -      int (*panic_write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
 -
 +      int (*read) (struct mtd_info *mtd, loff_t from, size_t len,
 +                   size_t *retlen, u_char *buf);
 +      int (*write) (struct mtd_info *mtd, loff_t to, size_t len,
 +                    size_t *retlen, const u_char *buf);
 +      int (*panic_write) (struct mtd_info *mtd, loff_t to, size_t len,
 +                          size_t *retlen, const u_char *buf);
        int (*read_oob) (struct mtd_info *mtd, loff_t from,
                         struct mtd_oob_ops *ops);
        int (*write_oob) (struct mtd_info *mtd, loff_t to,
 -                       struct mtd_oob_ops *ops);
 -
 -      /*
 -       * Methods to access the protection register area, present in some
 -       * flash devices. The user data is one time programmable but the
 -       * factory data is read only.
 -       */
 -      int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);
 -      int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
 -      int (*get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len);
 -      int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
 -      int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
 -      int (*lock_user_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len);
 -
 -      /* kvec-based read/write methods.
 -         NB: The 'count' parameter is the number of _vectors_, each of
 -         which contains an (ofs, len) tuple.
 -      */
 -      int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen);
 -
 -      /* Sync */
 +                        struct mtd_oob_ops *ops);
 +      int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf,
 +                                 size_t len);
 +      int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from,
 +                                 size_t len, size_t *retlen, u_char *buf);
 +      int (*get_user_prot_info) (struct mtd_info *mtd, struct otp_info *buf,
 +                                 size_t len);
 +      int (*read_user_prot_reg) (struct mtd_info *mtd, loff_t from,
 +                                 size_t len, size_t *retlen, u_char *buf);
 +      int (*write_user_prot_reg) (struct mtd_info *mtd, loff_t to, size_t len,
 +                                  size_t *retlen, u_char *buf);
 +      int (*lock_user_prot_reg) (struct mtd_info *mtd, loff_t from,
 +                                 size_t len);
 +      int (*writev) (struct mtd_info *mtd, const struct kvec *vecs,
 +                      unsigned long count, loff_t to, size_t *retlen);
        void (*sync) (struct mtd_info *mtd);
 -
 -      /* Chip-supported device locking */
        int (*lock) (struct mtd_info *mtd, loff_t ofs, uint64_t len);
        int (*unlock) (struct mtd_info *mtd, loff_t ofs, uint64_t len);
        int (*is_locked) (struct mtd_info *mtd, loff_t ofs, uint64_t len);
 -
 -      /* Power Management functions */
 +      int (*block_isbad) (struct mtd_info *mtd, loff_t ofs);
 +      int (*block_markbad) (struct mtd_info *mtd, loff_t ofs);
        int (*suspend) (struct mtd_info *mtd);
        void (*resume) (struct mtd_info *mtd);
 +      /*
 +       * If the driver is something smart, like UBI, it may need to maintain
 +       * its own reference counting. The below functions are only for driver.
 +       */
 +      int (*get_device) (struct mtd_info *mtd);
 +      void (*put_device) (struct mtd_info *mtd);
  
 -      /* Bad block management functions */
 -      int (*block_isbad) (struct mtd_info *mtd, loff_t ofs);
 -      int (*block_markbad) (struct mtd_info *mtd, loff_t ofs);
 +      /* Backing device capabilities for this device
 +       * - provides mmap capabilities
 +       */
 +      struct backing_dev_info *backing_dev_info;
  
        struct notifier_block reboot_notifier;  /* default mode before reboot */
  
        struct module *owner;
        struct device dev;
        int usecount;
 -
 -      /* If the driver is something smart, like UBI, it may need to maintain
 -       * its own reference counting. The below functions are only for driver.
 -       * The driver may register its callbacks. These callbacks are not
 -       * supposed to be called by MTD users */
 -      int (*get_device) (struct mtd_info *mtd);
 -      void (*put_device) (struct mtd_info *mtd);
  };
  
 -static inline struct mtd_info *dev_to_mtd(struct device *dev)
 +/*
 + * Erase is an asynchronous operation.  Device drivers are supposed
 + * to call instr->callback() whenever the operation completes, even
 + * if it completes with a failure.
 + * Callers are supposed to pass a callback function and wait for it
 + * to be called before writing to the block.
 + */
 +static inline int mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
 +{
 +      return mtd->erase(mtd, instr);
 +}
 +
 +/*
 + * This stuff for eXecute-In-Place. phys is optional and may be set to NULL.
 + */
 +static inline int mtd_point(struct mtd_info *mtd, loff_t from, size_t len,
 +                          size_t *retlen, void **virt, resource_size_t *phys)
 +{
 +      *retlen = 0;
 +      if (!mtd->point)
 +              return -EOPNOTSUPP;
 +      return mtd->point(mtd, from, len, retlen, virt, phys);
 +}
 +
 +/* We probably shouldn't allow XIP if the unpoint isn't a NULL */
 +static inline void mtd_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
  {
 -      return dev ? dev_get_drvdata(dev) : NULL;
 +      return mtd->unpoint(mtd, from, len);
 +}
 +
 +/*
 + * Allow NOMMU mmap() to directly map the device (if not NULL)
 + * - return the address to which the offset maps
 + * - return -ENOSYS to indicate refusal to do the mapping
 + */
 +static inline unsigned long mtd_get_unmapped_area(struct mtd_info *mtd,
 +                                                unsigned long len,
 +                                                unsigned long offset,
 +                                                unsigned long flags)
 +{
 +      if (!mtd->get_unmapped_area)
 +              return -EOPNOTSUPP;
 +      return mtd->get_unmapped_area(mtd, len, offset, flags);
 +}
 +
 +static inline int mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
 +                         size_t *retlen, u_char *buf)
 +{
 +      return mtd->read(mtd, from, len, retlen, buf);
 +}
 +
 +static inline int mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
 +                          size_t *retlen, const u_char *buf)
 +{
 +      *retlen = 0;
 +      if (!mtd->write)
 +              return -EROFS;
 +      return mtd->write(mtd, to, len, retlen, buf);
 +}
 +
 +/*
 + * In blackbox flight recorder like scenarios we want to make successful writes
 + * in interrupt context. panic_write() is only intended to be called when its
 + * known the kernel is about to panic and we need the write to succeed. Since
 + * the kernel is not going to be running for much longer, this function can
 + * break locks and delay to ensure the write succeeds (but not sleep).
 + */
 +static inline int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
 +                                size_t *retlen, const u_char *buf)
 +{
 +      *retlen = 0;
 +      if (!mtd->panic_write)
 +              return -EOPNOTSUPP;
 +      return mtd->panic_write(mtd, to, len, retlen, buf);
 +}
 +
 +static inline int mtd_read_oob(struct mtd_info *mtd, loff_t from,
 +                             struct mtd_oob_ops *ops)
 +{
 +      ops->retlen = ops->oobretlen = 0;
 +      if (!mtd->read_oob)
 +              return -EOPNOTSUPP;
 +      return mtd->read_oob(mtd, from, ops);
 +}
 +
 +static inline int mtd_write_oob(struct mtd_info *mtd, loff_t to,
 +                              struct mtd_oob_ops *ops)
 +{
 +      ops->retlen = ops->oobretlen = 0;
 +      if (!mtd->write_oob)
 +              return -EOPNOTSUPP;
 +      return mtd->write_oob(mtd, to, ops);
 +}
 +
 +/*
 + * Method to access the protection register area, present in some flash
 + * devices. The user data is one time programmable but the factory data is read
 + * only.
 + */
 +static inline int mtd_get_fact_prot_info(struct mtd_info *mtd,
 +                                       struct otp_info *buf, size_t len)
 +{
 +      if (!mtd->get_fact_prot_info)
 +              return -EOPNOTSUPP;
 +      return mtd->get_fact_prot_info(mtd, buf, len);
 +}
 +
 +static inline int mtd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from,
 +                                       size_t len, size_t *retlen,
 +                                       u_char *buf)
 +{
 +      *retlen = 0;
 +      if (!mtd->read_fact_prot_reg)
 +              return -EOPNOTSUPP;
 +      return mtd->read_fact_prot_reg(mtd, from, len, retlen, buf);
 +}
 +
 +static inline int mtd_get_user_prot_info(struct mtd_info *mtd,
 +                                       struct otp_info *buf,
 +                                       size_t len)
 +{
 +      if (!mtd->get_user_prot_info)
 +              return -EOPNOTSUPP;
 +      return mtd->get_user_prot_info(mtd, buf, len);
 +}
 +
 +static inline int mtd_read_user_prot_reg(struct mtd_info *mtd, loff_t from,
 +                                       size_t len, size_t *retlen,
 +                                       u_char *buf)
 +{
 +      *retlen = 0;
 +      if (!mtd->read_user_prot_reg)
 +              return -EOPNOTSUPP;
 +      return mtd->read_user_prot_reg(mtd, from, len, retlen, buf);
 +}
 +
 +static inline int mtd_write_user_prot_reg(struct mtd_info *mtd, loff_t to,
 +                                        size_t len, size_t *retlen,
 +                                        u_char *buf)
 +{
 +      *retlen = 0;
 +      if (!mtd->write_user_prot_reg)
 +              return -EOPNOTSUPP;
 +      return mtd->write_user_prot_reg(mtd, to, len, retlen, buf);
 +}
 +
 +static inline int mtd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from,
 +                                       size_t len)
 +{
 +      if (!mtd->lock_user_prot_reg)
 +              return -EOPNOTSUPP;
 +      return mtd->lock_user_prot_reg(mtd, from, len);
 +}
 +
 +int mtd_writev(struct mtd_info *mtd, const struct kvec *vecs,
 +             unsigned long count, loff_t to, size_t *retlen);
 +
 +static inline void mtd_sync(struct mtd_info *mtd)
 +{
 +      if (mtd->sync)
 +              mtd->sync(mtd);
 +}
 +
 +/* Chip-supported device locking */
 +static inline int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
 +{
 +      if (!mtd->lock)
 +              return -EOPNOTSUPP;
 +      return mtd->lock(mtd, ofs, len);
 +}
 +
 +static inline int mtd_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
 +{
 +      if (!mtd->unlock)
 +              return -EOPNOTSUPP;
 +      return mtd->unlock(mtd, ofs, len);
 +}
 +
 +static inline int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
 +{
 +      if (!mtd->is_locked)
 +              return -EOPNOTSUPP;
 +      return mtd->is_locked(mtd, ofs, len);
 +}
 +
 +static inline int mtd_suspend(struct mtd_info *mtd)
 +{
 +      if (!mtd->suspend)
 +              return -EOPNOTSUPP;
 +      return mtd->suspend(mtd);
 +}
 +
 +static inline void mtd_resume(struct mtd_info *mtd)
 +{
 +      if (mtd->resume)
 +              mtd->resume(mtd);
 +}
 +
 +static inline int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs)
 +{
 +      if (!mtd->block_isbad)
-               return -EOPNOTSUPP;
++              return 0;
 +      return mtd->block_isbad(mtd, ofs);
 +}
 +
 +static inline int mtd_block_markbad(struct mtd_info *mtd, loff_t ofs)
 +{
 +      if (!mtd->block_markbad)
 +              return -EOPNOTSUPP;
 +      return mtd->block_markbad(mtd, ofs);
  }
  
  static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd)
@@@ -482,16 -309,6 +482,16 @@@ static inline uint32_t mtd_mod_by_ws(ui
        return do_div(sz, mtd->writesize);
  }
  
-       return !!mtd->block_isbad;
 +static inline int mtd_has_oob(const struct mtd_info *mtd)
 +{
 +      return mtd->read_oob && mtd->write_oob;
 +}
 +
 +static inline int mtd_can_have_bb(const struct mtd_info *mtd)
 +{
++      return 0;
 +}
 +
        /* Kernel-side ioctl definitions */
  
  struct mtd_partition;
@@@ -521,6 -338,13 +521,6 @@@ struct mtd_notifier 
  
  extern void register_mtd_user (struct mtd_notifier *new);
  extern int unregister_mtd_user (struct mtd_notifier *old);
 -
 -int default_mtd_writev(struct mtd_info *mtd, const struct kvec *vecs,
 -                     unsigned long count, loff_t to, size_t *retlen);
 -
 -int default_mtd_readv(struct mtd_info *mtd, struct kvec *vecs,
 -                    unsigned long count, loff_t from, size_t *retlen);
 -
  void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size);
  
  void mtd_erase_callback(struct erase_info *instr);