10 Jan, 2018

1 commit

  • commit 4d9570158b6260f449e317a5f9ed030c2504a615 upstream.

    As Tsukada explains, the time_is_before_jiffies(acct->needcheck) check
    is very wrong, we need time_is_after_jiffies() to make sys_acct() work.

    Ignoring the overflows, the code should "goto out" if needcheck >
    jiffies, while currently it checks "needcheck < jiffies" and thus in the
    likely case check_free_space() does nothing until jiffies overflow.

    In particular this means that sys_acct() is simply broken, acct_on()
    sets acct->needcheck = jiffies and expects that check_free_space()
    should set acct->active = 1 after the free-space check, but this won't
    happen if jiffies increments in between.

    This was broken by commit 32dc73086015 ("get rid of timer in
    kern/acct.c") in 2011, then another (correct) commit 795a2f22a8ea
    ("acct() should honour the limits from the very beginning") made the
    problem more visible.

    Link: http://lkml.kernel.org/r/20171213133940.GA6554@redhat.com
    Fixes: 32dc73086015 ("get rid of timer in kern/acct.c")
    Reported-by: TSUKADA Koutaro
    Suggested-by: TSUKADA Koutaro
    Signed-off-by: Oleg Nesterov
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Oleg Nesterov
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

05 Sep, 2017

1 commit


02 Mar, 2017

1 commit

  • …linux/sched/cputime.h>

    Introduce a trivial, mostly empty <linux/sched/cputime.h> header
    to prepare for the moving of cputime functionality out of sched.h.

    Update all code that relies on these facilities.

    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>

    Ingo Molnar
     

01 Feb, 2017

2 commits

  • Use the new nsec based cputime accessors as part of the whole cputime
    conversion from cputime_t to nsecs.

    Signed-off-by: Frederic Weisbecker
    Cc: Benjamin Herrenschmidt
    Cc: Fenghua Yu
    Cc: Heiko Carstens
    Cc: Linus Torvalds
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Rik van Riel
    Cc: Stanislaw Gruszka
    Cc: Thomas Gleixner
    Cc: Tony Luck
    Cc: Wanpeng Li
    Link: http://lkml.kernel.org/r/1485832191-26889-13-git-send-email-fweisbec@gmail.com
    Signed-off-by: Ingo Molnar

    Frederic Weisbecker
     
  • This API returns a task's cputime in cputime_t in order to ease the
    conversion of cputime internals to use nsecs units instead. Blindly
    converting all cputime readers to use this API now will later let us
    convert more smoothly and step by step all these places to use the
    new nsec based cputime.

    Signed-off-by: Frederic Weisbecker
    Cc: Benjamin Herrenschmidt
    Cc: Fenghua Yu
    Cc: Heiko Carstens
    Cc: Linus Torvalds
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Rik van Riel
    Cc: Stanislaw Gruszka
    Cc: Thomas Gleixner
    Cc: Tony Luck
    Cc: Wanpeng Li
    Link: http://lkml.kernel.org/r/1485832191-26889-7-git-send-email-fweisbec@gmail.com
    Signed-off-by: Ingo Molnar

    Frederic Weisbecker
     

12 Apr, 2015

1 commit


26 Jan, 2015

5 commits


10 Oct, 2014

1 commit

  • If ACCT_VERSION is not defined to 3, below warning appears:
    CC kernel/acct.o
    kernel/acct.c: In function `do_acct_process':
    kernel/acct.c:475:24: warning: unused variable `ns' [-Wunused-variable]

    [akpm@linux-foundation.org: retain the local for code size improvements
    Signed-off-by: Ying Xue
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ying Xue
     

08 Aug, 2014

16 commits

  • Signed-off-by: Ionut Alexa
    Signed-off-by: Andrew Morton
    Signed-off-by: Al Viro

    Ionut Alexa
     
  • Rather than playing silly buggers with vfsmount refcounts, just have
    acct_on() ask fs/namespace.c for internal clone of file->f_path.mnt
    and replace it with said clone. Then attach the pin to original
    vfsmount. Voila - the clone will be alive until the file gets closed,
    making sure that underlying superblock remains active, etc., and
    we can drop the original vfsmount, so that it's not kept busy.
    If the file lives until the final mntput of the original vfsmount,
    we'll notice that there's an fs_pin (one in bsd_acct_struct that
    holds that file) and mnt_pin_kill() will take it out. Since
    ->kill() is synchronous, we won't proceed past that point until
    these files are closed (and private clones of our vfsmount are
    gone), so we get the same ordering warranties we used to get.

    mnt_pin()/mnt_unpin()/->mnt_pinned is gone now, and good riddance -
    it never became usable outside of kernel/acct.c (and racy wrt
    umount even there).

    Signed-off-by: Al Viro

    Al Viro
     
  • Add a new field to fs_pin - kill(pin). That's what umount and r/o remount
    will be calling for all pins attached to vfsmount and superblock resp.
    Called after bumping the refcount, so it won't go away under us. Dropping
    the refcount is responsibility of the instance. All generic stuff moved to
    fs/fs_pin.c; the next step will rip all the knowledge of kernel/acct.c from
    fs/super.c and fs/namespace.c. After that - death to mnt_pin(); it was
    intended to be usable as generic mechanism for code that wants to attach
    objects to vfsmount, so that they would not make the sucker busy and
    would get killed on umount. Never got it right; it remained acct.c-specific
    all along. Now it's very close to being killable.

    Signed-off-by: Al Viro

    Al Viro
     
  • pull generic parts into struct fs_pin. Eventually we want those
    to replace mnt_pin()/mnt_unpin() mess; that stuff will move to
    fs/*.

    Signed-off-by: Al Viro

    Al Viro
     
  • Signed-off-by: Al Viro

    Al Viro
     
  • Do actual closing of file via schedule_work(). And use
    __fput_sync() there.

    Signed-off-by: Al Viro

    Al Viro
     
  • * make acct->count atomic and acct freeing - rcu-delayed.
    * instead of grabbing acct_lock around the places where we take a reference,
    do that under rcu_read_lock() with atomic_long_inc_not_zero().
    * have the new acct locked before making ns->bacct point to it

    Signed-off-by: Al Viro

    Al Viro
     
  • Put these suckers on per-vfsmount and per-superblock lists instead.
    Note: right now it's still acct_lock for everything, but that's
    going to change.

    Signed-off-by: Al Viro

    Al Viro
     
  • a) file can't be NULL
    b) file can't be changed under us
    c) all writes are serialized by acct->lock; no need to mess with
    spinlock there.

    Signed-off-by: Al Viro

    Al Viro
     
  • Do not reuse bsd_acct_struct after closing the damn thing.
    Structure lifetime is controlled by refcount now. We also
    have a mutex in there, held over closing and writing (the
    file is O_APPEND, so we are not losing any concurrency).

    As the result, we do not need to bother with get_file()/fput()
    on log write anymore. Moreover, do_acct_process() only needs
    acct itself; file and pidns are picked from it.

    Killed instances are distinguished by having NULL ->ns.
    Refcount is protected by acct_lock; anybody taking the
    mutex needs to grab a reference first.

    The things will get a lot simpler in the next commits - this
    is just the minimal chunk switching to the new lifetime rules.

    Signed-off-by: Al Viro

    Al Viro
     
  • brute-force - on a global mutex that isn't nested into anything.

    Signed-off-by: Al Viro

    Al Viro
     
  • We need to check free space on the first write to freshly opened log.

    Signed-off-by: Al Viro

    Al Viro
     
  • Signed-off-by: Al Viro

    Al Viro
     
  • Signed-off-by: Al Viro

    Al Viro
     
  • Signed-off-by: Al Viro

    Al Viro
     
  • There was an amusing bogosity in ac_rw calculation - it tried to
    do encode_comp_t(encode_comp_t(0) / 1024). Seeing that comp_t is
    a 3-bit exponent + 13-bit mantissa... it's a good thing that 0 is
    represented by all-bits-clear.

    The history of that one is interesting - it was introduced in
    2.1.68pre1, when acct.c had been reworked and moved to separate
    file. Two months later (2.1.86) somebody has noticed that the
    sucker won't compile - there was no task_struct::io_usage.
    At which point the ac_io calculation had changed from
    encode_comp_t(current->io_usage) to encode_comp_t(0) and the
    bug in the next line (absolutely real back then, had it ever
    managed to compile) become a harmless bogosity. Looks like
    nobody has ever noticed until now.

    Anyway, let's bury that idiocy now that it got noticed. 17 years
    is long enough...

    Signed-off-by: Al Viro

    Al Viro
     

24 Jul, 2014

1 commit


12 Jun, 2014

1 commit

  • do_posix_clock_monotonic_gettime() is a leftover from the initial
    posix timer implementation which maps to ktime_get_ts()

    Signed-off-by: Thomas Gleixner
    Cc: John Stultz
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20140611234606.764810535@linutronix.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

07 Jun, 2014

2 commits


05 May, 2013

1 commit

  • When BSD process accounting is enabled and logs information to a
    filesystem which gets frozen, system easily becomes unusable because
    each attempt to account process information blocks. Thus e.g. every task
    gets blocked in exit.

    It seems better to drop accounting information (which can already happen
    when filesystem is running out of space) instead of locking system up.
    So we just skip the write if the filesystem is frozen.

    Reported-by: Nikola Ciprich
    Signed-off-by: Jan Kara
    Signed-off-by: Al Viro

    Jan Kara
     

10 Apr, 2013

1 commit


27 Feb, 2013

1 commit

  • Pull vfs pile (part one) from Al Viro:
    "Assorted stuff - cleaning namei.c up a bit, fixing ->d_name/->d_parent
    locking violations, etc.

    The most visible changes here are death of FS_REVAL_DOT (replaced with
    "has ->d_weak_revalidate()") and a new helper getting from struct file
    to inode. Some bits of preparation to xattr method interface changes.

    Misc patches by various people sent this cycle *and* ocfs2 fixes from
    several cycles ago that should've been upstream right then.

    PS: the next vfs pile will be xattr stuff."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (46 commits)
    saner proc_get_inode() calling conventions
    proc: avoid extra pde_put() in proc_fill_super()
    fs: change return values from -EACCES to -EPERM
    fs/exec.c: make bprm_mm_init() static
    ocfs2/dlm: use GFP_ATOMIC inside a spin_lock
    ocfs2: fix possible use-after-free with AIO
    ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path
    get_empty_filp()/alloc_file() leave both ->f_pos and ->f_version zero
    target: writev() on single-element vector is pointless
    export kernel_write(), convert open-coded instances
    fs: encode_fh: return FILEID_INVALID if invalid fid_type
    kill f_vfsmnt
    vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op
    nfsd: handle vfs_getattr errors in acl protocol
    switch vfs_getattr() to struct path
    default SET_PERSONALITY() in linux/elf.h
    ceph: prepopulate inodes only when request is aborted
    d_hash_and_lookup(): export, switch open-coded instances
    9p: switch v9fs_set_create_acl() to inode+fid, do it before d_instantiate()
    9p: split dropping the acls from v9fs_set_create_acl()
    ...

    Linus Torvalds
     

23 Feb, 2013

1 commit


28 Jan, 2013

1 commit

  • This is in preparation for the full dynticks feature. While
    remotely reading the cputime of a task running in a full
    dynticks CPU, we'll need to do some extra-computation. This
    way we can account the time it spent tickless in userspace
    since its last cputime snapshot.

    Signed-off-by: Frederic Weisbecker
    Cc: Andrew Morton
    Cc: Ingo Molnar
    Cc: Li Zhong
    Cc: Namhyung Kim
    Cc: Paul E. McKenney
    Cc: Paul Gortmaker
    Cc: Peter Zijlstra
    Cc: Steven Rostedt
    Cc: Thomas Gleixner

    Frederic Weisbecker
     

13 Oct, 2012

2 commits

  • ...and fix up the callers. For do_file_open_root, just declare a
    struct filename on the stack and fill out the .name field. For
    do_filp_open, make it also take a struct filename pointer, and fix up its
    callers to call it appropriately.

    For filp_open, add a variant that takes a struct filename pointer and turn
    filp_open into a wrapper around it.

    Signed-off-by: Jeff Layton
    Signed-off-by: Al Viro

    Jeff Layton
     
  • getname() is intended to copy pathname strings from userspace into a
    kernel buffer. The result is just a string in kernel space. It would
    however be quite helpful to be able to attach some ancillary info to
    the string.

    For instance, we could attach some audit-related info to reduce the
    amount of audit-related processing needed. When auditing is enabled,
    we could also call getname() on the string more than once and not
    need to recopy it from userspace.

    This patchset converts the getname()/putname() interfaces to return
    a struct instead of a string. For now, the struct just tracks the
    string in kernel space and the original userland pointer for it.

    Later, we'll add other information to the struct as it becomes
    convenient.

    Signed-off-by: Jeff Layton
    Signed-off-by: Al Viro

    Jeff Layton