1. 03 Jun, 2002 2 commits
    • Patrick Mochel's avatar
      Do manual traversing of drivers' devices list when unbinding the driver. · 96d36ec0
      Patrick Mochel authored
      driver_unbind was called when drv->refcount == 0.
      It would call driver_for_each_dev to do the unbinding
      The first thing that would do was get_device, which...
      BUG()'d if drv->refcount == 0. 
      Duh. 
      96d36ec0
    • Patrick Mochel's avatar
      device model udpate: · d6022129
      Patrick Mochel authored
      - make sure drv->devices is initialized on registration (from Peter Osterlund)
      - add remove_driver for forcing removal of driver
      
      There was a potential race with the module unload code. When a pci driver was unloaded, it would call pci_unregister_driver, which would simply call put_driver.
      If the driver's refcount wasn't 0, it wouldn't unbind it from devices, but the module unload would still continue. 
      If something tried to access the driver later (since everyone thinks its still there), Bad Things would happen. 
      This fixes it until there can be tighter integration between the device model and module unload code.
      d6022129
  2. 02 Jun, 2002 33 commits
    • Linus Torvalds's avatar
      Kernel version 2.5.20 · a9907091
      Linus Torvalds authored
      a9907091
    • Linus Torvalds's avatar
      ab9f25f2
    • Linus Torvalds's avatar
      Merge http://linux-isdn.bkbits.net/linux-2.5.make · b2ea3f31
      Linus Torvalds authored
      into home.transmeta.com:/home/torvalds/v2.5/linux
      b2ea3f31
    • Rusty Russell's avatar
    • Linus Torvalds's avatar
    • Linus Torvalds's avatar
      idescsi initialization is done with module_init(), not · 2a8ee63d
      Linus Torvalds authored
      explicitly.
      2a8ee63d
    • Martin Dalecki's avatar
      [PATCH] 2.5.19 blk.h and more about the ugly kids. · 8795dba6
      Martin Dalecki authored
       - Remove DEVICE_INTR and associated code from floppy driver.
      
       - Savlage s390 xpram code from kernel version dependant compilation disease.
      
       - Eliminate SET_INTR code from the places where it was used.
      
       - Eliminate bogous support for multiple sbpcd controllers. The driver didn't
         even compile right now before we could think about further supporting it at
         all we have to get rid of this hack first.
         Don't call invalidate_buffers in the release method there.
         Why should it be necessary?
      
       - Resurrect sonycd535 compilation.
      
       - Let CURRENT request macro use the same primitive at the remaining QUEUE macro
         in blk.h, which is still not quite right, but first things first :-).
      8795dba6
    • Andrew Morton's avatar
      [PATCH] dirsync support for minixfs, sysvfs and ufs · 58f3fa97
      Andrew Morton authored
      Makes minixfs, sysvfs and ufs understand `mount -o dirsync'.
      58f3fa97
    • Andrew Morton's avatar
      [PATCH] rename flushpage to invalidatepage · 53b478c6
      Andrew Morton authored
      Fixes a pet peeve: the identifier "flushpage" implies "flush the page
      to disk".  Which is very much not what the flushpage functions actually
      do.
      
      The patch renames block_flushpage and the flushpage
      address_space_operation to "invalidatepage".
      
      It also fixes a buglet in invalidate_this_page2(), which was calling
      block_flushpage() directly - it needs to call do_flushpage() (now
      do_invalidatepage()) so that the filesystem's ->flushpage (now
      ->invalidatepage) a_op gets a chance to relinquish any interest which
      it has in the page's buffers.
      53b478c6
    • Andrew Morton's avatar
      [PATCH] tmpfs bugfixes · 6979fbf7
      Andrew Morton authored
      A patch from Hugh Dickins which fixes a couple of error-path leaks
      related to tmpfs (I think).
      
      Also fixes a yield()-inside-spinlock bug.
      
      It also includes code to clear the final page outside i_size on
      truncate.  tmpfs should be returning zeroes when a truncated file is
      later expanded and it currently is not.
      
      Hugh is taking care of the 2.4 fix for this.
      6979fbf7
    • Andrew Morton's avatar
      [PATCH] put in-memory filesystem dirty pages on the correct list · b3e8feca
      Andrew Morton authored
      Replaces SetPageDirty() with set_page_dirty() in several places related
      to in-memory filesystems.
      
      SetPageDirty() is basically always the wrong thing to do.  Pages should
      be moved to the ->dirty_pages list when dirtied so that writeback can
      see them.
      
      Without this change, dirty pages against in-memory filesystems would
      churn around on the inactive list all the time, rather than getting
      pushed away onto the active list.  A minor efficiency thing.
      b3e8feca
    • Andrew Morton's avatar
      [PATCH] fix race between writeback and unlink · c83686ac
      Andrew Morton authored
      Fixes a race between unlink and writeback: on the sys_sync() and
      pdflush paths the caller does not have a reference against the inode.
      
      So run __iget prior to dropping inode_lock.
      
      Oleg Drokin reported this and seems to believe that it fixes the
      crashes he was observing.  But I was never able to reproduce them..
      c83686ac
    • Andrew Morton's avatar
      [PATCH] swapcache bugfixes · 91cb02b7
      Andrew Morton authored
      Fixes a few lock ranking bugs (and deadlocks) related to
      swap_list_lock(), swap_device_lock(), mapping->page_lock and
      mapping->private_lock.
      
      - Cannot call block_flushpage->try_to_free_buffers() inside
        mapping->page_lock.  Because __set_page_dirty_buffers() takes
        ->page_lock inside ->private-lock.
      
      - Cannot call swap_free->swap_list_lock/swap_device_lock inside
        mapping->page_lock because exclusive_swap_page() takes ->page_lock
        inside swap_info_get().
      
      
      The patch also removes all the block_flushpage() calls from the swap
      code in favour of a direct call to try_to_free_buffers().
      
      The theory is that the page is locked, there is no I/O underway, nobody
      else has access to the buffers so they MUST be freeable.  A bunch of
      BUG() checks have been added, and unless someone manages to trigger
      one, the "block_flushpage() inside spinlock" problem is fixed.
      91cb02b7
    • Andrew Morton's avatar
      [PATCH] give swapper_space a set_page_dirty a_op · 3aeb30b0
      Andrew Morton authored
      Give swapper_space a ->set_page_dirty() address_space_operation.
      
      So swapcache pages do not need special-casing in
      set_page_dirty_buffers().
      3aeb30b0
    • Andrew Morton's avatar
      [PATCH] direct-to-BIO writeback for writeback-mode ext3 · da9bfeb4
      Andrew Morton authored
      Turn on direct-to-BIO writeback for ext3 in data=writeback mode.
      da9bfeb4
    • Andrew Morton's avatar
      [PATCH] rename block_symlink() to page_symlink() · 5a302308
      Andrew Morton authored
      block_symlink() is not a "block" function at all.  It is a pure
      pagecache/address_space function.  Seeing driverfs calling it was
      the last straw.
      
      The patch renames it to `page_symlink()' and moves it into fs/namei.c
      5a302308
    • Andrew Morton's avatar
      [PATCH] remove inode.i_wait · ddedde1d
      Andrew Morton authored
      Remove i_wait from struct inode and hash it instead.
      
      This is a pure space-saving exercise - 12 bytes from struct
      inode on x86.
      
      NFS was using i_wait for its own purposes.  Add a wait_queue_head_t to
      the fs-private inode for that.  This change has been acked by Trond.
      ddedde1d
    • Andrew Morton's avatar
      [PATCH] buffer_boundary() for ext3 · e40df2d9
      Andrew Morton authored
      Implement buffer_boundary() for ext3.
      
      buffer_boundary() is an I/O scheduling hint which the filesystem's
      get_block() function passes up to the BIO assembly code.  It is
      described in fs/mpage.c
      
      The time to read 1,000 52 kbyte files goes from 8.6 seconds down to 2.9
      seconds.  52 kbytes is the worst-case size.
      e40df2d9
    • Andrew Morton's avatar
      [PATCH] speed up writes · 7e7382fd
      Andrew Morton authored
      Speeds up generic_file_write() by not calling mark_inode_dirty() when
      the mtime and ctime didn't change.
      
      There may be concerns over the fact that this restricts mtime and ctime
      updates to one-second resolution.  But the interface doesn't support
      that anyway - all the filesystem knows is that its dirty_inode()
      superop was called.  It doesn't know why.
      
      So filesystems which support high-resolution timestamps already need to
      make their own arrangements.  We need an update_mtime i_op to support
      those properly.
      
      time to write a one megabyte file one-byte-at-a-time:
      
      Before:
      	ext3:		24.8 seconds
      	ext2:		 4.9 seconds
      	reiserfs:	17.0 seconds
      After:
      	ext3:		22.5 seconds
      	ext2:		4.8  seconds
      	reiserfs:	11.6 seconds
      
      Not much improvement because we're also calling expensive
      mark_inode_dirty() functions when i_size is expanded.  So compare the
      overwrite case:
      
      time dd if=/dev/zero of=foo bs=1 count=1M conv=notrunc
      
      ext3 before:	20.0 seconds
      ext3 after:	9.7  seconds
      7e7382fd
    • Andrew Morton's avatar
      [PATCH] fix swapcache packing in the radix tree · 02eaba7f
      Andrew Morton authored
      First some terminology: this patch introduces a kernel-wide `pgoff_t'
      type.  It is the index of a page into the pagecache.  The thing at
      page->index.  For most mappings it is also the offset of the page into
      that mapping.  This type has a very distinct function in the kernel and
      it needs a name.  I don't have any particular plans to go and migrate
      everything so we can support 64-bit pagecache indices on x86, but this
      would be the way to do it.
      
      This patch improves the packing density of swapcache pages in the radix
      tree.
      
      A swapcache page is identified by the `swap type' (indexes the swap
      device) and the `offset' (into that swap device).  These two numbers
      are encoded into a `swp_entry_t' machine word in arch-specific code
      because the resulting number is placed into pagetables in a form which
      will generate a fault.
      
      The kernel also need to generate a pgoff_t for that page to index it
      into the swapper_space radix tree.  That pgoff_t is usually
      bitwise-identical to the swp_entry_t.  That worked OK when the
      pagecache was using a hash.  But with a radix tree, it produces
      catastrophically bad results.
      
      x86 (and many other architectures) place the `type' field into the
      low-order bits of the swp_entry_t.  So *all* swapcache pages are
      basically identical in the eight low-order bits.  This produces a very
      sparse radix tree for swapcache.  I'm observing packing densities of 1%
      to 2%: so the typical 128-slot radix tree node has only one or two
      pages in it.
      
      The end result is that the kernel needs to allocate approximately one
      new radix-tree node for each page which is added to the swapcache.  So
      no wonder we're having radix-tree node exhaustion during swapout!
      (It's actually quite encouraging that the kernel works as well as it
      does).
      
      The patch changes the encoding of the swp_entry_t so that its
      most-significant bits contain the `type' field and the
      least-significant bits contain the `offset' field, right-aligned.
      
      That is: the encoding in swp_entry_t is now arch-independent.  The new
      file <linux/swapops.h> has conversion functions which convert the
      swp_entry_t to and from its machine pte representation.
      
      Packing density in the swapper_space mapping goes up to around 90%
      (observed) and the kernel is tons happier under swap load.
      
      
      An alternative approach would be to create new conversion functions
      which convert an arch-specific swp_entry_t to and from a pgoff_t.  I
      tried that.  It worked, but I liked it less.
      02eaba7f
    • Andrew Morton's avatar
      [PATCH] remove PageSkip() macros · 0f2b38d5
      Andrew Morton authored
      Remove some unused PageSkip() macros.  Presumably leftovers from
      PG_skip which isn't there any more.
      0f2b38d5
    • Andrew Morton's avatar
      [PATCH] list_head debugging · b9a78e59
      Andrew Morton authored
      A common and very subtle bug is to use list_heads which aren't on any
      lists.  It causes kernel memory corruption which is observed long after
      the offending code has executed.
      
      The patch nulls out the dangling pointers so we get a nice oops at the
      site of the buggy code.
      b9a78e59
    • Jens Axboe's avatar
      [PATCH] Re: ufs compile error in 2.5.19] · 123d6742
      Jens Axboe authored
      I missed this one in the last patch I sent to you.
      123d6742
    • Jens Axboe's avatar
      [PATCH] update to the update · 86225b5e
      Jens Axboe authored
      Too much copy'n paste between 2.4 and 2.5 code base, attached patch on
      top of the previous block tag fixes makes it work/compile again. Sorry
      about that.
      86225b5e
    • Jens Axboe's avatar
      [PATCH] misc generic block tag fixes · e3102b26
      Jens Axboe authored
      A buglet and a few adjustments.
      e3102b26
    • Jens Axboe's avatar
      [PATCH] documentation and tq_disk removals · 15283e97
      Jens Axboe authored
      This should be the last of tq_disk, at least the trivial ones. md still
      has some queue_task references, I'll let Ingo/Neil clean those up.
      suspend is still broken, it was broken before too though. I guess Pavel
      will want to fix that.
      
      Also, I've documented the plug functions.
      15283e97
    • Martin Dalecki's avatar
      [PATCH] 2.5.19 IDE 82 · 6e7c72aa
      Martin Dalecki authored
       - PPC compilation fix by Paul Mackerras.
      
       - Various fixes by Bartek:
      
         fix ata_irq_enable() and ata_reset() for legacy ATA-1 devices
      
         in start_request() for REQ_DRIVE_ACB
         a) don't run ->prehandler() twice
         b) return ata_taskfile() value
      6e7c72aa
    • Martin Dalecki's avatar
      [PATCH] 2.5.19 IDE 81 · 08446d85
      Martin Dalecki authored
       - Don't use ata_taskfiles cmd field for drive status reporting,
         we can now simply use drive->status instead.
      
       - Unify command type parser entries which could be unified due to the
         unification of corresponding interrupt handlers.
      
       - Eliminate reading parameter from ata_do_udma(). We have this information
         already in the rq. This allows us to merge several methods.
      
       - Rename XXX_udma to udma_setup, since we have finally settled up on this
         semantics.
      
       - Simplify tons of host chip code by removing wrapper functions.
      08446d85
    • Martin Dalecki's avatar
      [PATCH] 2.5.19 IDE 80 · 76d04538
      Martin Dalecki authored
       - Sanitize the handling of the ioctl's and fix a bug on the way in dealing with
         the WIN_SMART command where arguments where exchanged.
      
       - Finally sanitize ioctl further until it turned out that we could get rid of
         the special request type REQ_DRIVE_CMD entierly. We are now using
         consistently REQ_DRIVE_ACB.
      
         One hidden code path less again!
      
       - Realize the ide_end_drive_cmd can be on the REQ_DRIVE_ACB only for ioctl() to
         a disk. Eliminate it's usage from device type driver modules.
      
       - Remove command member from struct  hd_drive_task_hdr and place it in strcut
         ata_taskfile. It is not common between the normal register file and HOB.
      
         We will have to introduce some helper functions for particular command types.
      76d04538
    • Martin Dalecki's avatar
      [PATCH] [PATCH} 2.5.19 IDE 79 · b6e6f175
      Martin Dalecki authored
       - Fix typo in sparc_v9 code, in ns87415, just introduced.
      
       - Eliminate unnecessary struct hd_drive_hob_hdr those are
         in reality precisely the same registers as usual.
      
       - Eliminate control_t, nowhere used type.
      
       - Unfold ide_init_drive_cmd() at the places where it's used. This makes obvious
         that REQ_DRIVE_CMD gets only used on the ioctl command path.
      b6e6f175
    • Martin Dalecki's avatar
      [PATCH] 2.5.19 IDE 78 · 8b4e98ea
      Martin Dalecki authored
       - Move ide_fixstring() from ide.c to probe.c, since this is the place, where it's
         most used.
      
       - Remove GET_STAT() - it's not used any longer.
      
       - Remove last parameter of ide_error. Rename it to ata_error().
      
       - Don't use ide_fixstring in qd65xx.c host chip driver. The model name is
         already fixed in probe.c.
      
       - Invent ata_irq_enable() for the handling of the trice nIEN bit of the
         control register.  Consistently use ch->intrproc method every time we toggle
         this bit.  This simply wasn't the case before!
      
       - Disable interrupts on a previous channel only when we share them indeed.
      
       - Eliminate simple drive command handling function drive_cmd.
      
       - Simplify the ioctl handler. Move it to ioctl, since that's the only place
         where it's actually used.
      8b4e98ea
    • Linus Torvalds's avatar
      Simplify uidhash table allocation - no need to make it dynamic, · 78a6728c
      Linus Torvalds authored
      as it isn't even all that big.
      78a6728c
    • Petr Vandrovec's avatar
      [PATCH] missing argument to clear_user_page in v4l · c32ed714
      Petr Vandrovec authored
        David Mosberger added argument page to clear_user_page, but
      apparently did not scan whole tree to find callers. Please apply.
      It's the only such call in the non-arch specific portion of tree.
      c32ed714
  3. 01 Jun, 2002 5 commits
    • Kai Germaschewski's avatar
      kbuild: Group targets which need / don't need .config · 4da4483e
      Kai Germaschewski authored
      The main Makefile includes .config - on the other hand, it also
      generates .config when using make *config. This leads to recursion
      problems when we make the build depend on .config.
      
      (.config is generated by *config. So after running make *config,
       make notices one of its includes has been updated -> it restarts
       to read the new contents. Unfortunately, the restart runs *config
       again, which updates .config again. You get the picture)
      
      Therefore, we're aiming at a two phase system: If no .config exists,
      allow only make *config and make clean/mrproper. Afterwards, allow
      all targets. (It's not much different from what we have today)
      4da4483e
    • Kai Germaschewski's avatar
      kbuild: Get rid of -DMODVERSIONS, further cleanup · 45bd64fa
      Kai Germaschewski authored
      -DMODVERSIONS isn't used anymore, so it can go. Also, after cleaning
      up include/linux/module.h, it's obvious that we don't need
      include/linux/modversions.h at all if CONFIG_MODVERSIONS not set,
      no need to generate it.
      
      Rules.make explicitly lists files which depend on modversions.h,
      since make dep cannot know about the
      "-include include/linux/modversions.h" which gets added to
      the command line. Now that we understand when it is needed, we can
      even get that list right ;-)
      
      Oh well, nice theory. .hdepend will touch module.h when modversions.h
      changes, so we still get unnecessary recompiles. We really need to
      switch to the new way of dependency generation, it gets all that
      right without even thinking about these special cases.
      
      We don't track dependencies for .ver files. In fact, we relied on that
      checksum would only change if the corresponding exporting C source
      changes. That's not true, of course, all of the included headers have
      say as well. So we better force the hash to be checked
      unconditionally every time "make dep" is run.
      45bd64fa
    • Kai Germaschewski's avatar
      kbuild: Clarify the CONFIG_MODVERSIONS logic · c6fd296c
      Kai Germaschewski authored
      Observe that 
      defined(MODVERSIONS) == defined(CONFIG_MODVERSIONS) && defined(MODULE)
      and from there I step by step simplified the logic in
      include/linux/module.h - staying logically equivalent, but it is much 
      more understandable now, IMO.
      
      Still added a huge comment trying to help other people understand
      what kind of magic happens here.
      c6fd296c
    • Kai Germaschewski's avatar
      kbuild: clean up generation of modversions.h · 9168efd2
      Kai Germaschewski authored
      There's no good reason why we would generate
      include/linux/modversions.h from the top-level Makefile when
      CONFIG_MODVERSION=y and from Rules.make otherwise.
      
      Nor is there a good reason to call the target to do so
      "update-modverfile" - "include/linux/modversions.h" makes
      much more sense.
      9168efd2
    • Kai Germaschewski's avatar
      kbuild: Use the real instead of a phony target if we have one · 57824bbb
      Kai Germaschewski authored
      o A rule which makes the include/asm symlink should have the target
        "include/asm", not "symlinks". Likewise for ".hdepend". 
        (include/linux/modversions.h yet to follow)
      
        Apart from being cleaner, this additionally gives us protection
        when a command fails or the user interrupts execution:
       
        E.g. for the case of "make dep", if the user interrupts at
        some point, make will delete the target (now ".hdepend") for us,
        so that at the next run, make knows that it needs to make the
        dependencies again, while otherwise it would just use the
        half-finished file.
      
      o We don't need the include/asm symlink for the configuration targets,
        we only need it before generating dependencies.
      
        (The setup of having /usr/include/{linux,asm} symlinked to your
        current kernel source is already broken in 2.5, so this change
        doesn't break anything which wasn't broken before.)
      
      o Add .hdepend to "prepare", i.e. what needs to be done before
        we can start the recursive build. That means we can get rid of
        the gross (and not always working) hack which made "make"
        run "make dep" when .hdepend didn't exist yet.
      
      o Mark the *config targets phony and improve some comments.
      57824bbb