1. 01 Aug, 2003 16 commits
    • Andrew Morton's avatar
      [PATCH] Fix race in ext3_getblk · 77b070cb
      Andrew Morton authored
      From: Alex Tomas <bzzz@tmi.comex.ru>
      
      ext3_getblk() memsets a newly allocated buffer, but forgets to check
      whether a different thread brought it uptodate while we waited for the
      buffer lock.
      
      It's OK normally because we're serialised by the page lock.  But lustre
      apparently is doing something different with getblk and hits this race.
      
      Plus I suspect it's racy with competing O_DIRECT writes.
      77b070cb
    • Andrew Morton's avatar
      [PATCH] ext3: avoid reading empty inode blocks · bca17d03
      Andrew Morton authored
      From: Alex Tomas <bzzz@tmi.comex.ru>
      
      ext3_get_inode_loc() read inode's block only if:
      
        1) this inode has no copy in memory
        2) inode's block has another valid inode(s)
      
      this optimization allows to avoid needless I/O in two cases:
      
      1) just allocated inode is first valid in the inode's block
      
      2) kernel wants to write inode, but buffer in which inode
         belongs to gets freed by VM
      bca17d03
    • Andrew Morton's avatar
      [PATCH] rework readahead for congested queues · 12affe8f
      Andrew Morton authored
      Since Jens changed the block layer to fail readahead if the queue has no
      requests free, a few changes suggest themselves.
      
      - It's a bit silly to go and alocate a bunch of pages, build BIOs for them,
        submit the IO only to have it fail, forcing us to free the pages again.
      
        So the patch changes do_page_cache_readahead() to peek at the queue's
        read_congested state.  If the queue is read-congested we abandon the entire
        readahead up-front without doing all that work.
      
      - If the queue is not read-congested, we go ahead and do the readahead,
        after having set PF_READAHEAD.
      
        The backing_dev_info's read-congested threshold cuts in when 7/8ths of
        the queue's requests are in flight, so it is probable that the readahead
        abandonment code in __make_request will now almost never trigger.
      
      - The above changes make do_page_cache_readahead() "unreliable", in that it
        may do nothing at all.
      
        However there are some system calls:
      
      	- fadvise(POSIX_FADV_WILLNEED)
      	- madvise(MADV_WILLNEED)
      	- sys_readahead()
      
        In which the user has an expectation that the kernel will actually
        perform the IO.
      
        So the patch creates a new "force_page_cache_readahead()" which will
        perform the IO regardless of the queue's congestion state.
      
        Arguably, this is the wrong thing to do: even though the application
        requested readahead it could be that the kernel _should_ abandon the user's
        request because the disk is so busy.
      
        I don't know.  But for now, let's keep the above syscalls behaviour
        unchanged.  It is trivial to switch back to do_page_cache_readahead()
        later.
      12affe8f
    • Andrew Morton's avatar
      [PATCH] fix bogus IO error messages · d49ceaba
      Andrew Morton authored
      Since Jens added the pagecache readahead support in the block layer we've
      been getting bogus IO error messages from buffer.c due to __make_request
      calling end_io against a non-uptodate buffer.
      
      We can just use PF_READAHEAD to shut that up.  But really, we shouldn't even
      have allocated all those pages and submittted the readahead IO if the queue
      was congested.   We have the infrastructure to do that now.
      d49ceaba
    • Andrew Morton's avatar
      [PATCH] Fix vmtruncate race and distributed filesystem race · 3e63f0be
      Andrew Morton authored
      From: Dave McCracken <dmccr@us.ibm.com>
      
      This patch solves the race between truncate and page in which can cause stray
      anon pages to appear in the truncated region.
      
      The race occurs when a process is sleeping in pagein IO during the truncate:
      there's a window after checking i_size in which the paging-in process decides
      that the page was an OK one.
      
      This leaves an anon page in the pagetables, and if the file is subsequently
      extended we have an anon page floating about inside a file-backed mmap - user
      modifications will not be written out.
      
      Apparently this is also needed for the implementation of POSIX semantics for
      distributed filesystems.
      
      We use a generation counter in the address_space so the paging-in process can
      determine whether there was a truncate which might have shot the new page
      down.
      
      It's a bit grubby to be playing with files and inodes in do_no_page(), but we
      do need the page_table_lock coverage for this, and rearranging thngs to
      provide that coverage to filemap_nopage wasn't very nice either.
      3e63f0be
    • Andrew Morton's avatar
      [PATCH] Interface to invalidate regions of mmaps · 5096494f
      Andrew Morton authored
      From: "Paul E. McKenney" <paulmck@us.ibm.com>
      
      The patch reworks and generalises vmtruncate_list() a bit to create an API
      which invalidates a specified portion of an address_space, permitting
      distributed filesystems to maintain POSIX semantics when a file mmap()ed on
      one client is modified on another client.
      5096494f
    • Andrew Morton's avatar
      [PATCH] unlock_buffer() needs a barrier · 6e20adb2
      Andrew Morton authored
      From: Chris Mason <mason@suse.com>
      
      unlock_buffer() needs a barrier before the waitqueue_active() optimisation.
      6e20adb2
    • Andrew Morton's avatar
      [PATCH] kwsapd can free too much memory · f76a4338
      Andrew Morton authored
      We need to subtract the number of freed slab pages from the number of pages
      to free, not add it.
      f76a4338
    • Andrew Morton's avatar
      [PATCH] non-MII 3c59x fix · 6f3a72d6
      Andrew Morton authored
      From: Marc Zyngier <mzyngier@freesurf.fr>
      
      The following patch tries to fix a small bug that crept in at some
      point during 2.5.
      
      None of my 3c592 or 3c597 would work if I didn't force media
      type. Instead, it would try to probe MII, looking for a suitable
      transceiver, and finaly give up, because these cards really do not
      have any sort of MII... :
      
        EISA: Probing bus 0 at Intel Corp. 82375EB
        EISA: Mainboard DEC5000 detected.
        EISA: slot 2 : ADP0001 detected.
        EISA: slot 3 : ADP7771 detected.
        EISA: slot 4 : DPTA401 detected.
        EISA: slot 5 : TCM5920 detected.
        3c59x: Donald Becker and others. www.scyld.com/network/vortex.html
        00:05: 3Com EISA 3c592 EISA 10Mbps Demon/Vortex at 0x5000. Vers LK1.1.19
          ***WARNING*** No MII transceivers found!
        EISA: Detected 4 cards.
      
      With the enclosed patch, it just works, at least on my setup (3c592 on
      Alpha, and 3c597 on x86). I haven't been able to test it didn't break
      cards with MII, because I do not have such cards in my test boxes...
      
      The patch also removes two useless EISA-only #define I introduced some
      time ago.
      6f3a72d6
    • Andrew Morton's avatar
      [PATCH] dev_t printing · 482a9473
      Andrew Morton authored
      From: Greg KH <greg@kroah.com>
      
      Different architectures use different types for dev_t, so it is hard to
      print dev_t variables out correctly.  Quite a lot of code is wrong now, and
      will continue to be wrong when 64-bit dev_t is merged.
      
      Greg's patch introduces a little wrapper function which can be used to
      safely form a dev_t for printing.  I added the format_dev_t function as
      well, which is needed for direct insertion in a printk statement.
      482a9473
    • Andrew Morton's avatar
      [PATCH] 3c59x suspend/resume fix · 81e99e7f
      Andrew Morton authored
      Currently, all of the 3c59x power management code is disabled unless the
      `enable_wol' module parameter is provided.  This was done because the PM
      support was added quite late in the 2.4 cycle.
      
      It was always intended that this conditionality be removed in 2.5.
      81e99e7f
    • Andrew Morton's avatar
      [PATCH] update to speedstep-centrino.c · 1a14aeea
      Andrew Morton authored
      From: Jeremy Fitzhardinge <jeremy@goop.org>
      
      The 900MHz Pentium M has two spaces before the frequency:
      "Intel(R) Pentium(R) M processor  900MHz"
      
      This patch adds a 2nd CPU macro (_CPU) which also takes the
      stringified speed so that extra spacing can be added.
      1a14aeea
    • Andrew Morton's avatar
      [PATCH] buffer.c debugging · e6238ac5
      Andrew Morton authored
      We get a bug report about once per month wherein find_get_block_slow() spits
      an error message.  For some reason we have buffers against a blockdev page
      which have the incorrect b_size.
      
      Probably, an earlier set_blcoksize() failed to invalidate all the apges for
      some reason.  I just don't know.
      
      The patch adds a bit of extra debug info to aid in diagnosing this.
      e6238ac5
    • Andrew Morton's avatar
      [PATCH] re-slabify i386 pgd's and pmd's · 6beadb3b
      Andrew Morton authored
      From: William Lee Irwin III <wli@holomorphy.com>
      
      The original pgd/pmd slabification patches had a critical bug on
      non-PAE where both modifications of pgd entries to remove pagetables
      attached for non-PSE mappings back to a PSE state and modifications of
      pgd entries to attach pagetables to bring PSE mappings into a non-PSE
      state were not propagated to cached pgd's. PAE was immune to it owing
      to the shared kernel pmd.
      
      The following patch vs. 2.5.69 restores the slabification done to cache
      preconstructed pagetables with the proper propagation of conversions
      to and from PSE mappings to cached pgd's for the non-PAE case.
      
      This is an optimization to reduce the bitblitting overhead for spawning
      small tasks (for larger ones, bottom-level pagetable copies dominate)
      primarily on non-PAE; the PAE code change is largely to remove #ifdefs
      and to treat the two cases uniformly, though some positive but small
      performance improvement has been observed for PAE in one of mbligh's
      posts. The non-PAE performance improvement has been observed on a box
      running a script-heavy end-user workload as a large long-term profile
      hit count reduction for pgd_alloc() and relatives thereof.
      
      I would very much appreciate outside testers. Even though I've been
      able to verify this boots and runs properly and survives several cycles
      of restarting X on my non-PAE Thinkpad T21, that environment has never
      been able to reproduce the bug. Those with the proper graphics hardware
      to prod the affected codepaths into action are the ones best suited to
      verify proper functionality. There is also some locking introduced; if
      some performance verification on non-PAE SMP i386 targets (my SMP
      targets unfortunately all require PAE due to arch code dependencies)
      that also have the proper hardware could be done, that would help
      determine whether alternative locking schemes that competed against
      the one shown here are preferable (in particular, the ticket-based
      scheme mentioned in the comments).
      6beadb3b
    • Andrew Morton's avatar
      [PATCH] selinux merge · 7bbf0e05
      Andrew Morton authored
      From Stephen Smalley <sds@epoch.ncsc.mil>
      
      This has been in -mm for a few weeks and James Morris has been
      regression testing each release.
      7bbf0e05
    • Andrew Morton's avatar
      [PATCH] misc fixes · ad55c575
      Andrew Morton authored
      - remove unneeded loglevel manipulation in journal_dirty_metadata()
      
      - remove crud which was acidentally added to blkmtd.c
      
      - remove unused vars in mxser.c (Vinay K Nallamothu <vinay-rc@naturesoft.net>)
      
      - PF_LESS_THROTTLE was using the wrong bit (Joe Korty <joe.korty@ccur.com>)
      
      - unused var in cyclades.c ("Krishnakumar. R" <krishnakumar@naturesoft.net>)
      ad55c575
  2. 31 Jul, 2003 24 commits