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
     

12 Oct, 2012

1 commit


18 Sep, 2012

1 commit

  • BSD process accounting conveniently passes the file the accounting
    records will be written into to do_acct_process. The file credentials
    captured the user namespace of the opener of the file. Use the file
    credentials to format the uid and the gid of the current process into
    the user namespace of the user that started the bsd process
    accounting.

    Cc: Pavel Emelyanov
    Reviewed-by: Serge Hallyn
    Signed-off-by: Eric W. Biederman

    Eric W. Biederman
     

09 Jan, 2012

1 commit

  • * 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (165 commits)
    reiserfs: Properly display mount options in /proc/mounts
    vfs: prevent remount read-only if pending removes
    vfs: count unlinked inodes
    vfs: protect remounting superblock read-only
    vfs: keep list of mounts for each superblock
    vfs: switch ->show_options() to struct dentry *
    vfs: switch ->show_path() to struct dentry *
    vfs: switch ->show_devname() to struct dentry *
    vfs: switch ->show_stats to struct dentry *
    switch security_path_chmod() to struct path *
    vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
    vfs: trim includes a bit
    switch mnt_namespace ->root to struct mount
    vfs: take /proc/*/mounts and friends to fs/proc_namespace.c
    vfs: opencode mntget() mnt_set_mountpoint()
    vfs: spread struct mount - remaining argument of next_mnt()
    vfs: move fsnotify junk to struct mount
    vfs: move mnt_devname
    vfs: move mnt_list to struct mount
    vfs: switch pnode.h macros to struct mount *
    ...

    Linus Torvalds
     

07 Jan, 2012

1 commit


04 Jan, 2012

1 commit


15 Dec, 2011

1 commit