1. 02 10月, 2006 9 次提交
    • E
      [PATCH] file: Add locking to f_getown · 43fa1adb
      Eric W. Biederman 提交于
      This has been needed for a long time, but now with the advent of a
      reference counted struct pid there are real consequences for getting this
      wrong.
      
      Someone I think it was Oleg Nesterov pointed out that this construct was
      missing locking, when I introduced struct pid.  After taking time to review
      the locking construct already present I figured out which lock needs to be
      taken.  The other paths that access f_owner.pid take either the f_owner
      read or the write lock.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Cc: Oleg Nesterov <oleg@tv-sign.ru>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      43fa1adb
    • S
      [PATCH] Define struct pspace · 3fbc9648
      Sukadev Bhattiprolu 提交于
      Define a per-container pid space object.  And create one instance of this
      object, init_pspace, to define the entire pid space.  Subsequent patches
      will provide/use interfaces to create/destroy pid spaces.
      
      Its a subset/rework of Eric Biederman's patch
      http://lkml.org/lkml/2006/2/6/285 .
      Signed-off-by: NEric Biederman <ebiederm@xmission.com>
      Signed-off-by: NSukadev Bhattiprolu <sukadev@us.ibm.com>
      Cc: Dave Hansen <haveblue@us.ibm.com>
      Cc: Serge Hallyn <serue@us.ibm.com>
      Cc: Cedric Le Goater <clg@fr.ibm.com>
      Cc: Kirill Korotaev <dev@sw.ru>
      Cc: Andrey Savochkin <saw@sw.ru>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      3fbc9648
    • A
      [PATCH] fs/inode.c tweaks · ed97bd37
      Andreas Mohr 提交于
      Only touch inode's i_mtime and i_ctime to make them equal to "now" in case
      they aren't yet (don't just update timestamp unconditionally).  Uninline
      the hash function to save 259 Bytes.
      
      This tiny inode change which may improve cache behaviour also shaves off 8
      Bytes from file_update_time() on i386.
      
      Included a tiny codestyle cleanup, too.
      Signed-off-by: NAndreas Mohr <andi@lisas.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      ed97bd37
    • A
      [PATCH] Remove NULL check in register_nls() · 07acaf28
      Alexey Dobriyan 提交于
      Everybody passes valid pointer there.
      Signed-off-by: NAlexey Dobriyan <adobriyan@gmail.com>
      Acked-by: NOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      07acaf28
    • E
      [PATCH] file: modify struct fown_struct to use a struct pid · 609d7fa9
      Eric W. Biederman 提交于
      File handles can be requested to send sigio and sigurg to processes.  By
      tracking the destination processes using struct pid instead of pid_t we make
      the interface safe from all potential pid wrap around problems.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      609d7fa9
    • E
      [PATCH] proc: give the root directory a task · f6c7a1f3
      Eric W. Biederman 提交于
      Helper functions in base.c like proc_pident_readdir and proc_pident_lookup
      assume the directories have an associated task, and cannot currently be used
      on the /proc root directory because it does not have such a task.
      
      This small changes allows for base.c to be simplified and later when multiple
      pid spaces are introduced it makes getting the needed context information
      trivial.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      f6c7a1f3
    • E
      [PATCH] proc: modify proc_pident_lookup to be completely table driven · 20cdc894
      Eric W. Biederman 提交于
      Currently proc_pident_lookup gets the names and types from a table and then
      has a huge switch statement to get the inode and file operations it needs.
      That is silly and is becoming increasingly hard to maintain so I just put all
      of the information in the table.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      20cdc894
    • E
      [PATCH] proc: reorder the functions in base.c · 28a6d671
      Eric W. Biederman 提交于
      There were enough changes in my last round of cleaning up proc I had to break
      up the patch series into smaller chunks, and my last chunk never got resent.
      
      This patchset gives proc dynamic inode numbers (the static inode numbers were
      a pain to maintain and prevent all kinds of things), and removes the horrible
      switch statements that had to be kept in sync with everything else.  Being
      fully table driver takes us 90% of the way of being able to register new
      process specific attributes in proc.
      
      This patch:
      
      Group the functions by what they implement instead of by type of operation.
      As it existed base.c was quickly approaching the point where it could not be
      followed.
      
      No functionality or code changes asside from adding/removing forward
      declartions are implemented in this patch.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      28a6d671
    • E
      [PATCH] proc: readdir race fix (take 3) · 0804ef4b
      Eric W. Biederman 提交于
      The problem: An opendir, readdir, closedir sequence can fail to report
      process ids that are continually in use throughout the sequence of system
      calls.  For this race to trigger the process that proc_pid_readdir stops at
      must exit before readdir is called again.
      
      This can cause ps to fail to report processes, and it is in violation of
      posix guarantees and normal application expectations with respect to
      readdir.
      
      Currently there is no way to work around this problem in user space short
      of providing a gargantuan buffer to user space so the directory read all
      happens in on system call.
      
      This patch implements the normal directory semantics for proc, that
      guarantee that a directory entry that is neither created nor destroyed
      while reading the directory entry will be returned.  For directory that are
      either created or destroyed during the readdir you may or may not see them.
       Furthermore you may seek to a directory offset you have previously seen.
      
      These are the guarantee that ext[23] provides and that posix requires, and
      more importantly that user space expects.  Plus it is a simple semantic to
      implement reliable service.  It is just a matter of calling readdir a
      second time if you are wondering if something new has show up.
      
      These better semantics are implemented by scanning through the pids in
      numerical order and by making the file offset a pid plus a fixed offset.
      
      The pid scan happens on the pid bitmap, which when you look at it is
      remarkably efficient for a brute force algorithm.  Given that a typical
      cache line is 64 bytes and thus covers space for 64*8 == 200 pids.  There
      are only 40 cache lines for the entire 32K pid space.  A typical system
      will have 100 pids or more so this is actually fewer cache lines we have to
      look at to scan a linked list, and the worst case of having to scan the
      entire pid bitmap is pretty reasonable.
      
      If we need something more efficient we can go to a more efficient data
      structure for indexing the pids, but for now what we have should be
      sufficient.
      
      In addition this takes no additional locks and is actually less code than
      what we are doing now.
      
      Also another very subtle bug in this area has been fixed.  It is possible
      to catch a task in the middle of de_thread where a thread is assuming the
      thread of it's thread group leader.  This patch carefully handles that case
      so if we hit it we don't fail to return the pid, that is undergoing the
      de_thread dance.
      
      Thanks to KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> for
      providing the first fix, pointing this out and working on it.
      
      [oleg@tv-sign.ru: fix it]
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Acked-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
      Signed-off-by: NOleg Nesterov <oleg@tv-sign.ru>
      Cc: Jean Delvare <jdelvare@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      0804ef4b
  2. 01 10月, 2006 31 次提交