Summary of changes from v2.5.29 to v2.5.30 ============================================ PPC32: clean up the initial mapping of RAM, allow for large-page mappings. [ARM PATCH] 1199/1: ISA Macros expected for platforms This makes IRDA happy. [ARM] ARM keyboard code fixups for the input layer. The ARM specific parts of the input layer are being submitted via Vojtech. This cset covers the arch/arm and include/asm-arm parts of the changes necessary to use these drivers. PPC32: Update to match the removal of global cli/sti etc. and the removal of local_bh_count and local_irq_count. PPC32: Allow Motorola machines with PPCBUG to get their boot args from NVRAM. PPC32: Update the CPC700 code to be able to use all 32 IRQs. PPC32: Change some instances of CONFIG_SERIAL_CONSOLE to CONFIG_SERIAL_8250_CONSOLE. PPC32: Update the Motorola LoPEC platform to work with CONFIG_VT. Revert some bogus changes from mainline -- an over-excessive search/replace and some BKL additions from someone who evidently didn't bother to look at either the code they were modifying or the documentation in README.Locking which explicitly states the BKL is not needed. Remove licensing noise from individual JFFS2 files to refer to a single 'LICENCE' file, which contains the new licence info. JFFS2 is no longer dual-licensed under RHEPL and GPL; eCos is now GPL'd (with an exception for linking application) and hence so is JFFS2. JFFS2 update. Fix rename-over-existing-file behaviour to actually reduce nlink of the victim, and disallow rename over a non-empty directory. Improved NAND support, some optimisations and other bug fixes. JFFS2 compile fixes for latest kernel. Switch JFFS2 to C99 named initialisers do_mounts.c, block_dev.c, hiddev.c, md.c: Switched from devfs_find_handle() to devfs_get_handle() Many files: Switched from devfs_find_handle() to devfs_find_and_unregister() base.c: Created . driverfs: use dentry->d_subdirs list instead of our own list when removing directory struct dentry already has a list of the children files in a directory, making the list in struct driver_dir_entry irrelevant. This is step one in removing it. Instead of iterating over our list, we iterate over ->d_subdirs and call driverfs_unlink on each one. Prevent crash after mounting JFFS2 images built with incorrect erase size. PPC32: update hard/soft IRQ stuff along the lines of the i386 code. PPC32: Simple mmu_gather implementation for now. This could be made more efficient by batching the hashtable flushes but that can be done later. PPC32: remove unused code in ppc_htab.c PPC32: use VM_FAULT_* names instead of numbers. PPC32: implement __downgrade_write for rwsems. PPC32: add a comment explaining leap year calculation. Since we have a signed 32-bit time_t, the fact that y % 4 == 0 will get it wrong in 2100 is irrelevant. [SERIAL] Locking fixup (part 1) After the last few days of debugging, we've ended up with the caller of the start_tx and stop_tx methods taking the per-port lock. This cset and the accompanying csets make the same change to some of the other methods for consistency reasons. Since these methods don't contain a lot of code, it is better that they have consistent locking rules. This cset fixes up the stop_rx method. [SERIAL] Locking fixup (part 2) After the last few days of debugging, we've ended up with the caller of the start_tx and stop_tx methods taking the per-port lock. This cset and the accompanying csets make the same change to some of the other methods for consistency reasons. Since these methods don't contain a lot of code, it is better that they have consistent locking rules. This cset fixes up the enable_ms method. VFS: implement sendfile file operation Currently the sendfile syscalls hardcode assumptions about the implementation of the read file operations implementation. Although it checks for the presence of a readpage address-space operation filesystems in Linux are free to implement read differently from the generic version (generic_file_read). Many filesystems such as tmpfs, smbfs or xfs chose to implement it differently and need additional locking, revalidation or checks. [ARM] Cleanup fallout from global IRQ changes. Replace local_save_flags_cli with local_irq_save. Remove duplicate cli, sti, save_flags and restore_flags definitions. [ARM] Remove {prepare,finish}_arch_{schedule,switch} These macros are no longer required; the generic versions defined in sched.c are sufficient for ARM. [ARM] Update ARM IRQ code for 2.5.28 global IRQ changes irq_enter/irq_exit no longer take arguments. We also use the x86 methods for hardirq.h and softirq.h; they're sufficient for ARM. [ARM] Add security framework hooks (ptrace and syscall) kbuild: Fix compiling/installing as different users "make bzImage && sudo make install" had the problem that during the "sudo make install" the build system would notice that the information in include/linux/compile.h is not accurate (it says "compiled by ", but we are root), thus causing compile.h to be updated and leading to some recompiles. We now only update "compile.h" if the current user is the owner of include/linux/autoconf.h, i.e. the user who did the "make *config". So the above sequence will correctly state "compiled by ". kbuild: Fix net/8022 selections Patch by Keith Owens, with slight modifications. His description: The problem is net/802/Makefile which includes p8022 for any of CONFIG_LLC, CONFIG_TR, CONFIG_IPX or CONFIG_ATALK. p8022 calls llc_register_sap which is in ext8022.o, that file is built by net/core/Makefile but only for CONFIG_LLC. It worked before because of the wrong test in net/core/Makefile which always built ext8022.o. kbuild: Make scripts/compile.h when sh != bash Contributed by Arkadiusz Miskiewicz kbuild: Fix "export-objs" This patch cleans up most of the Makefile's to list the correct files (i.e. the ones which do have "EXPORT_SYMBOL" in them) in $(export-objs) Contributed by "Lightweight patch manager" [ARM] Optimise kernel->userspace exit code a little. This improves interrupts and exceptions returning to user space by a few of cycles. We change the requirements for *_restore_user_regs slightly so we can remove a few instructions. We also re-shuffle the code to handle pending work. [ARM] Make ARM work with rmap ARM can use the generic rmap.h. It doesn't need its own version. [ARM] Remove mach-types.h header file from asm/arch/hardware.h Someone included mach-types.h into asm/arch/hardware.h, which causes the whole kernel to needlessly rebuild when the machine type file is updated. Move mach-types.h include into the files that really need it. [ARM] Update SA11x0 cpufreq code to reflect CVS version. This covers the changes Dominik's made to the core cpufreq code. [ARM] Prevent oops in free_pages() when freeing a pgd free_pages() oopses if page->mapping is non-NULL. Ensure that any rmap datastructures for the page are freed before freeing the concerned page. [ARM] Two small changes Remove a couple of needless includes from system3.c, and update mach-types file. [ARM PATCH] 1179/1: ldm/stm alignement fixups: treat 920T the same as 922T The check in do_alignment_ldmstm for addr and eaddr being the same is #ifdef'd out for the ARM922T because they aren't expected to be the same due to the different way the MMU sets addr. The ARM920T is just a 922T with more cache, and should be treated the same. I've checked on a real ARM920T and it does complain loudly every time it fixes up a misaligned ldm/stm unless this patch is applied. I suspect that the ARM926 should be treated the same way as well, but I can't find any relevant documentation on ARM's web-site, so have left it out. Remove kHTTPD [PATCH] Fix ksoftirqd and migration threads initcalls This patch fixes the calls to initialize ksoftirqd and the migration threads. This really should be done by the initcall depends patch. [PATCH] Hot-plug CPU notifier warning fix As pointed out by Andrew Morton, this fixes: softirq.c: In function `spawn_ksoftirqd': softirq.c:416: warning: statement with no effect [PATCH] Fix "make xconfig" [PATCH] Add argument to synchronize_irq in cs46xx Added irq-argument to synchronize_irq to make sound/oss/cs46xx.c compile again. [PATCH] PAE compile fix Fix PMD typo [PATCH] fix synchronize_irq() bug This fixes a synchronize_irq() bug: if the interrupt is freed while an IRQ handler is running (irq state is IRQ_INPROGRESS) then synchronize_irq() will return early, which is incorrect. there was another do_IRQ() bug that in fact necessiated the bad code that caused the synchronize_irq() bug - we kept the IRQ_INPROGRESS bit set for not active interrupt sources - after they happen for the first time. Now the only effect this has is on i8259A irq handling - we used to keep these irqs disabled after the first 'spurious' interrupt happened. Now what the i8259A code really wants to do IMO is to keep the interrupt disabled if there is no handler defined for that interrupt source. The patch adds exactly this. I dont remember why this was needed in the first place (irq probing? avoidance of interrupt storms?), but with the patch the behavior should be equivalent. [PATCH] partition fix The patch below does two things: (i) fixes a small bug in the new partition code This is the final chunk s/n/slot/. I'll refrain from giving a vi script. This is uncontroversial. (ii) removes ancient garbage concerning disk managers This may well be controversial. (Long ago, when disks became larger than 500 MB, lots of tricks were invented to keep DOS happy. Both hardware tricks and software tricks. One of the software tricks was the invention of boot managers. There have been many of those. The Linux kernel has had support for two of them: OnTrack Disk Manager and EZdrive. More precisely: there have been many versions of both OnTrack Disk Manager and EZdrive, and the kernel had support for a few of these versions. I think the time has come to remove the automatic support - every now and then it bites some innocent user, and the support is not really needed any longer, and the support is for outdated versions of these boot managers. No doubt it will turn out that users still exist that use some form of this stuff, but I would prefer to support them by explicit kernel boot parameters, rather than by code that guesses what might be the right thing to do. The patch below just rips out the old stuff. Depending on the screams this might provoke I expect to add some boot parameters.) [PATCH] LSM file locking patch is bogus - Remove third argument from file_lock security op. Whether the lock is blocking or not cannot make any difference to a security module! - Fix the call in sys_flock to pass the translated lock command, not the original. - Add a call in fcntl_setlease. If they're going to know about two types of lock, let's tell them about the third too. [PATCH] PATCH: 2.5.29 Fix pnpbios This should do the trick for pnpbios - we load the initial gdt into each gdt, and we load the parameters into the gdt of the cpu making the call relying on the spinlock to avoid bouncing cpu due to pre-empt [PATCH] PATCH: 2.5.29 Fix cmd640 config locking We use the pci host lock so that we lock config space portably while handling the CMD640 config space via our own routines to avoid pci bios tripping CMD640 hardware stuff. We need to use this lock in order to ensure that we lock at a portable layer. Also add the 2.4.19 fixes for avoiding wrong probes, and the fix noted on the list. Move cmd640_lock outside the CONFIG_BLK_DEV_CMD640_ENHANCED test, since it is needed regardless. Small fix to assign continuous values to KEY_*. Removed deprecated devfs_find_handle() Implement down_read_trylock() and down_write_trylock() and add a generic spinlock implementation for downgrade_write(). [SERIAL] Remove some old compatibility cruft from 8250_pci.c 8250_pci.c contains some old compatibility cruft for when __devexit wasn't defined by the generic kernel. It is now, so it's gone. [SERIAL] Add pci_disable_device() to initialisation failure paths. [PATCH] fix Thread-Local Storage GDT access The gdt entry is consulted only while loading its index into the segment register. So load_TLS_desc(next, cpu) must be called before loading next->fs,next->gs in __switch_to(). [PATCH] sound/oss/trident.c [1/2] merge driver from 2.4-ac This patch (1/2) brings the sound/oss/trident.c driver up to date with the driver in the 2.4-ac tree. It fixes the following bugs: * fix wrong cast in suspend/resume (Eric Lemar via Ian Soboroff) * fix bug where we would free with free_pages() memory allocated via pci_alloc_consistent(). * add a missing unlock on an error path. * rewrite the code to read/write registers of audio codecs for Ali5451 (Lei Hu) It also does various cleanups so that the code conforms to Documentation/CodingStyle and is nicer to work with. [PATCH] sound/oss/trident.c [2/2] remove cli/sti calls This patch replaces the cli/sti calls in the trident.c driver with spin_lock_irqsave/spin_unlock_irqrestore. [PATCH] Set PG_uptodate in nfs_writepage_sync() A patch by Charles Lever (Charles.Lever@netapp.com) that ensures the PG_uptodate bit gets set if an entire page gets written by nfs_writepage_sync(). [PATCH] Support for cached lookups via readdirplus [1/6] Cleanup for the readdirplus code. Make struct nfs_entry take pointers to the filehandle and file attributes. [PATCH] Support for cached lookups via readdirplus [2/6] Cleanup for readdirplus. Allow the file attribute struct to set the NFS_READTIME(inode) to some value other than 'jiffies'. [PATCH] Support for cached lookups via readdirplus [3/6] Cache the information about whether or not the server supports READDIRPLUS. [PATCH] Support for cached lookups via readdirplus [4/6] Add support for positive lookups using the READDIRPLUS cached information. Both new lookups and lookup revalidation is supported. Use READDIRPLUS instead of READDIR on NFSv3 directories with lengths shorter than 8*PAGE_SIZE. Note that inode attribute information is only updated if it is seen to be more recent than any existing cached information. [PATCH] Support for cached lookups via readdirplus [6/6] Add support for the glibc 'd_type' field in cases where we have the READDIRPLUS file attribute information available to us in nfs_do_filldir(). [PATCH] APM fixes, 2.5.29 the attached patch fixes two things: - a TLS related bug noticed by Arjan van de Ven: apm_init() should set up all CPU's gdt entries - just in case some code happens to call in the APM BIOS on the wrong CPU. This should also handle the case when some APM code gets triggered (by suspend or power button or something). - compilation problem Since "access_process_vm()" releases pages that can be in the page cache, it needs to use page_cache_release() instead of plain "put_page()". [PATCH] misc fixes There are a few VM-related patches in this series. Mainly fixes; feature work is on hold. We have some fairly serious locking contention problems with the reverse mapping's pte_chains. Until we have a clear way out of that I believe that it is best to not merge code which has a lot of rmap dependency. It is apparent that these problems will not be solved by tweaking - some redesign is needed. In the 2.5 timeframe the only practical solution appears to be page table sharing, based on Daniel's February work. Daniel and Dave McCracken are working that. Some bits and pieces here: - list_splice() has an open-coded list_empty() in it. Use list_empty() instead. - in shrink_cache() we have a local `nr_pages' which shadows another local. Rename the inner one. (Nikita Danilov) - Add a BUG() on a can't-happen code path in page_remove_rmap(). - Tighten up the bug checks in the BH completion handlers - if the buffer is still under IO then it must be locked, because we unlock it inside the page_uptodate_lock. [PATCH] use a slab cache for pte_chains Patch from Bill Irwin. It removes the custom pte_chain allocator in mm/rmap.c and replaces it with a slab cache. "This patch (1) eliminates the pte_chain_freelist_lock and all contention on it (2) gives the VM the ability to recover unused pte_chain pages Anton Blanchard has reported (1) from prior incarnations of this patch. Craig Kulesa has reported (2) in combination with slab-on-LRU patches. I've left OOM detection out of this patch entirely as upcoming patches will do real OOM handling for pte_chains and all the code changed anyway." [PATCH] show_free_areas() cleanup Cleanup to show_free_areas() from Bill Irwin: show_free_areas() and show_free_areas_core() is a mess. (1) it uses a bizarre and ugly form of list iteration to walk buddy lists use standard list functions instead (2) it prints the same information repeatedly once per-node rationalize the braindamaged iteration logic (3) show_free_areas_node() is useless and not called anywhere remove it entirely (4) show_free_areas() itself just calls show_free_areas_core() remove show_free_areas_core() and do the stuff directly (5) SWAP_CACHE_INFO is always #defined, remove it (6) INC_CACHE_INFO() doesn't use the do { } while (0) construct This patch also includes Matthew Dobson's patch which removes mm/numa.c:node_lock. The consensus is that it doesn't do anything now that show_free_areas_node() isn't there. [PATCH] speed up pte_chain locking on uniprocessors ifdef out some operations in pte_chain_lock() which are not necessary on uniprocessor. [PATCH] optimise struct page layout Reorganise the members of struct page. - Place ->flags at the start so the compiler can generate indirect addressing rather than indirect+indexed for this commonly-accessed field. Shrinks the kernel by ~100 bytes. - Keep ->count with ->flags so they have the best chance of being in the same cacheline. [PATCH] for_each_pgdat macro Patch from Robert Love. This patch implements for_each_pgdat(pg_data_t *) which is a helper macro to cleanup code that does a loop of the form: pgdat = pgdat_list; while(pgdat) { /* ... */ pgdat = pgdat->node_next; } and replace it with: for_each_pgdat(pgdat) { /* ... */ } This code is from Rik's 2.4-rmap patch and is by William Irwin. [PATCH] for_each_zone macro Patch from Robert Love. Attached patch implements for_each_zone(zont_t *) which is a helper macro to cleanup code of the form: for (pgdat = pgdat_list; pgdat; pgdat = pgdat->node_next) { for (i = 0; i < MAX_NR_ZONES; ++i) { zone_t * z = pgdat->node_zones + i; /* ... */ } } and replace it with: for_each_zone(zone) { /* ... */ } This patch only replaces one use of the above loop with the new macro. Pending code, however, currently in the full rmap patch uses for_each_zone more extensively. [PATCH] strict overcommit Alan's overcommit patch, brought to 2.5 by Robert Love. Can't say I've tested its functionality at all, but it doesn't crash, it has been in -ac and RH kernels for some time and I haven't observed any of its functions on profiles. "So what is strict VM overcommit? We introduce new overcommit policies that attempt to never succeed an allocation that can not be fulfilled by the backing store and consequently never OOM. This is achieved through strict accounting of the committed address space and a policy to allow/refuse allocations based on that accounting. In the strictest of modes, it should be impossible to allocate more memory than available and impossible to OOM. All memory failures should be pushed down to the allocation routines -- malloc, mmap, etc. The new modes are available via sysctl (same as before). See Documentation/vm/overcommit-accounting for more information." [PATCH] use c99 initialisers in ext3 Convert ext3 to the C99 initialiser format. From Rusty. [PATCH] direct IO updates This patch is a performance and correctness update to the direct-IO code: O_DIRECT and the raw driver. It mainly affects IO against blockdevs. The direct_io code was returning -EINVAL for a filesystem hole. Change it to clear the userspace page instead. There were a few restrictions and weirdnesses wrt blocksize and alignments. The code has been reworked so we now lay out maximum-sized BIOs at any sector alignment. Because of this, the raw driver has been altered to set the blockdev's soft blocksize to the minimum possible at open() time. Typically, 512 bytes. There are now no performance disadvantages to using small blocksizes, and this gives the finest possible alignment. There is no API here for setting or querying the soft blocksize of the raw driver (there never was, really), which could conceivably be a problem. If it is, we can permit BLKBSZSET and BLKBSZGET against the fd which /dev/raw/rawN returned, but that would require that blk_ioctl() be exported to modules again. This code is wickedly quick. Here's an oprofile of a single 500MHz PIII reading from four (old) scsi disks (two aic7xxx controllers) via the raw driver. Aggregate throughput is 72 megabytes/second: c013363c 24 0.0896492 __set_page_dirty_buffers c021b8cc 24 0.0896492 ahc_linux_isr c012b5dc 25 0.0933846 kmem_cache_free c014d894 26 0.09712 dio_bio_complete c01cc78c 26 0.09712 number c0123bd4 40 0.149415 follow_page c01eed8c 46 0.171828 end_that_request_first c01ed410 49 0.183034 blk_recount_segments c01ed574 65 0.2428 blk_rq_map_sg c014db38 85 0.317508 do_direct_IO c021b090 90 0.336185 ahc_linux_run_device_queue c010bb78 236 0.881551 timer_interrupt c01052d8 25354 94.707 poll_idle A testament to the efficiency of the 2.5 block layer. And against four IDE disks on an HPT374 controller. Throughput is 120 megabytes/sec: c01eed8c 80 0.292462 end_that_request_first c01fe850 87 0.318052 hpt3xx_intrproc c01ed574 123 0.44966 blk_rq_map_sg c01f8f10 141 0.515464 ata_select c014db38 153 0.559333 do_direct_IO c010bb78 235 0.859107 timer_interrupt c01f9144 281 1.02727 ata_irq_enable c01ff990 290 1.06017 udma_pci_init c01fe878 308 1.12598 hpt3xx_maskproc c02006f8 379 1.38554 idedisk_do_request c02356a0 609 2.22637 pci_conf1_read c01ff8dc 611 2.23368 udma_pci_start c01ff950 922 3.37062 udma_pci_irq_status c01f8fac 1002 3.66308 ata_status c01ff26c 1059 3.87146 ata_start_dma c01feb70 1141 4.17124 hpt374_udma_stop c01f9228 3072 11.2305 ata_out_regfile c01052d8 15193 55.5422 poll_idle Not so good. One problem which has been identified with O_DIRECT is the cost of repeated calls into the mapping's get_block() callback. Not a big problem with ext2 but other filesystems have more complex get_block implementations. So what I have done is to require that callers of generic_direct_IO() implement the new `get_blocks()' interface. This is a small extension to get_block(). It gets passed another argument which indicates the maximum number of blocks which should be mapped, and it returns the number of blocks which it did map in bh_result->b_size. This allows the fs to map up to 4G of disk (or of hole) in a single get_block() invokation. There are some other caveats and requirements of get_blocks() which are documented in the comment block over fs/direct_io.c:get_more_blocks(). Possibly, get_blocks() will be the 2.6 kernel's way of doing gang block mapping. It certainly allows good speedups. But it doesn't allow the fs to return a scatter list of blocks - it only understands linear chunks of disk. I think that's really all it _should_ do. I'll let get_blocks() sit for a while and wait for some feedback. If it is sufficient and nobody objects too much, I shall convert all get_block() instances in the kernel to be get_blocks() instances. And I'll teach readahead (at least) to use the get_blocks() extension. Delayed allocate writeback could use get_blocks(). As could block_prepare_write() for blocksize < PAGE_CACHE_SIZE. There's no mileage using it in mpage_writepages() because all our filesystems are syncalloc, and nobody uses MAP_SHARED for much. It will be tricky to use get_blocks() for writes, because if a ton of blocks have been mapped into the file and then something goes wrong, the kernel needs to either remove those blocks from the file or zero them out. The direct_io code zeroes them out. btw, some time ago you mentioned that some drivers and/or hardware may get upset if there are multiple simultaneous IOs in progress against the same block. Well, the raw driver has always allowed that to happen. O_DIRECT writes to blockdevs do as well now. todo: 1) The driver will probably explode if someone runs BLKBSZSET while IO is in progress. Need to use bdclaim() somewhere. 2) readv() and writev() need to become direct_io-aware. At present we're doing stop-and-wait for each segment when performing readv/writev against the raw driver and O_DIRECT blockdevs. [PATCH] permit modular build of raw driver This patch allows the raw driver to be built as a kernel module. It also cleans up a bunch of stuff, C99ifies the initialisers, gives lots of symbols static scope, etc. The module is unloadable when there are zero bindings. The current ioctl() interface have no way of undoing a binding - it only allows bindings to be overwritten. So I overloaded a bind to major=0,minor=0 to mean "undo the binding". I'll update the raw(8) manpage for that. generic_file_direct_IO has been exported to modules. The call to invalidate_inode_pages2() has been removed from all generic_file_driect_IO() callers, into generic_file_direct_IO() itself. Mainly to avoid exporting invalidate_inode_pages2() to modules. [PATCH] Re: Limit in set_thread_area the attached patch does the set_thread_area parameter simplification - it also cleans up some other TLS issues, it removes the tls_* fields from the thread_struct, and removes the now unused page-granularity flag. [PATCH] put_page() uses audited Audit put_page() uses of pages that may be in the page cache. Use page_cache_release() instead. [PATCH] SCSI INQUIRY transfer length fix Fixed one of the INQUIRY commands used for probing SCSI devices. This badly-formed command was trapped by the usb-storage driver BUG_ON() which is designed to stop command with a badly formed transfer_length field. [PATCH] SCSI MODE_SENSE transfer length fix Modified the MODE_SENSE write-protect test in sd.c to issue a SCSI request with the request_bufflen the same size as the MODE_SENSE command being issued requests. [PATCH] sched-2.5.29-B1 the attached patch is a comment update of sched.c and it also does a small cleanup in migration_thread(). Make "cpu_relax()" imply a barrier, since that's how it is used. This fixes a lockup in synchronize_irq() on x86. Cset exclude: mingo@elte.hu|ChangeSet|20020728030719|07783 [PATCH] restore lru_cache_del() in truncate_complete_page I removed the PF_INVALIDATE debug check from buffercache leaks, too. It's non-functional - the flag should have been set across truncate_inode_pages(), not invalidate_inode_pages(). VM: remove unused /proc/sys/vm/kswapd and swapctl.h These were totally unused for a long time. It's interesting how many files include swapctl.h, though.. Remove d_delete call from jfs_rmdir and jfs_unlink jfs_rmdir and jfs_unlink have always called d_delete, but it hasn't caused a problem until 2.5.28. The call is an artifact of the 2.2 kernel, which had gone unnoticed in 2.4 and 2.5. [SERIAL] Add HP Diva PCI serial port support. [SERIAL] Cleanup includes. Al Viro pointed out there was a fair bit of redundancy here. We remove many include files from the serial layer, leaving those which are necessary for it to build. This has been posted to lkml, no one complained. This cset also combines a missing include of asm/io.h in 8250_pci.c (unfortunately I've lost the name of the reporter, sorry.) kbuild: Fix double vmlinux link pointed out by Sam Ravnborg Leftover from trident cli/sti removal. Noticed by Zwane Mwaikambo. [PATCH] Remove cli() from R3964 line discipline. I did this ages ago but never submitted it because I never got round to testing it. I still haven't tested it, but it ought to work, and the code is definitely broken without it... [PATCH] fix do_open() interaction with rd.c linux-2.5.28/drivers/block_dev.c has a new do_open that broke initial ramdisk support, because it now requires devices that "manually" set bdev->bd_openers to set bdev->bd_inode->i_size as well. The following single line patch, suggested by Russell King, fixes the problem. There does not appear to be anyone acting as maintainer for rd.c, so I posted to lkml yesterday to ask if anyone objected to my submitting the patch to you, and I also emailed the message to Russell King and Al Viro. Nobody has complained. I have been running the patch for almost a day without problems. [PATCH] fix include/linux/timer.h compile include/linux/timer.h needs to include to get the definition of NULL. [PATCH] page table page->index I found a situation where page->index for a pagetable page can be set to 0 instead of the correct value. This means that ptep_to_address will return the wrong answer. The problem occurs when remap_pmd_range calls pte_alloc_map and pte_alloc_map needs to allocate a new pte page, because remap_pmd_range has masked off the top bits of the address (to avoid overflow in the computation of `end'), and it passes the masked address to pte_alloc_map. Now we presumably don't need to get from the physical pages mapped by remap_page_range back to the ptes mapping them. But we could easily map some normal pages using ptes in that pagetable page subsequently, and when we call ptep_to_address on their ptes it will give the wrong answer. The patch below fixes the problem. There is a more general question this brings up - some of the procedures which iterate over ranges of ptes will do the wrong thing if the end of the address range is too close to ~0UL, while others are OK. Is this a problem in practice? On i386, ppc, and the 64-bit architectures it isn't since user addresses can't go anywhere near ~0UL, but what about arm or m68k for instance? And BTW, being able to go from a pte pointer to the mm and virtual address that that pte maps is an extremely useful thing on ppc, since it will enable me to do MMU hash-table management at set_pte (and ptep_*) time and thus avoid the extra traversal of the pagetables that I am currently doing in flush_tlb_*. So if you do decide to back out rmap, please leave in the hooks for setting page->mapping and page->index on pagetable pages. [PATCH] fix REQ_QUEUED clearing in blk_insert_request() [PATCH] export rwsem downgrade function This should do the trick. parport: fix warning - "flags" is unused after cli/sti removal. [PATCH] fix e1000 after irq craziness I just duplicated the method used in drivers/net/tulip/de2104x.c [PATCH] kbuild: Add new define do_cmd do_cmd is a nice shorthand when creating rules that in one line shall adhere to KBUILD_VERBOSE and make -s. So far the only user is (will be) the docbook makefile [PATCH] docbook: parportbook dependencies and do_cmd o Corrected dependencies for parportbook o Introduced do_cmd, thus adhering to KBUILD_VERBOSE and make -s [PATCH] kbuild: fix warnings in fixdep when compiled with -pedantic Rename "sys_pread/pwrite" to "sys_pread64/pwrite64" to match the actual implementation and avoid confusion. [PATCH] implement kmem_cache_size() Currently there is no way to find out the effective object size of a slab cache. XFS has lots of IRIX-derived code that want to do zalloc() style allocations on zones (which are implemented as slab caches in XFS/Linux) and thus needs to know about it. There are three ways do implement it: a) implement kmem_cache_zalloc b) make the xfs zone a struct of kmem_cache_t and a size variable c) implement kmem_cache_size The current XFS tree does a) but I absolutely don't like it as encourages people to use kmem_cache_zalloc for new code instead of thinking about how to utilize slab object reuse. b) would be easy, but I guess kmem_cache_size is usefull enough to get into the kernel. Here's the patch: [PATCH] shmem_file_write rounding VM_ACCT Repeated overnight kernel builds in tmpfs showed insane Committed_AS by morning. The main bug was that shmem_file_write was passing (newsize-oldsize)>>PAGE_SHIFT to vm_enough_memory, but it has to be ((newsize>>PAGE_SHIFT)-(oldsize>>PAGE_SHIFT)) - imagine 1k writes. But actually, if we're going to do strict accounting, then we should round up to next page not down - use VM_ACCT macro throughout (needs unusual mix of PAGE_CACHE_SIZE with PAGE_SHIFT); and must count one page for a long symlink. [PATCH] SHMEM_MAX_BYTES overflow checking shmem_notify_change and shmem_file_write be careful about overflowingly large loff_t before shifting it into unsigned long for vm_enough_memory. Rename SHMEM_MAX_BLOCKS to SHMEM_MAX_INDEX (to avoid confusion with 512-byte blocks), define SHMEM_MAX_BYTES from it. But 2.5 vmtruncate lacked the s_maxbytes error handling which shmem_notify_change now expects: bring it in from the -dj tree. shmem_file_write error handling needs a closer look later on. [PATCH] mremap MAP_NORESERVE not in flags There is no point in do_mremap clearing MAP_NORESERVE from its flags: it has already validated that only the MREMAP_ flags can be set, and it has no use for MAP_NORESERVE in the code that follows anyway. [PATCH] mmap MAP_NORESERVE not in vm_flags do_mmap_pgoff clears MAP_NORESERVE from vm_flags when VM accounts strictly: but it's not in vm_flags, it's in flags (and tested there). [PATCH] remove unhelpful vm_unacct_vma Remove vm_unacct_vma function: it's only used in one place, which can do it better by using vm_unacct_memory directly. [PATCH] fix shared and private accounting do_mmap_pgoff's (file == NULL) check was incorrect: it caused shared MAP_ANONYMOUS objects to be counted twice (again in shmem_file_setup), and again on fork(); whereas the equivalent shared /dev/zero objects were correctly counted. Conversely, a private readonly file mapping was (correctly) not counted, but still not counted when mprotected to writable: mprotect_fixup had pointless "charged = 0" changes, now it does vm_enough_memory checking when private is first made writable (but later we may want to refine behaviour on a noreserve mapping). Also changed correct (flags & MAP_SHARED) test in do_mmap_pgoff to equivalent (vm_flags & VM_SHARED) test: because do_mmap_pgoff is dealing with vm_flags rather than the input flags by that stage. [PATCH] update overcommit doc and comment Update Doc and remove FIXME comment from fork.c now accounting right. [PATCH] shmem_file_setup when MAP_NORESERVE If we support mmap MAP_NORESERVE, we should support it on shared anonymous objects: too bad that needs a few changes. do_mmap_pgoff pass VM_ACCOUNT (or not) down to shmem_file_setup, flag stored into shmem info, for use by shmem_delete_inode later. Also removed a harmless but pointless call to shmem_truncate. [PATCH] remove acct arg from do_munmap An acct flag was added to do_munmap, true everywhere but in mremap's move_vma: instead of updating the arch and driver sources, revert that that change and temporarily mask VM_ACCOUNT around that one do_munmap. Also, noticed that do_mremap fails needlessly if both shrinking _and_ moving a mapping: update old_len to pass vm area boundaries test. Update file lock security check to match the API change Chris Wright points out that this was also missed in the file locking LSM update Lindent drivers/char/nvram.c in anticipation of more patching This simplifies the software autorepeat code in input/input.c, also killing a race which could be the cause of autorepeat not stopping after a key was released. Convert ncpfs to C99 initializers. By Rusty Trivial Russell. Change the EVIOC?ABS ioctls to use structs rather than arrays of ints. Use stdint.h types instead of __u16 et al in input.h, to make life easier for userspace people, as Brad Hards has suggested. [PATCH] make cpu_relax a barrier on all architectures Make cpu_relax() on all architectures a gcc barrier to match x86. [PATCH] fs/locks.c: eliminate locks_unlock_delete locks_unlock_delete is buggy in a couple of different ways (previously reported by Brian Dixon). Rather than fix it, this patch simply deletes it and uses the normal posix file locking mechanisms to remove all locks in locks_remove_posix instead. [PATCH] wan/sdla_chdlc.c oops fix This "warning fix" bug report is actually an OOPS bugfix. Do x86 "kernel_thread()" explicitly by hand, instead of using a system call from kernel space. This avoids one level of hidden code, and makes what happens much more explicit (and speeds it up too, fwiw) driverfs: Do hashed lookup of dentry's when deleting a driverfs file (instead of searching the list we keep) driverfs: don't do addition/deletion of driver_file_entry's into local lists, as we don't use the lists anymore [PATCH] Bluetooth Subsystem PC Card drivers update This updates the 2.5.x PC Card drivers of the Bluetooth subsystem. driverfs: Remove struct driver_dir_entry::files, since it's not being used anymore driverfs: Remove references to struct driver_file_entry::dentry, as we don't use it for anything useful anymore. driverfs: Don't put the driver_file_entry in struct inode::u.generic_ip or struct file::private_data (since it's already in struct dentry::d_fsdata and we always get to that) driverfs: use the parent directory's struct driver_dir_entry (in struct dentry::d_fsdata) to access the struct device, rather than via struct driver_file_entry::parent pointer. driverfs: Remove struct driver_file_entry::parent, as we can get to it by the dentry of the directory itself Move sleep_on() above refrigerator so that the kseriod thread in serio.c doesn't exit on suspend because of a pending signal. Make s390 and s390x print the right freed init memory size. The expression (&__init_begin - &__init_end) depends on the type of this adhoc extern variables, which was changed from char to long when the code was copied from another arch. Hi Vojtech, some superflous keyboard stuff came back with the last PPC merge to Linus. This patch fixes that. Please apply. [PATCH] cs5530 IDE driver cli/sti fixes and cleanups The CS5530 one seems unneeded looking at the databook. Try the patch below instead, which removes the irq lock and uses the proper kernel functions to enable MWI and master. [PATCH] 2.5.29 IDE 108 - typedef unsigned char byte; is finally gone. Everything using it should be just ported to u8 if I missed some place where it still gets used. - Next round of parameter parsing cleanups by Gerald Champagne. Adjusted a bit to harmonize with hd.c. - Move IDE register bitfields declarations over from hdparm.h to ide.h. - Declare constants needed by hd.c directly there. Those are standard values not subject to change and we prefer a bit of code duplication in favour of making the two drivers independant from each other. - Move everything not ioctl related away from hdreg.h to ide.h. This header is in effect not private to the ATA code and should therefore not contain stuff only usefull there. [PATCH] 2.5.29 IDE 109 - Include first cut by Adam J. Richter on proper lock protection for tuning functions. - Rename ide_register_subdriver() to ata_register_device() and ide_unregister_subdriver() accordingly to ata_unregister_device(), since this is reflecting better what those functions are about. - Remove tons of "curicum vite" style useless documentation here and there. Removed devfs_register_chrdev and devfs_unregister_chrdev. Use register_chrdev and unregister_chrdev as before, and everything will work. Revert input.h back to kernel types. Removed devfs_register_blkdev and devfs_unregister_blkdev. Use register_blkdev and unregister_blkdev as before, and everything will work just fine. Split up "do_fork()" into "copy_process()" and "do_fork()". copy_process() just copies the process, it doesn't actually start it. This is in preparation for doing a "atomically start process on CPU X" or other cases where we want to change the state of the process before we actually start running it. clean up 'return (x);' style stuff into 'return x' in nvram.c driverfs: don't dynamically allocate and duplicate struct driver_file_entry's any more Now that all unique information about struct driver_file_entry's are gone (the dentry and parent pointers), the data in them is shared among all users of the entry. So, we don't have any reason to dynamically allocate and duplicate the data anymore. driverfs: consolidate all the hashed lookups into a static helper: get_dentry() device symlinks: just pass name, not struct driver_file_entry to driverfs_create_symlink symlinks now only use the name field of the struct driver_file_entry, so instead of allocating a new one each time we want to create one, this changes the API to only accept the name (since the driverfs core will never use the other fields either) This also guarantees that we won't leak the memory for the entry when the device goes away: Since the other entries aren't dynamically allocated, and driverfs doesn't free them, we would have to free them ourselves. It's not really necessary, so this is another win for us. driverfs: Change the name of struct driver_file_entry to struct device_attribute It may seem gratuitous, but it's what we really want. driverfs files are meant to expose attributes of various kernel objects, so in that sense, the change adds more accurate meaning to the object. Plus, we will soon gain the ability to expose attributes of drivers (both device and bus) themselves, and we want to be able to have each mean something reasonable. This changes driverfs and the device model core (but none of the other users) Fixup users of driverfs: do a s/driver_file_entry/device_attribute/g on all of them. driverfs: add device_remove_symlink wrapper for removing symlinks (since driverfs API is just about to change...) Remove the devfs_should* functions I added, and replace them with one devfs_only() call This now explains what is really going on much better than before. alpha pid-reporting POSIX comformance bug fix: 2.4 kernels were changed to support POSIX thread groups, such that, sys_getpid() now returns $task->tgid, the thread group id. Since alpha implements its own getpid syscall, it missed this change, which is now included here. driverfs: make device_remove_file take a struct device_attribute *, instead of just a char * (for consistency with device_create_file) fixup users of device_remove_file to pass a struct device_attribute, instead of a char * [PATCH] NFS lookup() BKL imbalance One more lookup bug caught. Fix missing unlock_kernel() when doing readdirplus cached lookups in nfs_lookup(). [PATCH] Re: better getattr caching.. The following patches to nfs2xdr.c/nfs3xdr.c might be relevant: *entry points into the page, and so the assignment should be made before we kunmap(). Also includes a patch that converts references to inode->i_data into inode->i_mapping. Not likely to be the source of your hang, but should still be done for consistency with the rest of the kernel. [PATCH] CPU#1 not working with CONFIG_SMP=y, 2.5.28 OK. Linus, please apply. This fixes cpu_possible() on x86. [PATCH] ohci, control/enumeration fix One of the flakey things I see with 2.5.29 is that many devices give trouble enumerating. uhci still oopses khubd enumerating pegasus (many control message errors first). But that's not the only troublesome combo. This patch fixes a failure that would hang the ohci driver It's basically avoiding a few less IRQs (most noticable with ISO), in this case so that a wedged SET_ADDRESS completes. (Instead of hanging khubd in 'D' state.) And it also updates a diagnostic to provide more troubleshooting help for similar issues in the future. [PATCH] Re: BUG at rmap.c:212 Linus, can we please not have that BUG() in 2.5.30? We'd better BUG out inside the NFS code rather than return a bogus dentry pointer to the VFS layer (which would oops on it inside the dcache lock). [PATCH] Fix brown paper bag race in RPC receive code Changeset 1.403.142.29 introduces a pretty nasty race into the RPC code. Once we've decoded the RPC reply, it needs to be protected against being overwritten by any resends. The following patch achieves this by ensuring that the request is removed from the list xprt->recv in xprt_complete_rqst(). This again ensures that xprt_lookup_rqst() will fail to find that request until we put it back on the list. driverfs: Declare DEVICE_ATTR macro for initializing device attributes (hide internal format of the structure) Convert users of struct device_attribute to initialize the structs using DEVICE_ATTR macro. driverfs: Add struct attribute driverfs can only handle passing struct device to read/write functions. In order to free it of this limitation, we need a common data structure for driverfs to pass around. The only thing that driverfs really needs are the name and mode of the file, which are now located in struct attribute. struct device_attribute gets a struct attribute member, which holds the name and mode. With the DEVICE_ATTR macro, users of the structure require no modification. device_create_file is modified to take a struct attribute parameter a to_dev_attr() macro is introduced to convert between a struct attribute to a struct device_attribute [PATCH] 2.5.29 IDE 110 - cs5530 patches by Adam J. Richter. Small indent style adjustments. - qd65xx cli()/sti() adjustments. - Fix bogous command in ide.c pointed out by Peter Vendroviec. - Eliminate ide_stall_queue(). For those worried: we didn't sleep at all. - Eliminate support for "sector remapping". loop devices can handle stuff like that. All the custom DOS high system memmory loaded BIOS workaround tricks are obsolete right now. If anywhere it should be the FAT filesystem code which should be clever enough to deal with it by adjusting it's read/write methods. - PCI "scather gather" allocation handling revamp by Adam J. Richter. - Simplify do_ide_request after ->sleep removal. - Make do_ide_request prefer to handle the device matching the request queue it was called for first. RQ-queues are unique for devices. In a next step queuedata will be changed to point to the device not the channel. [PATCH] 2.5.29 IDE 111 - Change over queuedata to carry the device instead of the channel information. [PATCH] misc elevator/block updates I've got a new i/o scheduler in testing, some changes where needed in the block layer to accomodate it. Basically because right now assumptions are made about q->queue_head being the sort list. The changes in detail: o elevator_merge_requests_fn takes queue argument as well o __make_request() inits insert_here to NULL instead of q->queue_head.prev, which means that the i/o schedulers must explicitly check for this condition now. o incorporate elv_queue_empty(), it was just a place holder before o add elv_get_sort_head(). it returns the sort head of the elevator for a given request. attempt_{back,front}_merge uses it to determine whether a request is valid or not. Maybe attempt_{back,front}_merge should just be killed, I doubt they have much relevance with the wake up batching. o call the merge_cleanup functions of the elevator _after_ the merge has been done, not before. This way the elevator functions get the new state of the request, which is the most interesting. o Kill extra nr_sectors check in ll_merge_requests_fn() o bi->bi_bdev is always set in __make_request(), so kill check. [PATCH] fix UP links - current bk tree Fix so UP does not ask for migration_init [PATCH] C99 initializers for mm ISO C99 designated initializers by Art Haas for mm. [PATCH] parport_serial/serial init dependencies This looks to be somewhat botched up init dependencies. This patch takes into consideration paride as well as fixing the parport_serial case. driverfs: define struct driverfs_ops and remove struct device dependencies In order to read/write attributes, you have to deal directly with the object that owns them. driverfs really wants to be generic and not deal directly with those objects. So, we create an intermediate layer that subsystems must implement that converts between the generic objects and the specific objects that own the attributes. This allows allows attributes to be exported for any object type. In doing so, it places the responsibility on the subsystems to do the following: - define their own object-specific attribute structures - define their own driverfs_ops - set the ops pointer in struct driver_dir_entry when creating an object's directory - do object reference counting on open() and close() - call the show() and store() callbacks of their attribute structure - convert between the generic objects and the specific objects from the struct driver_dir_entry and struct attribute pointers (using container_of) The implementation of this layer for struct device is intended to be used as an example of the interface. Because this layer of abstraction is now in place, we can move the device attribute structure into include/linux/device.h, and driverfs should be free of references to it completely. [PATCH] swsusp: Vojtech pointed error in usb/hub.c We do not want threads exiting because of suspend, so refrigerator should be just before test for signals pending (so it has chance to kill them). [PATCH] swsusp: comment updates and warning fixes Better comments and less warnings, please apply [PATCH] Adaptec Starfire config fix [PATCH] update dqblk_xfs.h inclusion guards This file was called xqm.h previously, and the inclusion guards still think it is.. [PATCH] remove declaration of __free_pte() __free_pte() no longer exists in the kernel, but is still declared from include/linux/mm.h. This patch removes that declaration. [PATCH] PATCH: kconfig choice defaults 2 (3_3) The default value specified as the last word of the "choice" statement should be a unique abbreviation of one of the sub-prompts. Using one of the sub-symbols is not legal. Fix 'Type of PHY'. [Rusty: this is 3/3 partial resends of 'PATCH: kconfig choice defaults (1/2)'] [PATCH] PATCH 2.5: kconfig EXPERIMENTAL variant form The convention is that symbols that depend on $CONFIG_EXPERIMENTAL are marked in the banner with the string (EXPERIMENTAL). There are some cases where that string is correctly used but is Capitalised instead of uppercase. [PATCH] typo in fs_ufs_super.c:ufs_fill_super() Obvious typo: checking block size but printing fragment size. [PATCH] region changes for rocket this is a small patch for Rocketport device driver for Linux to 1) remove two calls to check_region using request_region instead 2) release allocated region resource in case of error. I don't have this hardware so compilation checked only. This patch does not remove all references to check_region in this driver (one reference still left unchanged). [PATCH] Mark sparc32 unmaintained in 2.5 DaveM said this was fine. [PATCH] Fix typo in mm_slab.c this just fixes a typo. [PATCH] Fix typo in net_ipv4_ipconfig.c this just fixes a typo. [PATCH] Export synchronize_irq on CONFIG_SMP=y Currently, all arches which support SMP define synchronize_irq(irq) to be a real function (generally defined in arch/$(ARCH)/kernel/irq.c). This export was removed inadvertanly I believe in the "bit IRQ lock" removal and IRQ cleanups ChangeSet. [PATCH] fix compile warning Fix warning about undefined struct pt_regs. [PATCH] drm_mga bitops -> long fix Silence bitop on non-long argument warnings. [ Not just silence warnings, but fix portability bug ] [PATCH] reparent scsi new-EH threads to init (Included in 2.4) [PATCH] designated initializer patches for Here are patches for designated initializers in kernel/*. [PATCH] explicit signed char cast in i386 spin_is_locked To make spinlock debugging work with -funsigned-char the i386 version of spin_is_locked() needs to cast to signed char explicitly instead of just char. XFS needed -funsigned-char (and currently still has it), but it doesn't evert hurt. [PATCH] Typo in linux_net_sched_sch_ingress.c [PATCH] ftape bitops -> long fix Silence bitop on non-long argument warnings. [PATCH] silence APIC errors a bit They are harmless mostly and can happen in normal use. (from -rh) [PATCH] small region change for baycom_ser_hdx.c this is a small patch for baycom_ser_hdx.c -- baycom ser12 halfduplex radio modem driver to 1) remove call to check_region using request_region instead 2) check the status of call to request_region 3) release allocated region resource in case of error. I don't have this hardware so compilation checked only. [PATCH] fix warning Quick fix for: smbiod.c:272: warning: deprecated use of label at end of compound statement [PATCH] PATCH 2.5: kconfig spurious EXPERIMENTAL 3 (2_2) Symbol CONFIG_EXT3_FS doesn't depend on CONFIG_EXPERIMENTAL but claims to in its banner. [PATCH] 2.5 Trivial patch - 1400x1050 video mode added twice in 2.5.28 I am not sure if you are the actual maintainer for this, but your name adorns the source : 2.5.28 introduced video mode 1400x1050 twice into drivers/video/modedb.c Both instances use indentical timings, so I guess it's a mistake. [PATCH] PATCH 2.5: kconfig spurious bool default value (1_3) Some CML1 rule contributors seem to think that the "bool" statement takes a third argument which is the default value. It doesn't. [PATCH] using ptr after kfree() Somebody noticed on #kernelnewbies. In the error path, so this is silly cleanup work... [PATCH] PATCH 2.5: kconfig spurious EXPERIMENTAL 3 (1_2) Symbol CONFIG_PPPOATM doesn't depend on CONFIG_EXPERIMENTAL but claims to in its banner. [PATCH] PATCH 2.5: kconfig missing EXPERIMENTAL 4 (1_4) Symbols CONFIG_HISAX_ENTERNOW_PCI and CONFIG_HISAX_AMD7930 depend on CONFIG_EXPERIMENTAL but do not say so in their banners. [PATCH] Typos in linux_arch_i386_kernel_io_apic.c [PATCH] documentation typos in from Debian's kernel package [ Typo fix, makes sense, please apply ] [PATCH] small region change for boardergo.c this is a small patch for boardergo.c linux driver for isdn HYSDN cards to 1) remove call to check_region using request_region instead 2) check the status of call to request_region 3) release allocated region resource in case of error. I don't have this hardware so compilation checked only. [PATCH] sanitize TLS API This removes the TLS clear operation. I've left the flags mask and the writable flag just so that we have the option to introduce extensions without breaking the ABI. [PATCH] [PATCH[ 8139cp comment fix This patch corrects a comment on the 8139cp ethernet driver. [PATCH] Get rid of per-partition blk_size[] kills use of blk_size[] for partitioned devices, removes ->sizes from struct gendisk. [PATCH] split "gendisk" to be per-disk, part 1 now that gendisks don't have shared stuff (we used to set blk_size[] from ->sizes) we can start splitting them into per-disk ones. Step 1: we introduce a new field - ->first_minor (to be merged with ->major into dev_t of entire disk once all gendisks are split). All arrays are assumed to start at that minor (i.e. gd->part[minor] got replaced with gd->part[minor - gd->first_minor], etc.). get_gendisk() is taught to pick the right gendisk if there are several with the same major. [PATCH] split "gendisk" to be per-disk, part 2 we are starting to split gendisks - now we can do that. Done for ide, sd, pd, hd and mfm It's in transit - what we are aiming at is getting ->nr_real to 1 for all gendisks. Once that will be done we will be able to simplify a lot stuff and remove ad-hackery. First thing that will happen after that is death of ->nr_real, obviouslye. Then we (a) will merge ->major and ->first_minor into ->dev (b) strip one level of indirection from ->driverfs_dev_arr, ->de_arr and ->flags - they turn into single-element arrays and we will simply pull the (only) element into struct gendisk. Kills a lot of ad-hackery in splitup code (fewer things to allocate). (c) replace ->major_name with ->disk_name; kills most of the crap in disk_name(9) - it only has to care about adding partition number to the name. Undo d_drop removal at Trond's request Cset exclude: torvalds@home.transmeta.com|ChangeSet|20020801011106|51286 Fix missing semicolon from gendisk work. Linux v2.5.30