1. 02 2月, 2012 2 次提交
  2. 01 2月, 2012 2 次提交
    • L
      Linux 3.3-rc2 · 62aa2b53
      Linus Torvalds 提交于
      62aa2b53
    • L
      Merge tag 'for-linus' of git://github.com/prasad-joshi/logfs_upstream · d3712b9d
      Linus Torvalds 提交于
      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 f2933e86: "Logfs: Allow NULL
      block_isbad() methods" clashing with the abstraction changes in the
      commits 7086c19d: "mtd: introduce mtd_block_isbad interface" and
      d58b27ed: "logfs: do not use 'mtd->block_isbad' directly".
      
      This resolution takes the semantics from commit f2933e86, 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".
      d3712b9d
  3. 31 1月, 2012 14 次提交
    • L
      Merge branch 'hwmon-for-linus' of... · c5d2bc11
      Linus Torvalds 提交于
      Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
      
      * 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
        hwmon: (w83627ehf) Disable setting DC mode for pwm2, pwm3 on NCT6776F
        hwmon: (sht15) fix bad error code
        MAINTAINERS: Drop maintainer for MAX1668 hwmon driver
        MAINTAINERS: Add hwmon entries for Wolfson
        hwmon: (f71805f) Fix clamping of temperature limits
      c5d2bc11
    • L
      Merge branch 'for-torvalds' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl · 8e2a2880
      Linus Torvalds 提交于
      Here are some fixes to the pin control system that has accumulated since
      -rc1.  Mainly Tony Lindgren fixed the module load/unload logic and the
      rest are minor fixes and documentation.
      
      * 'for-torvalds' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
        pinctrl: add checks for empty function names
        pinctrl: fix pinmux_hog_maps when ctrl_dev_name is not set
        pinctrl: fix some pinmux typos
        pinctrl: free debugfs entries when unloading a pinmux driver
        pinctrl: unbreak error messages
        Documentation/pinctrl: fix a few syntax errors in code examples
        pinctrl: fix pinconf_pins_show iteration
      8e2a2880
    • L
      Merge tag 'tty-3.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty · 27ba234c
      Linus Torvalds 提交于
      Here are some tty/serial patches for 3.3-rc1
      
      Big thing here is the movement of the 8250 serial drivers to their own
      directory, now that the patch churn has calmed down.
      
      Other than that, only minor stuff (omap patches were reverted as they
      were found to be wrong), and another broken driver removed from the
      system.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      * tag 'tty-3.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
        serial: Kill off Moorestown code
        Revert "tty: serial: OMAP: ensure FIFO levels are set correctly in non-DMA mode"
        Revert "tty: serial: OMAP: transmit FIFO threshold interrupts don't wake the chip"
        serial: Fix wakeup init logic to speed up startup
        docbook: don't use serial_core.h in device-drivers book
        serial: amba-pl011: lock console writes against interrupts
        amba-pl011: do not disable RTS during shutdown
        tty: serial: OMAP: transmit FIFO threshold interrupts don't wake the chip
        tty: serial: OMAP: ensure FIFO levels are set correctly in non-DMA mode
        omap-serial: make serial_omap_restore_context depend on CONFIG_PM_RUNTIME
        omap-serial :Make the suspend/resume functions depend on CONFIG_PM_SLEEP.
        TTY: fix UV serial console regression
        jsm: Fixed EEH recovery error
        Updated TTY MAINTAINERS info
        serial: group all the 8250 related code together
      27ba234c
    • L
      Merge tag 'usb-3.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb · 6bc2b95e
      Linus Torvalds 提交于
      Here are a bunch of USB patches for 3.3-rc1.
      
      Nothing major, largest thing here is the removal of some drivers that
      did not work at all.  Other than that, the normal collection of bugfixes
      and new device ids.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      * tag 'usb-3.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (52 commits)
        uwb & wusb: fix kconfig error
        USB: Realtek cr: fix autopm scheduling while atomic
        USB: ftdi_sio: Add more identifiers
        xHCI: Cleanup isoc transfer ring when TD length mismatch found
        usb: musb: omap2430: minor cleanups.
        qcaux: add more Pantech UML190 and UML290 ports
        Revert "drivers: usb: Fix dependency for USB_HWA_HCD"
        usb: mv-otg - Fix build if CONFIG_USB is not set
        USB: cdc-wdm: Avoid hanging on interface with no USB_CDC_DMM_TYPE
        usb: add support for STA2X11 host driver
        drivers: usb: Fix dependency for USB_HWA_HCD
        kernel-doc: fix new warning in usb.h
        USB: OHCI: fix new compiler warnings
        usb: serial: kobil_sct: fix compile warning:
        drivers/usb/host/ehci-fsl.c: add missing iounmap
        USB: cdc-wdm: better allocate a buffer that is at least as big as we tell the USB core
        USB: cdc-wdm: call wake_up_all to allow driver to shutdown on device removal
        USB: cdc-wdm: use two mutexes to allow simultaneous read and write
        USB: cdc-wdm: updating desc->length must be protected by spin_lock
        USB: usbsevseg: fix max length
        ...
      6bc2b95e
    • L
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net · a14a8d93
      Linus Torvalds 提交于
      1) Setting link attributes can modify the size of the attributes that
         would be reported on a subsequent getlink netlink operation,
         therefore min_ifinfo_dump_size needs to be adjusted.  From Stefan
         Gula.
      
      2) Resegmentation of TSO frames while trimming can violate invariants
         expected by callers, namely that the number of segments can only stay
         the same or decrease, never increase.  If MSS changes, however, we
         can trim data but then end up with more segments.  Fix this by only
         segmenting to the MSS already recorded in the SKB.  That's the
         simplest fix for now and if we want to get more fancy in the future
         that's a more involved change.
      
         This probably explains some retransmit counter inaccuracies.
      
         From Neal Cardwell.
      
      3) Fix too-many-wakeups in POLL with AF_UNIX sockets, from Eric Dumazet.
      
      4) Fix CAIF crashes wrt.  namespace handling.  From Eric Dumazet and
         Eric W. Biederman.
      
      5) TCP port selection fixes from Flavio Leitner.
      
      6) More socket memory cgroup build fixes in certain randonfig
         situations.  From Glauber Costa.
      
      7) Fix TCP memory sysctl regression reported by Ingo Molnar, also from
         Glauber Costa.
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
        af_unix: fix EPOLLET regression for stream sockets
        tcp: fix tcp_trim_head() to adjust segment count with skb MSS
        net/tcp: Fix tcp memory limits initialization when !CONFIG_SYSCTL
        net caif: Register properly as a pernet subsystem.
        netns: Fail conspicously if someone uses net_generic at an inappropriate time.
        net: explicitly add jump_label.h header to sock.h
        net: RTNETLINK adjusting values of min_ifinfo_dump_size
        ipv6: Fix ip_gre lockless xmits.
        xen-netfront: correct MAX_TX_TARGET calculation.
        netns: fix net_alloc_generic()
        tcp: bind() optimize port allocation
        tcp: bind() fix autoselection to share ports
        l2tp: l2tp_ip - fix possible oops on packet receive
        iwlwifi: fix PCI-E transport "inta" race
        mac80211: set bss_conf.idle when vif is connected
        mac80211: update oper_channel on ibss join
      a14a8d93
    • L
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator · b527a233
      Linus Torvalds 提交于
      This fixes an integration issue with the regulator device tree bindings
      which shook out in -rc.  The bindings were overly enthusiatic when
      deciding to set a voltage on a regulator and would try to set zero volts
      on an unconfigured regulator which isn't supported.
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
        regulator: Set apply_uV only when min and max voltages are defined
      b527a233
    • E
      af_unix: fix EPOLLET regression for stream sockets · 6f01fd6e
      Eric Dumazet 提交于
      Commit 0884d7aa (AF_UNIX: Fix poll blocking problem when reading from
      a stream socket) added a regression for epoll() in Edge Triggered mode
      (EPOLLET)
      
      Appropriate fix is to use skb_peek()/skb_unlink() instead of
      skb_dequeue(), and only call skb_unlink() when skb is fully consumed.
      
      This remove the need to requeue a partial skb into sk_receive_queue head
      and the extra sk->sk_data_ready() calls that added the regression.
      
      This is safe because once skb is given to sk_receive_queue, it is not
      modified by a writer, and readers are serialized by u->readlock mutex.
      
      This also reduce number of spinlock acquisition for small reads or
      MSG_PEEK users so should improve overall performance.
      Reported-by: NNick Mathewson <nickm@freehaven.net>
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Cc: Alexey Moiseytsev <himeraster@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6f01fd6e
    • N
      tcp: fix tcp_trim_head() to adjust segment count with skb MSS · 5b35e1e6
      Neal Cardwell 提交于
      This commit fixes tcp_trim_head() to recalculate the number of
      segments in the skb with the skb's existing MSS, so trimming the head
      causes the skb segment count to be monotonically non-increasing - it
      should stay the same or go down, but not increase.
      
      Previously tcp_trim_head() used the current MSS of the connection. But
      if there was a decrease in MSS between original transmission and ACK
      (e.g. due to PMTUD), this could cause tcp_trim_head() to
      counter-intuitively increase the segment count when trimming bytes off
      the head of an skb. This violated assumptions in tcp_tso_acked() that
      tcp_trim_head() only decreases the packet count, so that packets_acked
      in tcp_tso_acked() could underflow, leading tcp_clean_rtx_queue() to
      pass u32 pkts_acked values as large as 0xffffffff to
      ca_ops->pkts_acked().
      
      As an aside, if tcp_trim_head() had really wanted the skb to reflect
      the current MSS, it should have called tcp_set_skb_tso_segs()
      unconditionally, since a decrease in MSS would mean that a
      single-packet skb should now be sliced into multiple segments.
      Signed-off-by: NNeal Cardwell <ncardwell@google.com>
      Acked-by: NNandita Dukkipati <nanditad@google.com>
      Acked-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5b35e1e6
    • G
      net/tcp: Fix tcp memory limits initialization when !CONFIG_SYSCTL · 4acb4190
      Glauber Costa 提交于
      sysctl_tcp_mem() initialization was moved to sysctl_tcp_ipv4.c
      in commit 3dc43e3e, since it
      became a per-ns value.
      
      That code, however, will never run when CONFIG_SYSCTL is
      disabled, leading to bogus values on those fields - causing hung
      TCP sockets.
      
      This patch fixes it by keeping an initialization code in
      tcp_init(). It will be overwritten by the first net namespace
      init if CONFIG_SYSCTL is compiled in, and do the right thing if
      it is compiled out.
      
      It is also named properly as tcp_init_mem(), to properly signal
      its non-sysctl side effect on TCP limits.
      Reported-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NGlauber Costa <glommer@parallels.com>
      Cc: David S. Miller <davem@davemloft.net>
      Link: http://lkml.kernel.org/r/4F22D05A.8030604@parallels.com
      [ renamed the function, tidied up the changelog a bit ]
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4acb4190
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux · 883120eb
      Linus Torvalds 提交于
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
        [S390] dasd: revalidate server for new pathgroup
        [S390] dasd: revert LCU optimization
        [S390] cleanup entry point definition
      883120eb
    • L
      Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze · f07d4a76
      Linus Torvalds 提交于
      * 'next' of git://git.monstr.eu/linux-2.6-microblaze:
        microblaze: generic atomic64 support
      f07d4a76
    • L
      Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux · dfd07ec3
      Linus Torvalds 提交于
      * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
        vmwgfx: Fix assignment in vmw_framebuffer_create_handle
        drm/radeon/kms: Fix device tree linkage of i2c buses
        drm: Pass the real error code back during GEM bo initialisation
        Revert "drm/i810: cleanup reclaim_buffers"
      dfd07ec3
    • L
      Merge tag 'nfs-for-3.3-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs · f94f72ee
      Linus Torvalds 提交于
      NFS client bugfixes for Linux 3.3 (pull 3)
      
      * tag 'nfs-for-3.3-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
        SUNRPC: Fix machine creds in generic_create_cred and generic_match
      f94f72ee
    • L
      Merge tag 'pm-fix-for-3.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · a51f67a4
      Linus Torvalds 提交于
      Power management fix for 3.3-rc2
      
      Fix for a hibernate (s2disk) regression introduced during the 3.2
      merge window that causes s2disk to trigger BUG_ON() in
      freeze_workqueues_begin() if there is not enough swap space to save
      the image.
      
      * tag 'pm-fix-for-3.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
        PM / Hibernate: Fix s2disk regression related to freezing workqueues
      a51f67a4
  4. 30 1月, 2012 7 次提交
  5. 29 1月, 2012 7 次提交
    • L
      Merge tag 'driver-core-3.3-rc1-bugfixes' of... · 0a962657
      Linus Torvalds 提交于
      Merge tag 'driver-core-3.3-rc1-bugfixes' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
      
      Here are some patches for the 3.3-rc1 tree.
      
      It contains the removal of the sysdev code, now that all users of it are
      gone, as well as some sysfs bugfixes that have been reported by users.
      There are also some documentation updates here as well.
      
      * tag 'driver-core-3.3-rc1-bugfixes' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
        sysfs: Complain bitterly about attempts to remove files from nonexistent directories.
        stable: update documentation to ask for kernel version
        base/core.c:fix typo in comment in function device_add
        Documentation: devres: add allocation functions to list of supported calls
        Documentation update for the driver model core
        kernel-doc: fix new warnings in driver-core
        kernel-doc: fix new warnings in debugfs
        kernel-doc: fix new warnings in device.h
        driver core: remove drivers/base/sys.c and include/linux/sysdev.h
      0a962657
    • L
      Merge tag 'for-linus' of git://github.com/rustyrussell/linux · e3b8369c
      Linus Torvalds 提交于
      * tag 'for-linus' of git://github.com/rustyrussell/linux:
        lguest: remove reference from Documentation/virtual/00-INDEX
        virtio: correct the memory barrier in virtqueue_kick_prepare()
        virtio: fix typos of memory barriers
      e3b8369c
    • L
      Merge branch 'stable/for-linus-fixes-3.3' of... · 6c334f4f
      Linus Torvalds 提交于
      Merge branch 'stable/for-linus-fixes-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
      
      * 'stable/for-linus-fixes-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen/granttable: Disable grant v2 for HVM domains.
        x86: xen: size struct xen_spinlock to always fit in arch_spinlock_t
      6c334f4f
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs · 67d2433e
      Linus Torvalds 提交于
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
        Btrfs: fix reservations in btrfs_page_mkwrite
        Btrfs: advance window_start if we're using a bitmap
        btrfs: mask out gfp flags in releasepage
        Btrfs: fix enospc error caused by wrong checks of the chunk
        Btrfs: do not defrag a file partially
        Btrfs: fix warning for 32-bit build of fs/btrfs/check-integrity.c
        Btrfs: use cluster->window_start when allocating from a cluster bitmap
        Btrfs: Check for NULL page in extent_range_uptodate
        btrfs: Fix busyloops in transaction waiting code
        Btrfs: make sure a bitmap has enough bytes
        Btrfs: fix uninit warning in backref.c
      67d2433e
    • L
      Merge git://www.linux-watchdog.org/linux-watchdog · 1c36ab1a
      Linus Torvalds 提交于
      * git://www.linux-watchdog.org/linux-watchdog:
        watchdog: iTCO_wdt: add Intel Lynx Point DeviceIDs
        watchdog: via_wdt: Set min_timeout and max_timeout for wdt_dev
        watchdog: Fix typo "unexpectdly"
        watchdog: wafer5823wdt: Fix handling WDIOS_DISABLECARD/WDIOS_ENABLECARD options
        watchdog: wm8350_wdt: Fix handling WDIOS_DISABLECARD/WDIOS_ENABLECARD options
        watchdog: Return proper error in nuc900wdt_probe if misc_register fails
        watchdog: Staticise nuc900_wdt
        watchdog: via_wdt: Staticise wdt_pci_table
        watchdog: omap_wdt.c: Fix the mismatch of pm_runtime enable and disable
        watchdog: dw_wdt.c: use devm_request_and_ioremap
        watchdog: imx2_wdt.c: use devm_request_and_ioremap
      1c36ab1a
    • L
      Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm · deb9b4ce
      Linus Torvalds 提交于
      * 'fixes' of git://git.linaro.org/people/rmk/linux-arm: (31 commits)
        ARM: 7304/1: ioremap: fix boundary check when reusing static mapping
        ARM: 7301/1: Rename the T() macro to TUSER() to avoid namespace conflicts
        ARM: 7299/1: ftrace: clear zero bit in reported IPs for Thumb-2
        ARM: 7298/1: realview: fix mapping of MPCore private memory region
        PCMCIA: fix sa1111 oops on remove
        ARM: 7288/1: mach-sa1100: add missing module_init() call
        ARM: 7297/1: smp_twd: make sure timer is stopped before registering it
        ARM: 7296/1: proc-v7.S: remove HARVARD_CACHE preprocessor guards
        ARM: 7295/1: cortex-a7: move proc_info out of !CONFIG_ARM_LPAE block
        ARM: 7293/1: logical_cpu_map: decouple CPU mapping from SMP
        ARM: 7291/1: cache: assume 64-byte L1 cachelines for ARMv7 CPUs
        ARM: 7290/1: vmlinux.lds.S: align the exception fixup table to a 4-byte boundary
        ARM: 7289/1: vmlinux.lds.S: do not hardcode cacheline size as 32 bytes
        MFD: ucb1x00-ts: fix resume failure
        MFD: ucb1x00-core: fix gpiolib direction_output handling
        MFD: ucb1x00-core: fix missing restore of io output data on resume
        MFD: mcp-core: fix mcp_priv() to be more type safe
        MFD: mcp-core: fix complaints from the genirq layer
        Revert "ARM: sa11x0: Implement autoloading of codec and codec pdata for mcp bus."
        Revert "ARM: sa1100: Refactor mcp-sa11x0 to use platform resources."
        ...
      
      Fix up conflict due to arch/arm/mach-mx5/Kconfig having been merged into
      mach-imx5 (commit 784a90c0: "ARM i.MX: Merge i.MX5 support into
      mach-imx"), but the ARM_L1_CACHE_SHIFT_6 entry was moved to be driven by
      the CPU_V7 logic from it in the old location in rmk's branch (commit
      a092f2b1: "ARM: 7291/1: cache: assume 64-byte L1 cachelines for
      ARMv7 CPUs").
      deb9b4ce
    • L
      Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc · 81bc3009
      Linus Torvalds 提交于
      arm-soc fixes for 3.3-rc:
      
      AT91 needed reset fixes which resulted in some minor code refactoring,
      it also adds a feature-removal for one of their platforms for 3.4.
      The USB patches have been acked by Greg K-H.
      
      i.MX and ux500 both have some minor fixes, nothing controversial.
      
      * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
        arch/arm/mach-imx/mach-mx53_ard.c: add missing iounmap
        ARM: imx: iomux-v1.h: Fix build error due to __init annotation
        ARM: at91: Fix at91sam9g45 and at91cap9 reset
        ARM: at91: make rstc soc independent
        ARM: at91: introduce AT91_SAM9_ALT_RESET to select the at91sam9 alternative reset
        ARM: at91: merge at91cap9_ddrsdr.h in at91sam9_ddrsdr.h
        ARM: at91: fix cap9 ddrsdr register
        ARM/USB: at91/ohci-at91: rename vbus_pin_inverted to vbus_pin_active_low
        USB: at91: fix clk_get error handling
        ARM: at91: removal of CAP9 SoC family
        ARM: at91: fix at91rm9200 soc subtype handling
        mach-ux500: no MMC_CAP_SD_HIGHSPEED on Snowball
        mach-ux500: enable ARM errata 764369
        mach-ux500: do not override outer.inv_all
        mach-ux500: musb: now musb is always in OTG mode
        ARM: imx6: add missing twd_clk for imx6q clock
      81bc3009
  6. 28 1月, 2012 8 次提交
    • J
      Logfs: Allow NULL block_isbad() methods · f2933e86
      Joern Engel 提交于
      Not all mtd drivers define block_isbad().  Let's assume no bad blocks
      instead of refusing to mount.
      Signed-off-by: NJoern Engel <joern@logfs.org>
      f2933e86
    • J
      logfs: Grow inode in delete path · bbe01387
      Joern Engel 提交于
      Can be necessary if an inode gets deleted (through -ENOSPC) before being
      written.  Might be better to move this into logfs_write_rec(), but for
      now go with the stupid&safe patch.
      Signed-off-by: NJoern Engel <joern@logfs.org>
      bbe01387
    • J
      logfs: Free areas before calling generic_shutdown_super() · 1bcceaff
      Joern Engel 提交于
      Or hit an assertion in map_invalidatepage() instead.
      Signed-off-by: NJoern Engel <joern@logfs.org>
      1bcceaff
    • J
      logfs: remove useless BUG_ON · 6c69494f
      Joern Engel 提交于
      It prevents write sizes >4k.
      Signed-off-by: NJoern Engel <joern@logfs.org>
      6c69494f
    • P
    • P
      logfs: Propagate page parameter to __logfs_write_inode · 0bd90387
      Prasad Joshi 提交于
      During GC LogFS has to rewrite each valid block to a separate segment.
      Rewrite operation reads data from an old segment and writes it to a
      newly allocated segment. Since every write operation changes data
      block pointers maintained in inode, inode should also be rewritten.
      
      In GC path to avoid AB-BA deadlock LogFS marks a page with
      PG_pre_locked in addition to locking the page (PG_locked). The page
      lock is ignored iff the page is pre-locked.
      
      LogFS uses a special file called segment file. The segment file
      maintains an 8 bytes entry for every segment. It keeps track of erase
      count, level etc. for every segment.
      
      Bad things happen with a segment belonging to the segment file is GCed
      
       ------------[ cut here ]------------
      kernel BUG at /home/prasad/logfs/readwrite.c:297!
      invalid opcode: 0000 [#1] SMP
      Modules linked in: logfs joydev usbhid hid psmouse e1000 i2c_piix4
      		serio_raw [last unloaded: logfs]
      Pid: 20161, comm: mount Not tainted 3.1.0-rc3+ #3 innotek GmbH
      		VirtualBox
      EIP: 0060:[<f809132a>] EFLAGS: 00010292 CPU: 0
      EIP is at logfs_lock_write_page+0x6a/0x70 [logfs]
      EAX: 00000027 EBX: f73f5b20 ECX: c16007c8 EDX: 00000094
      ESI: 00000000 EDI: e59be6e4 EBP: c7337b28 ESP: c7337b18
      DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
      Process mount (pid: 20161, ti=c7336000 task=eb323f70 task.ti=c7336000)
      Stack:
      f8099a3d c7337b24 f73f5b20 00001002 c7337b50 f8091f6d f8099a4d f80994e4
      00000003 00000000 c7337b68 00000000 c67e4400 00001000 c7337b80 f80935e5
      00000000 00000000 00000000 00000000 e1fcf000 0000000f e59be618 c70bf900
      Call Trace:
      [<f8091f6d>] logfs_get_write_page.clone.16+0xdd/0x100 [logfs]
      [<f80935e5>] logfs_mod_segment_entry+0x55/0x110 [logfs]
      [<f809460d>] logfs_get_segment_entry+0x1d/0x20 [logfs]
      [<f8091060>] ? logfs_cleanup_journal+0x50/0x50 [logfs]
      [<f809521b>] ostore_get_erase_count+0x1b/0x40 [logfs]
      [<f80965b8>] logfs_open_area+0xc8/0x150 [logfs]
      [<c141a7ec>] ? kmemleak_alloc+0x2c/0x60
      [<f809668e>] __logfs_segment_write.clone.16+0x4e/0x1b0 [logfs]
      [<c10dd563>] ? mempool_kmalloc+0x13/0x20
      [<c10dd563>] ? mempool_kmalloc+0x13/0x20
      [<f809696f>] logfs_segment_write+0x17f/0x1d0 [logfs]
      [<f8092e8c>] logfs_write_i0+0x11c/0x180 [logfs]
      [<f8092f35>] logfs_write_direct+0x45/0x90 [logfs]
      [<f80934cd>] __logfs_write_buf+0xbd/0xf0 [logfs]
      [<c102900e>] ? kmap_atomic_prot+0x4e/0xe0
      [<f809424b>] logfs_write_buf+0x3b/0x60 [logfs]
      [<f80947a9>] __logfs_write_inode+0xa9/0x110 [logfs]
      [<f8094cb0>] logfs_rewrite_block+0xc0/0x110 [logfs]
      [<f8095300>] ? get_mapping_page+0x10/0x60 [logfs]
      [<f8095aa0>] ? logfs_load_object_aliases+0x2e0/0x2f0 [logfs]
      [<f808e57d>] logfs_gc_segment+0x2ad/0x310 [logfs]
      [<f808e62a>] __logfs_gc_once+0x4a/0x80 [logfs]
      [<f808ed43>] logfs_gc_pass+0x683/0x6a0 [logfs]
      [<f8097a89>] logfs_mount+0x5a9/0x680 [logfs]
      [<c1126b21>] mount_fs+0x21/0xd0
      [<c10f6f6f>] ? __alloc_percpu+0xf/0x20
      [<c113da41>] ? alloc_vfsmnt+0xb1/0x130
      [<c113db4b>] vfs_kern_mount+0x4b/0xa0
      [<c113e06e>] do_kern_mount+0x3e/0xe0
      [<c113f60d>] do_mount+0x34d/0x670
      [<c10f2749>] ? strndup_user+0x49/0x70
      [<c113fcab>] sys_mount+0x6b/0xa0
      [<c142d87c>] syscall_call+0x7/0xb
      Code: f8 e8 8b 93 39 c9 8b 45 f8 3e 0f ba 28 00 19 d2 85 d2 74 ca eb d0 0f 0b 8d 45 fc 89 44 24 04 c7 04 24 3d 9a 09 f8 e8 09 92 39 c9 <0f> 0b 8d 74 26 00 55 89 e5 3e 8d 74 26 00 8b 10 80 e6 01 74 09
      EIP: [<f809132a>] logfs_lock_write_page+0x6a/0x70 [logfs] SS:ESP 0068:c7337b18
      ---[ end trace 96e67d5b3aa3d6ca ]---
      
      The patch passes locked page to __logfs_write_inode. It calls function
      logfs_get_wblocks() to pre-lock the page. This ensures any further
      attempts to lock the page are ignored (esp from get_erase_count).
      Acked-by: NJoern Engel <joern@logfs.org>
      Signed-off-by: NPrasad Joshi <prasadjoshi.linux@gmail.com>
      0bd90387
    • P
      logfs: set superblock shutdown flag after generic sb shutdown · ecfd8909
      Prasad Joshi 提交于
      While unmounting the file system LogFS calls generic_shutdown_super.
      The function does file system independent superblock shutdown.
      However, it might result in call file system specific inode eviction.
      
      LogFS marks FS shutting down by setting bit LOGFS_SB_FLAG_SHUTDOWN in
      super->s_flags. Since, inode eviction might call truncate on inode,
      following BUG is observed when file system is unmounted:
      
      ------------[ cut here ]------------
      kernel BUG at /home/prasad/logfs/segment.c:362!
      invalid opcode: 0000 [#1] PREEMPT SMP
      CPU 3
      Modules linked in: logfs binfmt_misc ppdev virtio_blk parport_pc lp
      	parport psmouse floppy virtio_pci serio_raw virtio_ring virtio
      
      Pid: 1933, comm: umount Not tainted 3.0.0+ #4 Bochs Bochs
      RIP: 0010:[<ffffffffa008c841>]  [<ffffffffa008c841>]
      		logfs_segment_write+0x211/0x230 [logfs]
      RSP: 0018:ffff880062d7b9e8  EFLAGS: 00010202
      RAX: 000000000000000e RBX: ffff88006eca9000 RCX: 0000000000000000
      RDX: ffff88006fd87c40 RSI: ffffea00014ff468 RDI: ffff88007b68e000
      RBP: ffff880062d7ba48 R08: 8000000020451430 R09: 0000000000000000
      R10: dead000000100100 R11: 0000000000000000 R12: ffff88006fd87c40
      R13: ffffea00014ff468 R14: ffff88005ad0a460 R15: 0000000000000000
      FS:  00007f25d50ea760(0000) GS:ffff88007fd80000(0000)
      	knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 0000000000d05e48 CR3: 0000000062c72000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process umount (pid: 1933, threadinfo ffff880062d7a000,
      	task ffff880070b44500)
      Stack:
      ffff880062d7ba38 ffff88005ad0a508 0000000000001000 0000000000000000
      8000000020451430 ffffea00014ff468 ffff880062d7ba48 ffff88005ad0a460
      ffff880062d7bad8 ffffea00014ff468 ffff88006fd87c40 0000000000000000
      Call Trace:
      [<ffffffffa0088fee>] logfs_write_i0+0x12e/0x190 [logfs]
      [<ffffffffa0089360>] __logfs_write_rec+0x140/0x220 [logfs]
      [<ffffffffa0089312>] __logfs_write_rec+0xf2/0x220 [logfs]
      [<ffffffffa00894a4>] logfs_write_rec+0x64/0xd0 [logfs]
      [<ffffffffa0089616>] __logfs_write_buf+0x106/0x110 [logfs]
      [<ffffffffa008a19e>] logfs_write_buf+0x4e/0x80 [logfs]
      [<ffffffffa008a6b8>] __logfs_write_inode+0x98/0x110 [logfs]
      [<ffffffffa008a7c4>] logfs_truncate+0x54/0x290 [logfs]
      [<ffffffffa008abfc>] logfs_evict_inode+0xdc/0x190 [logfs]
      [<ffffffff8115eef5>] evict+0x85/0x170
      [<ffffffff8115f126>] iput+0xe6/0x1b0
      [<ffffffff8115b4a8>] shrink_dcache_for_umount_subtree+0x218/0x280
      [<ffffffff8115ce91>] shrink_dcache_for_umount+0x51/0x90
      [<ffffffff8114796c>] generic_shutdown_super+0x2c/0x100
      [<ffffffffa008cc47>] logfs_kill_sb+0x57/0xf0 [logfs]
      [<ffffffff81147de5>] deactivate_locked_super+0x45/0x70
      [<ffffffff811487ea>] deactivate_super+0x4a/0x70
      [<ffffffff81163934>] mntput_no_expire+0xa4/0xf0
      [<ffffffff8116469f>] sys_umount+0x6f/0x380
      [<ffffffff814dd46b>] system_call_fastpath+0x16/0x1b
      Code: 55 c8 49 8d b6 a8 00 00 00 45 89 f9 45 89 e8 4c 89 e1 4c 89 55
      b8 c7 04 24 00 00 00 00 e8 68 fc ff ff 4c 8b 55 b8 e9 3c ff ff ff <0f>
      0b 0f 0b c7 45 c0 00 00 00 00 e9 44 fe ff ff 66 66 66 66 66
      RIP  [<ffffffffa008c841>] logfs_segment_write+0x211/0x230 [logfs]
      RSP <ffff880062d7b9e8>
      ---[ end trace fe6b040cea952290 ]---
      
      Therefore, move super->s_flags setting after the fs-indenpendent work
      has been finished.
      Reviewed-by: NJoern Engel <joern@logfs.org>
      Signed-off-by: NPrasad Joshi <prasadjoshi.linux@gmail.com>
      ecfd8909
    • P
      logfs: take write mutex lock during fsync and sync · 13ced29c
      Prasad Joshi 提交于
      LogFS uses super->s_write_mutex while writing data to disk. Taking the
      same mutex lock in sync and fsync code path solves the following BUG:
      
      ------------[ cut here ]------------
      kernel BUG at /home/prasad/logfs/dev_bdev.c:134!
      
      Pid: 2387, comm: flush-253:16 Not tainted 3.0.0+ #4 Bochs Bochs
      RIP: 0010:[<ffffffffa007deed>]  [<ffffffffa007deed>]
                      bdev_writeseg+0x25d/0x270 [logfs]
      Call Trace:
      [<ffffffffa007c381>] logfs_open_area+0x91/0x150 [logfs]
      [<ffffffff8128dcb2>] ? find_level.clone.9+0x62/0x100
      [<ffffffffa007c49c>] __logfs_segment_write.clone.20+0x5c/0x190 [logfs]
      [<ffffffff810ef005>] ? mempool_kmalloc+0x15/0x20
      [<ffffffff810ef383>] ? mempool_alloc+0x53/0x130
      [<ffffffffa007c7a4>] logfs_segment_write+0x1d4/0x230 [logfs]
      [<ffffffffa0078f8e>] logfs_write_i0+0x12e/0x190 [logfs]
      [<ffffffffa0079300>] __logfs_write_rec+0x140/0x220 [logfs]
      [<ffffffffa0079444>] logfs_write_rec+0x64/0xd0 [logfs]
      [<ffffffffa00795b6>] __logfs_write_buf+0x106/0x110 [logfs]
      [<ffffffffa007a13e>] logfs_write_buf+0x4e/0x80 [logfs]
      [<ffffffffa0073e33>] __logfs_writepage+0x23/0x80 [logfs]
      [<ffffffffa007410c>] logfs_writepage+0xdc/0x110 [logfs]
      [<ffffffff810f5ba7>] __writepage+0x17/0x40
      [<ffffffff810f6208>] write_cache_pages+0x208/0x4f0
      [<ffffffff810f5b90>] ? set_page_dirty+0x70/0x70
      [<ffffffff810f653a>] generic_writepages+0x4a/0x70
      [<ffffffff810f75d1>] do_writepages+0x21/0x40
      [<ffffffff8116b9d1>] writeback_single_inode+0x101/0x250
      [<ffffffff8116bdbd>] writeback_sb_inodes+0xed/0x1c0
      [<ffffffff8116c5fb>] writeback_inodes_wb+0x7b/0x1e0
      [<ffffffff8116cc23>] wb_writeback+0x4c3/0x530
      [<ffffffff814d984d>] ? sub_preempt_count+0x9d/0xd0
      [<ffffffff8116cd6b>] wb_do_writeback+0xdb/0x290
      [<ffffffff814d984d>] ? sub_preempt_count+0x9d/0xd0
      [<ffffffff814d6208>] ? _raw_spin_unlock_irqrestore+0x18/0x40
      [<ffffffff8105aa5a>] ? del_timer+0x8a/0x120
      [<ffffffff8116cfac>] bdi_writeback_thread+0x8c/0x2e0
      [<ffffffff8116cf20>] ? wb_do_writeback+0x290/0x290
      [<ffffffff8106d2e6>] kthread+0x96/0xa0
      [<ffffffff814de514>] kernel_thread_helper+0x4/0x10
      [<ffffffff8106d250>] ? kthread_worker_fn+0x190/0x190
      [<ffffffff814de510>] ? gs_change+0xb/0xb
      RIP  [<ffffffffa007deed>] bdev_writeseg+0x25d/0x270 [logfs]
      ---[ end trace 0211ad60a57657c4 ]---
      Reviewed-by: NJoern Engel <joern@logfs.org>
      Signed-off-by: NPrasad Joshi <prasadjoshi.linux@gmail.com>
      13ced29c