git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] r/o bind mounts: unlink: monitor i_nlink
[safe/jmp/linux-2.6]
/
drivers
/
usb
/
core
/
inode.c
diff --git
a/drivers/usb/core/inode.c
b/drivers/usb/core/inode.c
index
95f5ad9
..
88002e4
100644
(file)
--- a/
drivers/usb/core/inode.c
+++ b/
drivers/usb/core/inode.c
@@
-27,7
+27,6
@@
/*****************************************************************************/
/*****************************************************************************/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/mount.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/mount.h>
@@
-45,7
+44,7
@@
#include "hcd.h"
static struct super_operations usbfs_ops;
#include "hcd.h"
static struct super_operations usbfs_ops;
-static struct file_operations default_file_operations;
+static
const
struct file_operations default_file_operations;
static struct vfsmount *usbfs_mount;
static int usbfs_mount_count; /* = 0 */
static int ignore_mount = 0;
static struct vfsmount *usbfs_mount;
static int usbfs_mount_count; /* = 0 */
static int ignore_mount = 0;
@@
-201,7
+200,7
@@
static void update_sb(struct super_block *sb)
if (!root)
return;
if (!root)
return;
- mutex_lock
(&root->d_inode->i_mutex
);
+ mutex_lock
_nested(&root->d_inode->i_mutex, I_MUTEX_PARENT
);
list_for_each_entry(bus, &root->d_subdirs, d_u.d_child) {
if (bus->d_inode) {
list_for_each_entry(bus, &root->d_subdirs, d_u.d_child) {
if (bus->d_inode) {
@@
-250,7
+249,6
@@
static struct inode *usbfs_get_inode (struct super_block *sb, int mode, dev_t de
inode->i_mode = mode;
inode->i_uid = current->fsuid;
inode->i_gid = current->fsgid;
inode->i_mode = mode;
inode->i_uid = current->fsuid;
inode->i_gid = current->fsgid;
- inode->i_blksize = PAGE_CACHE_SIZE;
inode->i_blocks = 0;
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
switch (mode & S_IFMT) {
inode->i_blocks = 0;
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
switch (mode & S_IFMT) {
@@
-334,7
+332,7
@@
static int usbfs_unlink (struct inode *dir, struct dentry *dentry)
{
struct inode *inode = dentry->d_inode;
mutex_lock(&inode->i_mutex);
{
struct inode *inode = dentry->d_inode;
mutex_lock(&inode->i_mutex);
- d
entry->d_inode->i_nlink--
;
+ d
rop_nlink(dentry->d_inode)
;
dput(dentry);
mutex_unlock(&inode->i_mutex);
d_delete(dentry);
dput(dentry);
mutex_unlock(&inode->i_mutex);
d_delete(dentry);
@@
-349,10
+347,11
@@
static int usbfs_rmdir(struct inode *dir, struct dentry *dentry)
mutex_lock(&inode->i_mutex);
dentry_unhash(dentry);
if (usbfs_empty(dentry)) {
mutex_lock(&inode->i_mutex);
dentry_unhash(dentry);
if (usbfs_empty(dentry)) {
- dentry->d_inode->i_nlink -= 2;
+ drop_nlink(dentry->d_inode);
+ drop_nlink(dentry->d_inode);
dput(dentry);
inode->i_flags |= S_DEAD;
dput(dentry);
inode->i_flags |= S_DEAD;
- d
ir->i_nlink--
;
+ d
rop_nlink(dir)
;
error = 0;
}
mutex_unlock(&inode->i_mutex);
error = 0;
}
mutex_unlock(&inode->i_mutex);
@@
-403,13
+402,13
@@
static loff_t default_file_lseek (struct file *file, loff_t offset, int orig)
static int default_open (struct inode *inode, struct file *file)
{
static int default_open (struct inode *inode, struct file *file)
{
- if (inode->
u.generic_ip
)
- file->private_data = inode->
u.generic_ip
;
+ if (inode->
i_private
)
+ file->private_data = inode->
i_private
;
return 0;
}
return 0;
}
-static struct file_operations default_file_operations = {
+static
const
struct file_operations default_file_operations = {
.read = default_read_file,
.write = default_write_file,
.open = default_open,
.read = default_read_file,
.write = default_write_file,
.open = default_open,
@@
-496,7
+495,7
@@
static int fs_create_by_name (const char *name, mode_t mode,
static struct dentry *fs_create_file (const char *name, mode_t mode,
struct dentry *parent, void *data,
static struct dentry *fs_create_file (const char *name, mode_t mode,
struct dentry *parent, void *data,
- struct file_operations *fops,
+
const
struct file_operations *fops,
uid_t uid, gid_t gid)
{
struct dentry *dentry;
uid_t uid, gid_t gid)
{
struct dentry *dentry;
@@
-510,7
+509,7
@@
static struct dentry *fs_create_file (const char *name, mode_t mode,
} else {
if (dentry->d_inode) {
if (data)
} else {
if (dentry->d_inode) {
if (data)
- dentry->d_inode->
u.generic_ip
= data;
+ dentry->d_inode->
i_private
= data;
if (fops)
dentry->d_inode->i_fop = fops;
dentry->d_inode->i_uid = uid;
if (fops)
dentry->d_inode->i_fop = fops;
dentry->d_inode->i_uid = uid;
@@
-528,7
+527,7
@@
static void fs_remove_file (struct dentry *dentry)
if (!parent || !parent->d_inode)
return;
if (!parent || !parent->d_inode)
return;
- mutex_lock
(&parent->d_inode->i_mutex
);
+ mutex_lock
_nested(&parent->d_inode->i_mutex, I_MUTEX_PARENT
);
if (usbfs_positive(dentry)) {
if (dentry->d_inode) {
if (S_ISDIR(dentry->d_inode->i_mode))
if (usbfs_positive(dentry)) {
if (dentry->d_inode) {
if (S_ISDIR(dentry->d_inode->i_mode))
@@
-569,7
+568,7
@@
static int create_special_files (void)
ignore_mount = 1;
/* create the devices special file */
ignore_mount = 1;
/* create the devices special file */
- retval = simple_pin_fs(
"usbfs"
, &usbfs_mount, &usbfs_mount_count);
+ retval = simple_pin_fs(
&usb_fs_type
, &usbfs_mount, &usbfs_mount_count);
if (retval) {
err ("Unable to get usbfs mount");
goto exit;
if (retval) {
err ("Unable to get usbfs mount");
goto exit;
@@
-696,11
+695,11
@@
static void usbfs_remove_device(struct usb_device *dev)
wake_up_all(&ds->wait);
list_del_init(&ds->list);
if (ds->discsignr) {
wake_up_all(&ds->wait);
list_del_init(&ds->list);
if (ds->discsignr) {
- sinfo.si_signo =
SIGPIPE
;
+ sinfo.si_signo =
ds->discsignr
;
sinfo.si_errno = EPIPE;
sinfo.si_code = SI_ASYNCIO;
sinfo.si_addr = ds->disccontext;
sinfo.si_errno = EPIPE;
sinfo.si_code = SI_ASYNCIO;
sinfo.si_addr = ds->disccontext;
- kill_proc_info_as_uid(ds->discsignr, &sinfo, ds->disc_pid, ds->disc_uid, ds->disc_euid);
+ kill_proc_info_as_uid(ds->discsignr, &sinfo, ds->disc_pid, ds->disc_uid, ds->disc_euid
, ds->secid
);
}
}
}
}
}
}