[lkml]   [2000]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: namei() in sys_open() breaking umount?
Stefan writes:
> After modifying sys_open() by prepending a namei(filename),
> all devices mounted while the modified sys_open is in place,
> report an EBUSY when trying to umount them. Doesn't matter if sys_open
> has been restored to the original before umount.
> asmlinkage int my_sys_open(const char *filename, int flags, int mode)
> {
> struct dentry *d_entry=NULL;
> lock_kernel();
> d_entry=namei(filename);
> unlock_kernel();
> if (IS_ERR(d_entry))
> return orig_sys_open(filename, flags, mode);
> if (d_entry->d_inode)
- printk("<1> device=%d\n",MAJOR(d_entry->d_inode->i_dev));
+ printk(KERN_INFO "device=%s\n", kdevname(dentry->d_inode->i_dev));
+ dput(d_entry);
> return orig_sys_open(filename, flags, mode);
> }

> I would be very grateful if someone could point out to me where the
> problem is - and tell me how to solve it :-)

When you have a dentry reference, you need to free it via dput(), so that
the kernel knows the file is no longer in use. This is the same with
iget() and iput() - you always need to free your inode references.

Cheers, Andreas
Andreas Dilger \ "If a man ate a pound of pasta and a pound of antipasto,
\ would they cancel out, leaving him still hungry?" -- Dogbert
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:38    [W:0.047 / U:5.108 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site