linux.conf.au 2003
Deleting files

static void fs_remove_file (struct dentry *dentry)
{
        struct dentry *parent = dentry->d_parent;
        
        if (!parent || !parent->d_inode)
                return;
        
        down(&parent->d_inode->i_sem);
        if (usbfs_positive(dentry)) {
                if (dentry->d_inode) {
                        if (S_ISDIR(dentry->d_inode->i_mode))
                                usbfs_rmdir(parent->d_inode, dentry);
                        else
                                usbfs_unlink(parent->d_inode, dentry);
                dput(dentry);
                }
        }
        up(&parent->d_inode->i_sem);
}

