07 Jan, 2015

1 commit

  • SRCU is not necessary to be compiled by default in all cases. For tinification
    efforts not compiling SRCU unless necessary is desirable.

    The current patch tries to make compiling SRCU optional by introducing a new
    Kconfig option CONFIG_SRCU which is selected when any of the components making
    use of SRCU are selected.

    If we do not select CONFIG_SRCU, srcu.o will not be compiled at all.

    text data bss dec hex filename
    2007 0 0 2007 7d7 kernel/rcu/srcu.o

    Size of arch/powerpc/boot/zImage changes from

    text data bss dec hex filename
    831552 64180 23944 919676 e087c arch/powerpc/boot/zImage : before
    829504 64180 23952 917636 e0084 arch/powerpc/boot/zImage : after

    so the savings are about ~2000 bytes.

    Signed-off-by: Pranith Kumar
    CC: Paul E. McKenney
    CC: Josh Triplett
    CC: Lai Jiangshan
    Signed-off-by: Paul E. McKenney
    [ paulmck: resolve conflict due to removal of arch/ia64/kvm/Kconfig. ]

    Pranith Kumar
     

29 Jan, 2014

1 commit

  • After the change titled "Btrfs: add support for inode properties", if
    btrfs was built-in the kernel (i.e. not as a module), it would cause a
    kernel panic, as reported recently by Fengguang:

    [ 2.024722] BUG: unable to handle kernel NULL pointer dereference at (null)
    [ 2.027814] IP: [] crc32c+0xc/0x6b
    [ 2.028684] PGD 0
    [ 2.028684] Oops: 0000 [#1] SMP
    [ 2.028684] Modules linked in:
    [ 2.028684] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.13.0-rc7-04795-ga7b57c2 #1
    [ 2.028684] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [ 2.028684] task: ffff88000edba100 ti: ffff88000edd6000 task.ti: ffff88000edd6000
    [ 2.028684] RIP: 0010:[] [] crc32c+0xc/0x6b
    [ 2.028684] RSP: 0000:ffff88000edd7e58 EFLAGS: 00010246
    [ 2.028684] RAX: 0000000000000000 RBX: ffffffff82295550 RCX: 0000000000000000
    [ 2.028684] RDX: 0000000000000011 RSI: ffffffff81efe393 RDI: 00000000fffffffe
    [ 2.028684] RBP: ffff88000edd7e60 R08: 0000000000000003 R09: 0000000000015d20
    [ 2.028684] R10: ffffffff81ef225e R11: ffffffff811b0222 R12: ffffffffffffffff
    [ 2.028684] R13: 0000000000000239 R14: 0000000000000000 R15: 0000000000000000
    [ 2.028684] FS: 0000000000000000(0000) GS:ffff88000fa00000(0000) knlGS:0000000000000000
    [ 2.028684] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    [ 2.028684] CR2: 0000000000000000 CR3: 000000000220c000 CR4: 00000000000006f0
    [ 2.028684] Stack:
    [ 2.028684] ffffffff82295550 ffff88000edd7e80 ffffffff8238af62 ffffffff8238ac05
    [ 2.028684] 0000000000000000 ffff88000edd7e98 ffffffff8238ac0f ffffffff8238ac05
    [ 2.028684] ffff88000edd7f08 ffffffff810002ba ffff88000edd7f00 ffffffff810e2404
    [ 2.028684] Call Trace:
    [ 2.028684] [] btrfs_props_init+0x4f/0x96
    [ 2.028684] [] ? ftrace_define_fields_btrfs_space_reservation+0x145/0x145
    [ 2.028684] [] init_btrfs_fs+0xa/0xf0
    [ 2.028684] [] ? ftrace_define_fields_btrfs_space_reservation+0x145/0x145
    [ 2.028684] [] do_one_initcall+0xa4/0x13a
    [ 2.028684] [] ? parse_args+0x25f/0x33d
    [ 2.028684] [] kernel_init_freeable+0x1aa/0x230
    [ 2.028684] [] ? do_early_param+0x88/0x88
    [ 2.028684] [] ? rest_init+0x89/0x89
    [ 2.028684] [] kernel_init+0xe/0x109

    The issue here is that the initialization function of btrfs (super.c:init_btrfs_fs)
    started using crc32c (from lib/libcrc32c.c). But when it needs to call crc32c (as
    part of the properties initialization routine), the libcrc32c is not yet initialized,
    so crc32c derreferenced a NULL pointer (lib/libcrc32c.c:tfm), causing the kernel
    panic on boot.

    The approach to fix this is to use crypto component directly to use its crc32c (which
    is basically what lib/libcrc32c.c is, a wrapper around crypto). This is what ext4 is
    doing as well, it uses crypto directly to get crc32c functionality.

    Verified this works both when btrfs is built-in and when it's loadable kernel module.

    Signed-off-by: Filipe David Borba Manana
    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Filipe David Borba Manana
     

23 Nov, 2013

1 commit

  • Pull btrfs fixes from Chris Mason:
    "Almost all of these are bug fixes. Dave Sterba's documentation update
    is the big exception because he removed our promises to set any
    machine running Btrfs on fire"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
    Documentation: filesystems: update btrfs tools section
    Documentation: filesystems: add new btrfs mount options
    btrfs: update kconfig help text
    btrfs: fix bio_size_ok() for max_sectors > 0xffff
    btrfs: Use trace condition for get_extent tracepoint
    btrfs: fix typo in the log message
    Btrfs: fix list delete warning when removing ordered root from the list
    Btrfs: print bytenr instead of page pointer in check-int
    Btrfs: remove dead codes from ctree.h
    Btrfs: don't wait for ordered data outside desired range
    Btrfs: fix lockdep error in async commit
    Btrfs: avoid heavy operations in btrfs_commit_super
    Btrfs: fix __btrfs_start_workers retval
    Btrfs: disable online raid-repair on ro mounts
    Btrfs: do not inc uncorrectable_errors counter on ro scrubs
    Btrfs: only drop modified extents if we logged the whole inode
    Btrfs: make sure to copy everything if we rename
    Btrfs: don't BUG_ON() if we get an error walking backrefs

    Linus Torvalds
     

21 Nov, 2013

1 commit


16 Nov, 2013

1 commit

  • Pull trivial tree updates from Jiri Kosina:
    "Usual earth-shaking, news-breaking, rocket science pile from
    trivial.git"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (23 commits)
    doc: usb: Fix typo in Documentation/usb/gadget_configs.txt
    doc: add missing files to timers/00-INDEX
    timekeeping: Fix some trivial typos in comments
    mm: Fix some trivial typos in comments
    irq: Fix some trivial typos in comments
    NUMA: fix typos in Kconfig help text
    mm: update 00-INDEX
    doc: Documentation/DMA-attributes.txt fix typo
    DRM: comment: `halve' -> `half'
    Docs: Kconfig: `devlopers' -> `developers'
    doc: typo on word accounting in kprobes.c in mutliple architectures
    treewide: fix "usefull" typo
    treewide: fix "distingush" typo
    mm/Kconfig: Grammar s/an/a/
    kexec: Typo s/the/then/
    Documentation/kvm: Update cpuid documentation for steal time and pv eoi
    treewide: Fix common typo in "identify"
    __page_to_pfn: Fix typo in comment
    Correct some typos for word frequency
    clk: fixed-factor: Fix a trivial typo
    ...

    Linus Torvalds
     

14 Oct, 2013

1 commit


01 Sep, 2013

1 commit

  • One of the complaints we get a lot is how many BUG_ON()'s we have. So to help
    with this I'm introducing a kconfig option to enable/disable a new ASSERT()
    mechanism much like what XFS does. This will allow us developers to still get
    our nice panics but allow users/distros to compile them out. With this we can
    go through and convert any BUG_ON()'s that we have to catch actual programming
    mistakes to the new ASSERT() and then fix everybody else to return errors. This
    will also allow developers to leave sanity checks in their new code to make sure
    we don't trip over problems while testing stuff and vetting new features.
    Thanks,

    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Josef Bacik
     

07 May, 2013

3 commits

  • Clean up the leak debugging in extent_io.c by moving
    the debug code into functions. This also removes the
    list_heads used for debugging from the extent_buffer
    and extent_state structures when debug is not enabled.

    Since we need a global debug config to do that last
    part, implement CONFIG_BTRFS_DEBUG to accommodate.

    Thanks to Dave Sterba for the Kconfig bit.

    Signed-off-by: Eric Sandeen
    Reviewed-by: David Sterba
    Signed-off-by: Josef Bacik

    Eric Sandeen
     
  • The Kconfig title does not make much sense after the cleanup of
    CONFIG_EXPERIMENTAL option, align the wording with other filesystems.

    Signed-off-by: David Sterba
    Signed-off-by: Josef Bacik

    David Sterba
     
  • We keep hitting bugs in the tree log replay because btrfs_remove_free_space
    doesn't account for some corner case. So add a bunch of tests to try and fully
    test btrfs_remove_free_space since the only time it is called is during tree log
    replay. These tests all finish successfully, so as we find more of these bugs
    we need to add to these tests to make sure we don't regress in fixing things.
    I've hidden the tests behind a Kconfig option, but they take no time to run so
    all btrfs developers should have this turned on all the time. Thanks,

    Signed-off-by: Josef Bacik

    Josef Bacik
     

03 Mar, 2013

1 commit

  • Pull btrfs update from Chris Mason:
    "The biggest feature in the pull is the new (and still experimental)
    raid56 code that David Woodhouse started long ago. I'm still working
    on the parity logging setup that will avoid inconsistent parity after
    a crash, so this is only for testing right now. But, I'd really like
    to get it out to a broader audience to hammer out any performance
    issues or other problems.

    scrub does not yet correct errors on raid5/6 either.

    Josef has another pass at fsync performance. The big change here is
    to combine waiting for metadata with waiting for data, which is a big
    latency win. It is also step one toward using atomics from the
    hardware during a commit.

    Mark Fasheh has a new way to use btrfs send/receive to send only the
    metadata changes. SUSE is using this to make snapper more efficient
    at finding changes between snapshosts.

    Snapshot-aware defrag is also included.

    Otherwise we have a large number of fixes and cleanups. Eric Sandeen
    wins the award for removing the most lines, and I'm hoping we steal
    this idea from XFS over and over again."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (118 commits)
    btrfs: fixup/remove module.h usage as required
    Btrfs: delete inline extents when we find them during logging
    btrfs: try harder to allocate raid56 stripe cache
    Btrfs: cleanup to make the function btrfs_delalloc_reserve_metadata more logic
    Btrfs: don't call btrfs_qgroup_free if just btrfs_qgroup_reserve fails
    Btrfs: remove reduplicate check about root in the function btrfs_clean_quota_tree
    Btrfs: return ENOMEM rather than use BUG_ON when btrfs_alloc_path fails
    Btrfs: fix missing deleted items in btrfs_clean_quota_tree
    btrfs: use only inline_pages from extent buffer
    Btrfs: fix wrong reserved space when deleting a snapshot/subvolume
    Btrfs: fix wrong reserved space in qgroup during snap/subv creation
    Btrfs: remove unnecessary dget_parent/dput when creating the pending snapshot
    btrfs: remove a printk from scan_one_device
    Btrfs: fix NULL pointer after aborting a transaction
    Btrfs: fix memory leak of log roots
    Btrfs: copy everything if we've created an inline extent
    btrfs: cleanup for open-coded alignment
    Btrfs: do not change inode flags in rename
    Btrfs: use reserved space for creating a snapshot
    clear chunk_alloc flag on retryable failure
    ...

    Linus Torvalds
     

05 Feb, 2013

1 commit


02 Feb, 2013

1 commit

  • This builds on David Woodhouse's original Btrfs raid5/6 implementation.
    The code has changed quite a bit, blame Chris Mason for any bugs.

    Read/modify/write is done after the higher levels of the filesystem have
    prepared a given bio. This means the higher layers are not responsible
    for building full stripes, and they don't need to query for the topology
    of the extents that may get allocated during delayed allocation runs.
    It also means different files can easily share the same stripe.

    But, it does expose us to incorrect parity if we crash or lose power
    while doing a read/modify/write cycle. This will be addressed in a
    later commit.

    Scrub is unable to repair crc errors on raid5/6 chunks.

    Discard does not work on raid5/6 (yet)

    The stripe size is fixed at 64KiB per disk. This will be tunable
    in a later commit.

    Signed-off-by: Chris Mason

    David Woodhouse
     

22 Jan, 2013

1 commit

  • The CONFIG_EXPERIMENTAL config item has not carried much meaning for a
    while now and is almost always enabled by default. As agreed during the
    Linux kernel summit, remove it from any "depends on" lines in Kconfigs.

    Cc: Chris Mason
    Cc: Al Viro
    Signed-off-by: Kees Cook
    Signed-off-by: Greg Kroah-Hartman

    Kees Cook
     

22 Dec, 2011

1 commit


22 Dec, 2010

1 commit

  • Lzo is a much faster compression algorithm than gzib, so would allow
    more users to enable transparent compression, and some users can
    choose from compression ratio and speed for different applications

    Usage:

    # mount -t btrfs -o compress[=] dev /mnt
    or
    # mount -t btrfs -o compress-force[=] dev /mnt

    "-o compress" without argument is still allowed for compatability.

    Compatibility:

    If we mount a filesystem with lzo compression, it will not be able be
    mounted in old kernels. One reason is, otherwise btrfs will directly
    dump compressed data, which sits in inline extent, to user.

    Performance:

    The test copied a linux source tarball (~400M) from an ext4 partition
    to the btrfs partition, and then extracted it.

    (time in second)
    lzo zlib nocompress
    copy: 10.6 21.7 14.9
    extract: 70.1 94.4 66.6

    (data size in MB)
    lzo zlib nocompress
    copy: 185.87 108.69 394.49
    extract: 193.80 132.36 381.21

    Changelog:

    v1 -> v2:
    - Select LZO_COMPRESS and LZO_DECOMPRESS in btrfs Kconfig.
    - Add incompability flag.
    - Fix error handling in compress code.

    Signed-off-by: Li Zefan

    Li Zefan
     

18 Dec, 2009

1 commit

  • This reverts commit e4c570c4cb7a95dbfafa3d016d2739bf3fdfe319, as
    requested by Alexey:

    "I think I gave a good enough arguments to not merge it.
    To iterate:
    * patch makes impossible to start using ext3 on EXT3_FS=n kernels
    without reboot.
    * this is done only for one pointer on task_struct"

    None of config options which define task_struct are tristate directly
    or effectively."

    Requested-by: Alexey Dobriyan
    Acked-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

16 Dec, 2009

1 commit

  • journal_info in task_struct is used in journaling file system only. So
    introduce CONFIG_FS_JOURNAL_INFO and make it conditional.

    Signed-off-by: Hiroshi Shimamoto
    Cc: Chris Mason
    Cc: "Theodore Ts'o"
    Cc: Steven Whitehouse
    Cc: KONISHI Ryusuke
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Hiroshi Shimamoto
     

04 Feb, 2009

1 commit

  • This patch adds a menu entry to kconfig to enable acls for btrfs.
    This allows you to enable FS_POSIX_ACL at kernel compile time.

    (updated by Jeff Mahoney to make the changes in fs/btrfs/Kconfig instead)

    Signed-off-by: Christian Hesse
    Signed-off-by: Jeff Mahoney

    Christian Hesse
     

22 Jan, 2009

1 commit