- 18 Mar, 2004 7 commits
-
-
Alexander Viro authored
Fixed the locking scheme. The need of extra locking was caused by the fact that hpfs_write_inode() must update directory entry; since HPFS directories are implemented as b-trees, we must provide protection both against rename() (to make sure that we update the entry in right directory) and against rebalancing of the parent. Old scheme had both deadlocks and races - to start with, we had no protection against rename()/unlink()/rmdir(), since (a) locking parent was done without any warranties that it will remain our parent and (b) check that we still have a directory entry (== have positive nlink) was done before we tried to lock the parent. Moreover, iget serialization killed two steps ago gave immediate deadlocks if iget() of parent had triggered another hpfs_write_inode(). New scheme introduces another per-inode semaphore (hpfs-only, obviously) protecting the reference to parent. It's taken on rename/rmdir/unlink victims and inode being moved by rename. Old semaphores are taken only on parent(s) and only after we grab one(s) of the new kind. hpfs_write_inode() gets the new semaphore on our inode, checks nlink and if it's non-zero grabs parent and takes the old semaphore on it. Order among the semaphores of the same kind is arbitrary - the only function that might take more than one of the same kind is hpfs_rename() and it's serialized by VFS. We might get away with only one semaphore, but then the ordering issues would bite us big way - we would have to make sure that child is always locked before parent (hpfs_write_inode() leaves no other choice) and while that's easy to do for almost all operations, rename() is a bitch - as always. And per-superblock rwsem giving rename() vs. write_inode() exclusion on hpfs would make the entire thing too baroque for my taste. ->readdir() takes no locks at all (protection against directory modifications is provided by VFS exclusion), ditto for ->lookup(). ->llseek() on directories switched to use of (VFS) ->i_sem, so it's safe from directory modifications and ->readdir() is safe from it - no hpfs locks are needed here.
-
Alexander Viro authored
We used to have GFP_KERNEL kmalloc() done by the code that held hpfs lock on directory. That could trigger a call of hpfs_write_inode() and deadlock; fixed by switch to GFP_NOFS. Same for hpfs inodes themselves - hpfs_write_inode() calls iget() and that could trigger both the deadlocks (avoidable with very baroque locking scheme) and stack overflows (unavoidable unless we kill potential recursion here).
-
Alexander Viro authored
Killed the nightmares in hpfs iget handling. Since in some (fairly frequent) cases hpfs_read_inode() could avoid any IO (basically, lookup hitting a native HPFS regular file can get all data from directory entry) hpfs had a flag passed to that sucker. Said flag had been protected by a semaphore lookalike made out of spit and duct-tape and callers of iget looked like hpfs_lock_iget(sb, flag); result = iget(sb, ino); hpfs_unlock_iget(sb); Since now we are calling hpfs_read_inode() directly (note that calling it without hpfs_lock_iget() would simply break) we can forget all that crap and get rid of the flag - caller knows what it wants to call. BTW, that had killed one of the last sleep_on() users in fs/*/*.
-
Alexander Viro authored
Preparation to hpfs iget locking cleanup - remaining iget() callers replaced with explicit iget_locked() + call hpfs_read_inode()/unlock_new_inode() if inode is new.
-
Alexander Viro authored
1) common initialization for all paths in hpfs_read_inode() taken into a separate helper (hpfs_init_inode()) 2) hpfs mkdir(),create(),mknod() and symlink() do not bother with iget() anymore - they call new_inode(), do initializations and insert new inode into icache. Handling of OOM failures cleaned up - if we can't allocate in-core inode, bail instead of corrupting the filesystem. Allocating in-core inode early also avoids one of the deadlocks here (hpfs_write_inode() from memory pressure by kmem_cache_alloc() could deadlock on attempt to lock our directory). 3) hpfs_write_inode() marks the inode dirty again in case if it fails to iget() its parent directory. Again, OOM could trigger fs corruption here.
-
Alexander Viro authored
hpfs_{lock,unlock}_{2,3}inodes() killed; all places that take more than one lock have ->i_sem held by VFS on all inodes involved and all hpfs per-inode locks are of the same type. IOW, we can replace these guys with multiple hpfs_lock_inode() - order doesn't matter here.
-
Alexander Viro authored
Failure exits in hpfs/namei.c merged and cleaned up.
-
- 17 Mar, 2004 21 commits
-
-
Andrew Morton authored
From: Armin Schindler <armin@melware.de> Fixed NULL pointer reference in recv_handler()
-
Andrew Morton authored
From: Armin Schindler <armin@melware.de> Use the notifier workqueue in a cleaner way.
-
Andrew Morton authored
From: Armin Schindler <armin@melware.de> Show debug messages if debug is enabled only.
-
Andrew Morton authored
From: "Jose R. Santos" <jrsantos@austin.ibm.com> After discussing it with Neil, he fell that the original justification for taking the kernel_lock on find_exported_dentry() is not longer valid and should be safe to remove. This patch fixes an issue while running SpecSFS where under memory pressure, shrinking dcache cause find_exported_dentry() to allocate disconnected dentries that later needed to be properly connected. The connecting part of the code was done with BKL taken which cause a sharp drop in performance during iterations and profiles showing 75% time spent on find_exported_dentry(). After applying the patch, time spent on the function is reduce to <1%. I have tested this on an 8-way machine with 56 filesystems for several days now with no problems using ext2, ext3, xfs and jfs.
-
Andrew Morton authored
Don't panic if the journal superblock is wrecked: just fail the mount.
-
Andrew Morton authored
From: Anton Blanchard <anton@samba.org> From: Robert Love <rml@ximian.com> arch/ppc64/Kconfig's entry for CONFIG_PREEMPT is missing the description after the "bool" statement, so the entry does not show up. Also, the help description mentions a restriction that is not [any longer] true.
-
Andrew Morton authored
From: Anton Blanchard <anton@samba.org> Sometimes we just want to pass the error up to the kernel and let it oops. X it is.
-
Andrew Morton authored
From: Anton Blanchard <anton@samba.org> - remove now unused kernel syscalls. - wrap recently added defines in #ifdef __KERNEL__, fixes glibc compile issue - some of our extra syscalls used asmlinkage, some did not. Make them consistent
-
Andrew Morton authored
From: Tom Rini <trini@kernel.crashing.org> The following patch comes from Paul Mackerras. Earlier on in 2.6, arch/ppc/boot/utils/mkprep.c was changed slightly so that it would build and work on Solaris. Doing this required changing from filling out pointers to an area to filling out a local copy of the struct. However, a memcpy was left out, and the info is only needed on some machines to boot. The following adds in the missing memcpy and allows for IBM PRePs to boot from a raw floppy again.
-
Andrew Morton authored
From: Olaf Hering <olh@suse.de> Current Linus tree adds an extra space and dot to the mkprep options. `make all' with an smp config doesnt work. This patch fixes it.
-
bk://gkernel.bkbits.net/net-drivers-2.6Linus Torvalds authored
into ppc970.osdl.org:/home/torvalds/v2.6/linux
-
Don Fry authored
Please apply this fix to backout an erroneous change in loopback.c The statistics structure is allocated separately from the loopback_dev structure, and the current code overwrites something other than the statistics. In my case the scsi_cmd_pool structure.
-
Jeff Garzik authored
-
David S. Miller authored
into kernel.bkbits.net:/home/davem/net-2.6
-
Krzysztof Halasa authored
The attached patch fixes the problem: de->macmode variable, meant to shadow MacMode (CSR6) register, was used inconsistently, causing some updates to this register to be dropped. 2.4 kernel doesn't shadow this register at all, so I removed shadowing from 2.6 as well.
-
David S. Miller authored
into nuts.davemloft.net:/disk1/BK/net-2.6
-
http://lia64.bkbits.net/to-linus-2.5Linus Torvalds authored
into ppc970.osdl.org:/home/torvalds/v2.6/linux
-
David Mosberger authored
Without this change, GCC thinks it's OK to clobber r13. It doesn't do it very often, but it's enough if it does it once and it turns out acpi_bus_receive_event() had code that would trigger this issue. Fix by declaring r13 as a global register variable.
-
Bartlomiej Zolnierkiewicz authored
All users of hwif->mmio correctly handle resources themselves (hwif->mmio == 2) so remove ide_mmio_dma() and ide_release_mmio_dma().
-
Bartlomiej Zolnierkiewicz authored
Nowadays buddha.c, gayle.c and macide.c handle resources themselves (hwif->mmio == 2). Acked by Geert.
-
Bartlomiej Zolnierkiewicz authored
It's write-only these days.
-
- 16 Mar, 2004 12 commits
-
-
Luis R. Rodriguez authored
Here is the ChangeLog: * wireless/Kconfig: fix typos, add SMC2835W-V2 * islpci_hotplug.c: new version 1.1, authors list, and module description updated appropriately * isl_ioctl.c, islpci_dev.c, islpci_eth.c, islpci_hotplug.c, islpci_mgt.c: s/ndev->priv/netdev_priv(ndev)/g * islpci_hotplug.c: Add PCI ID values for SMC2835W-V2 cardbus card Patch by Manuel Lauss <manuel.lauss@fh-hagenberg.at> * isl_38xx.[ch]: include firmware.h in header, remove declaration of headers in c file. Fix compiler warnings. * islpci_dev.c (islpci_alloc_memory), * islpci_eth.c (islpci_eth_cleanup_transmit, islpci_eth_transmit, islpci_eth_receive): deal with skb stray pointer, declare NULL. * isl_38xx.c: remove unecessary __KERNEL_SYSCALLS__ and re-ordered headers per vger.kernel.org - liking. * isl_ioctl.c, islpci_mgt.c: move from MODULE_PARAM to the new module_param, which is type-safe. Includes the new <linux/moduleparam.h>. * isl_ioctl.c (prism54_[s|g]et_[maxframeburst|profile]): added. Not adding ioctls as ajfa is working on moving current private ioctls to subioctls. * isl_oid.h (dot11_[maxframeburst|preamblesettings| slotsettings|nonerpstatus|nonerpprotection]_t): added. Note: more ioctls can be added here, I believe problems with mixed modes can be pinpointed here, with these values.
-
Luis R. Rodriguez authored
-
Bartlomiej Zolnierkiewicz authored
From: Boehm Olaf <olaf.boehm@lanner.de> From: Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz> Wider range for 33MHz timing and PLL setup for HPT374 (using the HPT370A timing table, as it is the same as used in the "opensource" driver by HighPoint). fixes bugzilla bugs #2209 and #2271
-
Wojciech Cieciwa authored
cdu31a.c needs tmp_irq outside of the block it is declared in. Move it to the outer block.
-
Andrew Morton authored
On x84_64, page->flags is no longer unsigned long.
-
Andrew Morton authored
From: Dave Jones <davej@redhat.com> These options are only ever referenced in the defconfigs of various archs now.
-
Andrew Morton authored
From: Arun Sharma <arun.sharma@intel.com> The current Linux implementation of shmat() insists on SHMLBA alignment even when shmflg & SHM_RND == 0. This is not consistent with the man pages and the single UNIX spec, which require only a page-aligned address. However, some architectures require a SHMLBA alignment for correctness in all cases. Such architectures use __ARCH_FORCE_SHMLBA.
-
Andrew Morton authored
From: <mikem@beardog.cca.cpqcorp.net> * Examines rc of pci_register_driver and returns
-
Andrew Morton authored
From: <mikem@beardog.cca.cpqcorp.net> - Change to use pci APIs (change from 2.4.18 to 2.4.19) This also includes eisa detection fix during initialization which was missing from 2.4.19 but fixed in 2.4.25
-
Andrew Morton authored
From: <mikem@beardog.cca.cpqcorp.net> * cpqarray in kernel 2.6.1 seems to be based from 2.4.18 kernel with specific 2.6.x stuff added. * Defines io_mem_addr and io_mem_length to replace ioaddr (change from 2.4.18 to 2.4.19)
-
Andrew Morton authored
From: <mikem@beardog.cca.cpqcorp.net> * Fix for segmentation fault when calling rmmod
-
Andrew Morton authored
From: <mikem@beardog.cca.cpqcorp.net> The following patch bumps the driver version to 2.6.0. Please apply in order.
-