18 May, 2016

1 commit

  • Pull trivial tree updates from Jiri Kosina.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (21 commits)
    gitignore: fix wording
    mfd: ab8500-debugfs: fix "between" in printk
    memstick: trivial fix of spelling mistake on management
    cpupowerutils: bench: fix "average"
    treewide: Fix typos in printk
    IB/mlx4: printk fix
    pinctrl: sirf/atlas7: fix printk spelling
    serial: mctrl_gpio: Grammar s/lines GPIOs/line GPIOs/, /sets/set/
    w1: comment spelling s/minmum/minimum/
    Blackfin: comment spelling s/divsor/divisor/
    metag: Fix misspellings in comments.
    ia64: Fix misspellings in comments.
    hexagon: Fix misspellings in comments.
    tools/perf: Fix misspellings in comments.
    cris: Fix misspellings in comments.
    c6x: Fix misspellings in comments.
    blackfin: Fix misspelling of 'register' in comment.
    avr32: Fix misspelling of 'definitions' in comment.
    treewide: Fix typos in printk
    Doc: treewide : Fix typos in DocBook/filesystem.xml
    ...

    Linus Torvalds
     

18 Apr, 2016

1 commit


11 Apr, 2016

1 commit


15 Jan, 2016

1 commit

  • Mark those kmem allocations that are known to be easily triggered from
    userspace as __GFP_ACCOUNT/SLAB_ACCOUNT, which makes them accounted to
    memcg. For the list, see below:

    - threadinfo
    - task_struct
    - task_delay_info
    - pid
    - cred
    - mm_struct
    - vm_area_struct and vm_region (nommu)
    - anon_vma and anon_vma_chain
    - signal_struct
    - sighand_struct
    - fs_struct
    - files_struct
    - fdtable and fdtable->full_fds_bits
    - dentry and external_name
    - inode for all filesystems. This is the most tedious part, because
    most filesystems overwrite the alloc_inode method.

    The list is far from complete, so feel free to add more objects.
    Nevertheless, it should be close to "account everything" approach and
    keep most workloads within bounds. Malevolent users will be able to
    breach the limit, but this was possible even with the former "account
    everything" approach (simply because it did not account everything in
    fact).

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Vladimir Davydov
    Acked-by: Johannes Weiner
    Acked-by: Michal Hocko
    Cc: Tejun Heo
    Cc: Greg Thelen
    Cc: Christoph Lameter
    Cc: Pekka Enberg
    Cc: David Rientjes
    Cc: Joonsoo Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vladimir Davydov
     

16 Apr, 2015

1 commit


21 Jan, 2015

1 commit

  • Since "BDI: Provide backing device capability information [try #3]" the
    backing_dev_info structure also provides flags for the kind of mmap
    operation available in a nommu environment, which is entirely unrelated
    to it's original purpose.

    Introduce a new nommu-only file operation to provide this information to
    the nommu mmap code instead. Splitting this from the backing_dev_info
    structure allows to remove lots of backing_dev_info instance that aren't
    otherwise needed, and entirely gets rid of the concept of providing a
    backing_dev_info for a character device. It also removes the need for
    the mtd_inodefs filesystem.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Tejun Heo
    Acked-by: Brian Norris
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

20 Oct, 2014

1 commit


03 Apr, 2014

1 commit

  • Mark function as static in exofs/super.c because it is not used outside
    this file.

    This also eliminates the following warning in exofs/super.c:
    fs/exofs/super.c:546:5: warning: no previous prototype \
    for __alloc_dev_table[-Wmissing-prototypes]

    Signed-off-by: Rashika Kheria
    Reviewed-by: Josh Triplett
    Signed-off-by: Boaz Harrosh

    Rashika Kheria
     

04 Mar, 2013

1 commit

  • Modify the request_module to prefix the file system type with "fs-"
    and add aliases to all of the filesystems that can be built as modules
    to match.

    A common practice is to build all of the kernel code and leave code
    that is not commonly needed as modules, with the result that many
    users are exposed to any bug anywhere in the kernel.

    Looking for filesystems with a fs- prefix limits the pool of possible
    modules that can be loaded by mount to just filesystems trivially
    making things safer with no real cost.

    Using aliases means user space can control the policy of which
    filesystem modules are auto-loaded by editing /etc/modprobe.d/*.conf
    with blacklist and alias directives. Allowing simple, safe,
    well understood work-arounds to known problematic software.

    This also addresses a rare but unfortunate problem where the filesystem
    name is not the same as it's module name and module auto-loading
    would not work. While writing this patch I saw a handful of such
    cases. The most significant being autofs that lives in the module
    autofs4.

    This is relevant to user namespaces because we can reach the request
    module in get_fs_type() without having any special permissions, and
    people get uncomfortable when a user specified string (in this case
    the filesystem type) goes all of the way to request_module.

    After having looked at this issue I don't think there is any
    particular reason to perform any filtering or permission checks beyond
    making it clear in the module request that we want a filesystem
    module. The common pattern in the kernel is to call request_module()
    without regards to the users permissions. In general all a filesystem
    module does once loaded is call register_filesystem() and go to sleep.
    Which means there is not much attack surface exposed by loading a
    filesytem module unless the filesystem is mounted. In a user
    namespace filesystems are not mounted unless .fs_flags = FS_USERNS_MOUNT,
    which most filesystems do not set today.

    Acked-by: Serge Hallyn
    Acked-by: Kees Cook
    Reported-by: Kees Cook
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

10 Oct, 2012

1 commit


03 Oct, 2012

1 commit

  • There's no reason to call rcu_barrier() on every
    deactivate_locked_super(). We only need to make sure that all delayed rcu
    free inodes are flushed before we destroy related cache.

    Removing rcu_barrier() from deactivate_locked_super() affects some fast
    paths. E.g. on my machine exit_group() of a last process in IPC
    namespace takes 0.07538s. rcu_barrier() takes 0.05188s of that time.

    Signed-off-by: Kirill A. Shutemov
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Al Viro

    Kirill A. Shutemov
     

02 Aug, 2012

1 commit

  • Exofs has the '->write_super()' handler and makes some use of the '->s_dirt'
    superblock flag, but it really needs neither of them because it never sets
    's_dirt' to one which means the VFS never calls its '->write_super()' handler.
    Thus, remove both.

    Note, I am trying to remove both 's_dirt' and 'write_super()' from VFS
    altogether once all users are gone.

    Signed-off-by: Artem Bityutskiy
    Signed-off-by: Boaz Harrosh

    Artem Bityutskiy
     

21 May, 2012

2 commits

  • Introduce sysfs infrastructure for exofs cluster filesystem.

    Each OSD target shows up as below in the sysfs hierarchy:
    /sys/fs/exofs/_/devX

    Where _ is the unique identification
    of a Superblock.

    Where devX: 0 < device_table_size. They are ordered
    in device-table order as specified to the mkfs.exofs command

    Each OSD device devX has following attributes :
    osdname - ReadOnly
    systemid - ReadOnly
    uri - Read/Write

    It is up to user-mode to update devX/uri for support of
    autologin.

    These sysfs information are used both for autologin as well
    as support for exporting exofs via a pNFSD server in user-mode.
    (.eg NFS-Ganesha)

    Signed-off-by: Sachin Bhamare
    Signed-off-by: Boaz Harrosh

    Sachin Bhamare
     
  • If at exofs_fill_super() we had an early termination
    do to any error, like an IO error while reading the
    super-block. We would crash inside exofs_free_sbi().

    This is because sbi->oc.numdevs was set to 1, before
    we actually have a device table at all.

    Fix it by moving the sbi->oc.numdevs = 1 to after the
    allocation of the device table.

    Reported-by: Johannes Schild

    Stable: This is a bug since v3.2.0
    CC: Stable Tree
    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     

29 Mar, 2012

1 commit


21 Mar, 2012

2 commits


20 Mar, 2012

3 commits


09 Jan, 2012

1 commit


04 Jan, 2012

1 commit

  • Seeing that just about every destructor got that INIT_LIST_HEAD() copied into
    it, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once();
    the cost of taking it into inode_init_always() will be negligible for pipes
    and sockets and negative for everything else. Not to mention the removal of
    boilerplate code from ->destroy_inode() instances...

    Signed-off-by: Al Viro

    Al Viro
     

01 Nov, 2011

1 commit

  • Some files were using the complete module.h infrastructure without
    actually including the header at all. Fix them up in advance so
    once the implicit presence is removed, we won't get failures like this:

    CC [M] fs/nfsd/nfssvc.o
    fs/nfsd/nfssvc.c: In function 'nfsd_create_serv':
    fs/nfsd/nfssvc.c:335: error: 'THIS_MODULE' undeclared (first use in this function)
    fs/nfsd/nfssvc.c:335: error: (Each undeclared identifier is reported only once
    fs/nfsd/nfssvc.c:335: error: for each function it appears in.)
    fs/nfsd/nfssvc.c: In function 'nfsd':
    fs/nfsd/nfssvc.c:555: error: implicit declaration of function 'module_put_and_exit'
    make[3]: *** [fs/nfsd/nfssvc.o] Error 1

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker
     

15 Oct, 2011

1 commit

  • All users of the ore will need to check if current code
    supports the given layout. For example RAID5/6 is not
    currently supported.

    So move all the checks from exofs/super.c to a new
    ore_verify_layout() to be used by ore users.

    Note that any new layout should be passed through the
    ore_verify_layout() because the ore engine will prepare
    and verify some internal members of ore_layout, and
    assumes it's called.

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     

04 Oct, 2011

1 commit

  • In the pNFS obj-LD the device table at the layout level needs
    to point to a device_cache node, where it is possible and likely
    that many layouts will point to the same device-nodes.

    In Exofs we have a more orderly structure where we have a single
    array of devices that repeats twice for a round-robin view of the
    device table

    This patch moves to a model that can be used by the pNFS obj-LD
    where struct ore_components holds an array of ore_dev-pointers.
    (ore_dev is newly defined and contains a struct osd_dev *od
    member)

    Each pointer in the array of pointers will point to a bigger
    user-defined dev_struct. That can be accessed by use of the
    container_of macro.

    In Exofs an __alloc_dev_table() function allocates the
    ore_dev-pointers array as well as an exofs_dev array, in one
    allocation and does the addresses dance to set everything pointing
    correctly. It still keeps the double allocation trick for the
    inodes round-robin view of the table.

    The device table is always allocated dynamically, also for the
    single device case. So it is unconditionally freed at umount.

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     

03 Oct, 2011

3 commits

  • The struct pnfs_osd_data_map data_map member of exofs_sb_info was
    never used after mount. In fact all it's members were duplicated
    by the ore_layout structure. So just remove the duplicated information.

    Also removed some stupid, but perfectly supported, restrictions on
    layout parameters. The case where num_devices is not divisible by
    mirror_count+1 is perfectly fine since the rotating device view
    will eventually use all the devices it can get.

    Signed-off-by: Boaz Harrosh
    Signed-off-by: Benny Halevy

    Boaz Harrosh
     
  • ore_components already has a comps member so this leads
    to things like comps->comps which is annoying. the name oc
    was already used in new code. So rename all old usage of
    ore_components comps => ore_components oc.

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • This quiets the following sparse noise:

    warning: symbol 'exofs_sync_fs' was not declared. Should it be static?
    warning: symbol 'exofs_free_sbi' was not declared. Should it be static?
    warning: symbol 'exofs_get_parent' was not declared. Should it be static?

    Signed-off-by: H Hartley Sweeten
    Signed-off-by: Boaz Harrosh

    H Hartley Sweeten
     

07 Aug, 2011

3 commits

  • ORE stands for "Objects Raid Engine"

    This patch is a mechanical rename of everything that was in ios.c
    and its API declaration to an ore.c and an osd_ore.h header. The ore
    engine will later be used by the pnfs objects layout driver.

    * File ios.c => ore.c

    * Declaration of types and API are moved from exofs.h to a new
    osd_ore.h

    * All used types are prefixed by ore_ from their exofs_ name.

    * Shift includes from exofs.h to osd_ore.h so osd_ore.h is
    independent, include it from exofs.h.

    Other than a pure rename there are no other changes. Next patch
    will move the ore into it's own module and will export the API
    to be used by exofs and later the layout driver

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • Exofs raid engine was saving on memory space by having a single layout-info,
    single pid, and a single device-table, global to the filesystem. Then passing
    a credential and object_id info at the io_state level, private for each
    inode. It would also devise this contraption of rotating the device table
    view for each inode->ino to spread out the device usage.

    This is not compatible with the pnfs-objects standard, demanding that
    each inode can have it's own layout-info, device-table, and each object
    component it's own pid, oid and creds.

    So: Bring exofs raid engine to be usable for generic pnfs-objects use by:

    * Define an exofs_comp structure that holds obj_id and credential info.

    * Break up exofs_layout struct to an exofs_components structure that holds a
    possible array of exofs_comp and the array of devices + the size of the
    arrays.

    * Add a "comps" parameter to get_io_state() that specifies the ids creds
    and device array to use for each IO.

    This enables to keep the layout global, but the device-table view, creds
    and IDs at the inode level. It only adds two 64bit to each inode, since
    some of these members already existed in another form.

    * ios raid engine now access layout-info and comps-info through the passed
    pointers. Everything is pre-prepared by caller for generic access of
    these structures and arrays.

    At the exofs Level:

    * Super block holds an exofs_components struct that holds the device
    array, previously in layout. The devices there are in device-table
    order. The device-array is twice bigger and repeats the device-table
    twice so now each inode's device array can point to a random device
    and have a round-robin view of the table, making it compatible to
    previous exofs versions.

    * Each inode has an exofs_components struct that is initialized at
    load time, with it's own view of the device table IDs and creds.
    When doing IO this gets passed to the io_state together with the
    layout.

    While preforming this change. Bugs where found where credentials with the
    wrong IDs where used to access the different SB objects (super.c). As well
    as some dead code. It was never noticed because the target we use does not
    check the credentials.

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • ios.c will be moving to an external library, for use by the
    objects-layout-driver. Remove from it some exofs specific functions.

    Also g_attr_logical_length is used both by inode.c and ios.c
    move definition to the later, to keep it independent

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     

05 Aug, 2011

2 commits

  • Small cleanup that unifies duplicated code used in both the
    error and success cases

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • Since the beginning we realloced the sbi structure when a bigger
    then one device table was specified. (I know that was really stupid).

    Then much later when "register bdi" was added (By Jens) it was
    registering the pointer to sbi->bdi before the realloc.

    We never saw this problem because up till now the realloc did not
    do anything since the device table was small enough to fit in the
    original allocation. But once we starting testing with large device
    tables (Bigger then 28) we noticed the crash of writeback operating
    on a deallocated pointer.

    * Avoid the all mess by allocating the device-table as a second array
    and get rid of the variable-sized structure and the rest of this
    mess.
    * Take the chance to clean near by structures and comments.
    * Add a needed dprint on startup to indicate the loaded layout.
    * Also move the bdi registration to the very end because it will
    only fail in a low memory, which will probably fail before hand.
    There are many more likely causes to not load before that. This
    way the error handling is made simpler. (Just doing this would be
    enough to fix the BUG)

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     

18 Jul, 2011

1 commit


15 Mar, 2011

5 commits

  • One leftover from the days of IBM's original code, is an SB counter
    that counts in-flight asynchronous commands. And a piece of code that
    waits for the counter to reach zero at unmount. I guess it might have
    been needed then, cause of some reference missing or something.

    I'm not removing it yet but am putting a warning message if ever this
    counter triggers at unmount. If I'll never see it triggers or reported
    I'll remove the counter for good.
    (I had this print as a debug output for a long time and never had it
    trigger)

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • Before when creating a new inode, we'd set the sb->s_dirt flag,
    and sometime later the system would write out s_nextid as part
    of the sb_info. Also on inode sync we would force the sb sync
    as well.

    Define the s_nextid as a new partition attribute and set it
    every time we create a new object.
    At mount we read it from it's new place.

    We now never set sb->s_dirt anywhere in exofs. write_super
    is actually never called. The call to exofs_write_super from
    exofs_put_super is also removed because the VFS always calls
    ->sync_fs before calling ->put_super twice.

    To stay backward-and-forward compatible we also write the old
    s_nextid in the super_block object at unmount, and support zero
    length attribute on mount.

    This also fixes a BUG where in layouts when group_width was not
    a divisor of EXOFS_SUPER_ID (0x10000) the s_nextid was not read
    from the device it was written to. Because of the sliding window
    layout trick, and because the read was always done from the 0
    device but the write was done via the raid engine that might slide
    the device view. Now we read and write through the raid engine.

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • If /dev/osd* devices are shuffled because more devices
    where added, and/or login order has changed. It is hard to
    mount the FS you want.

    Add an option to mount by osdname. osdname is any osd-device's
    osdname as specified to the mkfs.exofs command when formatting
    the osd-devices.
    The new mount format is:
    OPT="osdname=$UUID0,pid=$PID,_netdev"
    mount -t exofs -o $OPT $DEV_OSD0 $MOUNTDIR

    if "osdname=" is specified in options above $DEV_OSD0 is
    ignored and can be empty.

    Also while at it: Removed some old unused Opt_* enums.

    Signed-off-by: Boaz Harrosh

    Boaz Harrosh
     
  • * Set all inode->i_mapping->backing_dev_info to point to
    the per super-block sb->s_bdi.

    * Calculating a read_ahead that is:
    - preferable 2 stripes long
    (Future patch will add a mount option to override this)
    - Minimum 128K aligned up to stripe-size
    - Caped to maximum-IO-sizes round down to stripe_size.
    (Max sizes are governed by max bio-size that fits in a page
    times number-of-devices)

    CC: Marc Dionne
    Signed-off-by: Boaz Harrosh

    bharrosh@panasas.com
     
  • IS_ERR() already implies unlikely(), so it can be omitted here.

    Signed-off-by: Tobias Klauser

    Tobias Klauser
     

07 Jan, 2011

1 commit

  • RCU free the struct inode. This will allow:

    - Subsequent store-free path walking patch. The inode must be consulted for
    permissions when walking, so an RCU inode reference is a must.
    - sb_inode_list_lock to be moved inside i_lock because sb list walkers who want
    to take i_lock no longer need to take sb_inode_list_lock to walk the list in
    the first place. This will simplify and optimize locking.
    - Could remove some nested trylock loops in dcache code
    - Could potentially simplify things a bit in VM land. Do not need to take the
    page lock to follow page->mapping.

    The downsides of this is the performance cost of using RCU. In a simple
    creat/unlink microbenchmark, performance drops by about 10% due to inability to
    reuse cache-hot slab objects. As iterations increase and RCU freeing starts
    kicking over, this increases to about 20%.

    In cases where inode lifetimes are longer (ie. many inodes may be allocated
    during the average life span of a single inode), a lot of this cache reuse is
    not applicable, so the regression caused by this patch is smaller.

    The cache-hot regression could largely be avoided by using SLAB_DESTROY_BY_RCU,
    however this adds some complexity to list walking and store-free path walking,
    so I prefer to implement this at a later date, if it is shown to be a win in
    real situations. I haven't found a regression in any non-micro benchmark so I
    doubt it will be a problem.

    Signed-off-by: Nick Piggin

    Nick Piggin