Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
e3b08ca8
Commit
e3b08ca8
authored
May 21, 2002
by
Alexander Viro
Committed by
Linus Torvalds
May 21, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] remove s390 procfs abuses
massive crapectomy in s390 code - removed procfs abuses
parent
1d13173b
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
60 additions
and
634 deletions
+60
-634
arch/s390/kernel/debug.c
arch/s390/kernel/debug.c
+11
-72
arch/s390x/kernel/debug.c
arch/s390x/kernel/debug.c
+7
-61
drivers/i2c/i2c-proc.c
drivers/i2c/i2c-proc.c
+0
-60
drivers/isdn/hysdn/hysdn_procconf.c
drivers/isdn/hysdn/hysdn_procconf.c
+2
-2
drivers/isdn/hysdn/hysdn_proclog.c
drivers/isdn/hysdn/hysdn_proclog.c
+6
-8
drivers/net/wan/comx-hw-munich.c
drivers/net/wan/comx-hw-munich.c
+1
-1
drivers/net/wan/comx.c
drivers/net/wan/comx.c
+1
-2
drivers/s390/char/tape.c
drivers/s390/char/tape.c
+0
-33
drivers/s390/net/ctcmain.c
drivers/s390/net/ctcmain.c
+14
-182
drivers/s390/net/netiucv.c
drivers/s390/net/netiucv.c
+18
-209
fs/proc/generic.c
fs/proc/generic.c
+0
-4
No files found.
arch/s390/kernel/debug.c
View file @
e3b08ca8
...
@@ -71,7 +71,6 @@ static int debug_close(struct inode *inode, struct file *file);
...
@@ -71,7 +71,6 @@ static int debug_close(struct inode *inode, struct file *file);
static
struct
proc_dir_entry
static
struct
proc_dir_entry
*
debug_create_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
*
debug_create_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
const
char
*
name
,
mode_t
mode
,
const
char
*
name
,
mode_t
mode
,
struct
inode_operations
*
iops
,
struct
file_operations
*
fops
);
struct
file_operations
*
fops
);
static
void
debug_delete_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
static
void
debug_delete_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
struct
proc_dir_entry
*
entry
);
struct
proc_dir_entry
*
entry
);
...
@@ -151,28 +150,18 @@ unsigned int debug_feature_version = __DEBUG_FEATURE_VERSION;
...
@@ -151,28 +150,18 @@ unsigned int debug_feature_version = __DEBUG_FEATURE_VERSION;
static
debug_info_t
*
debug_area_first
=
NULL
;
static
debug_info_t
*
debug_area_first
=
NULL
;
static
debug_info_t
*
debug_area_last
=
NULL
;
static
debug_info_t
*
debug_area_last
=
NULL
;
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
static
struct
semaphore
debug_lock
=
MUTEX
;
#else
DECLARE_MUTEX
(
debug_lock
);
DECLARE_MUTEX
(
debug_lock
);
#endif
static
int
initialized
=
0
;
static
int
initialized
=
0
;
static
struct
file_operations
debug_file_ops
=
{
static
struct
file_operations
debug_file_ops
=
{
owner:
THIS_MODULE
,
read:
debug_output
,
read:
debug_output
,
write:
debug_input
,
write:
debug_input
,
open:
debug_open
,
open:
debug_open
,
release:
debug_close
,
release:
debug_close
,
};
};
static
struct
inode_operations
debug_inode_ops
=
{
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
default_file_ops:
&
debug_file_ops
,
/* file ops */
#endif
};
static
struct
proc_dir_entry
*
debug_proc_root_entry
;
static
struct
proc_dir_entry
*
debug_proc_root_entry
;
/* functions */
/* functions */
...
@@ -277,19 +266,15 @@ static debug_info_t* debug_info_create(char *name, int page_order,
...
@@ -277,19 +266,15 @@ static debug_info_t* debug_info_create(char *name, int page_order,
/* create proc rood directory */
/* create proc rood directory */
rc
->
proc_root_entry
=
rc
->
proc_root_entry
=
proc_mkdir
(
rc
->
name
,
debug_proc_root_entry
);
debug_create_proc_dir_entry
(
debug_proc_root_entry
,
rc
->
name
,
S_IFDIR
|
S_IRUGO
|
S_IXUGO
|
S_IWUSR
|
S_IWGRP
,
NULL
,
NULL
);
/* append new element to linked list */
/* append new element to linked list */
if
(
debug_area_first
==
NULL
)
{
if
(
debug_area_first
==
NULL
)
{
/* first element in list */
/* first element in list */
debug_area_first
=
rc
;
debug_area_first
=
rc
;
rc
->
prev
=
NULL
;
rc
->
prev
=
NULL
;
}
}
else
{
else
{
/* append element to end of list */
/* append element to end of list */
debug_area_last
->
next
=
rc
;
debug_area_last
->
next
=
rc
;
rc
->
prev
=
debug_area_last
;
rc
->
prev
=
debug_area_last
;
...
@@ -513,7 +498,6 @@ static int debug_open(struct inode *inode, struct file *file)
...
@@ -513,7 +498,6 @@ static int debug_open(struct inode *inode, struct file *file)
#ifdef DEBUG
#ifdef DEBUG
printk
(
"debug_open
\n
"
);
printk
(
"debug_open
\n
"
);
#endif
#endif
MOD_INC_USE_COUNT
;
down
(
&
debug_lock
);
down
(
&
debug_lock
);
/* find debug log and view */
/* find debug log and view */
...
@@ -523,8 +507,8 @@ static int debug_open(struct inode *inode, struct file *file)
...
@@ -523,8 +507,8 @@ static int debug_open(struct inode *inode, struct file *file)
for
(
i
=
0
;
i
<
DEBUG_MAX_VIEWS
;
i
++
)
{
for
(
i
=
0
;
i
<
DEBUG_MAX_VIEWS
;
i
++
)
{
if
(
debug_info
->
views
[
i
]
==
NULL
)
if
(
debug_info
->
views
[
i
]
==
NULL
)
continue
;
continue
;
else
if
(
debug_info
->
proc_entries
[
i
]
->
low_ino
==
else
if
(
debug_info
->
proc_entries
[
i
]
==
file
->
f_dentry
->
d_inode
->
i_ino
)
{
PDE
(
file
->
f_dentry
->
d_inode
)
)
{
goto
found
;
/* found view ! */
goto
found
;
/* found view ! */
}
}
}
}
...
@@ -566,8 +550,6 @@ static int debug_open(struct inode *inode, struct file *file)
...
@@ -566,8 +550,6 @@ static int debug_open(struct inode *inode, struct file *file)
out:
out:
up
(
&
debug_lock
);
up
(
&
debug_lock
);
if
(
rc
!=
0
)
MOD_DEC_USE_COUNT
;
return
rc
;
return
rc
;
}
}
...
@@ -587,7 +569,6 @@ static int debug_close(struct inode *inode, struct file *file)
...
@@ -587,7 +569,6 @@ static int debug_close(struct inode *inode, struct file *file)
debug_info_free
(
p_info
->
debug_info_snap
);
debug_info_free
(
p_info
->
debug_info_snap
);
debug_info_put
(
p_info
->
debug_info_org
);
debug_info_put
(
p_info
->
debug_info_org
);
kfree
(
file
->
private_data
);
kfree
(
file
->
private_data
);
MOD_DEC_USE_COUNT
;
return
0
;
/* success */
return
0
;
/* success */
}
}
...
@@ -598,42 +579,11 @@ static int debug_close(struct inode *inode, struct file *file)
...
@@ -598,42 +579,11 @@ static int debug_close(struct inode *inode, struct file *file)
static
struct
proc_dir_entry
*
debug_create_proc_dir_entry
static
struct
proc_dir_entry
*
debug_create_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
const
char
*
name
,
mode_t
mode
,
(
struct
proc_dir_entry
*
root
,
const
char
*
name
,
mode_t
mode
,
struct
inode_operations
*
iops
,
struct
file_operations
*
fops
)
struct
file_operations
*
fops
)
{
{
struct
proc_dir_entry
*
rc
=
NULL
;
struct
proc_dir_entry
*
rc
=
create_proc_entry
(
name
,
mode
,
root
);
if
(
rc
&&
fops
)
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
const
char
*
fn
=
name
;
int
len
;
len
=
strlen
(
fn
);
rc
=
(
struct
proc_dir_entry
*
)
kmalloc
(
sizeof
(
struct
proc_dir_entry
)
+
len
+
1
,
GFP_ATOMIC
);
if
(
!
rc
)
goto
out
;
memset
(
rc
,
0
,
sizeof
(
struct
proc_dir_entry
));
memcpy
(((
char
*
)
rc
)
+
sizeof
(
*
rc
),
fn
,
len
+
1
);
rc
->
name
=
((
char
*
)
rc
)
+
sizeof
(
*
rc
);
rc
->
namelen
=
len
;
rc
->
low_ino
=
0
,
rc
->
mode
=
mode
;
rc
->
nlink
=
1
;
rc
->
uid
=
0
;
rc
->
gid
=
0
;
rc
->
size
=
0
;
rc
->
get_info
=
NULL
;
rc
->
ops
=
iops
;
proc_register
(
root
,
rc
);
#else
rc
=
create_proc_entry
(
name
,
mode
,
root
);
if
(
!
rc
)
goto
out
;
if
(
fops
)
rc
->
proc_fops
=
fops
;
rc
->
proc_fops
=
fops
;
#endif
out:
return
rc
;
return
rc
;
}
}
...
@@ -645,13 +595,7 @@ static struct proc_dir_entry *debug_create_proc_dir_entry
...
@@ -645,13 +595,7 @@ static struct proc_dir_entry *debug_create_proc_dir_entry
static
void
debug_delete_proc_dir_entry
static
void
debug_delete_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
struct
proc_dir_entry
*
proc_entry
)
(
struct
proc_dir_entry
*
root
,
struct
proc_dir_entry
*
proc_entry
)
{
{
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
proc_unregister
(
root
,
proc_entry
->
low_ino
);
kfree
(
proc_entry
);
#else
remove_proc_entry
(
proc_entry
->
name
,
root
);
remove_proc_entry
(
proc_entry
->
name
,
root
);
#endif
}
}
/*
/*
...
@@ -906,11 +850,7 @@ int debug_init(void)
...
@@ -906,11 +850,7 @@ int debug_init(void)
down
(
&
debug_lock
);
down
(
&
debug_lock
);
if
(
!
initialized
)
{
if
(
!
initialized
)
{
debug_proc_root_entry
=
debug_proc_root_entry
=
proc_mkdir
(
DEBUG_DIR_ROOT
,
NULL
);
debug_create_proc_dir_entry
(
&
proc_root
,
DEBUG_DIR_ROOT
,
S_IFDIR
|
S_IRUGO
|
S_IXUGO
|
S_IWUSR
|
S_IWGRP
,
NULL
,
NULL
);
printk
(
KERN_INFO
"debug: Initialization complete
\n
"
);
printk
(
KERN_INFO
"debug: Initialization complete
\n
"
);
initialized
=
1
;
initialized
=
1
;
}
}
...
@@ -953,7 +893,6 @@ int debug_register_view(debug_info_t * id, struct debug_view *view)
...
@@ -953,7 +893,6 @@ int debug_register_view(debug_info_t * id, struct debug_view *view)
id
->
proc_entries
[
i
]
=
id
->
proc_entries
[
i
]
=
debug_create_proc_dir_entry
(
id
->
proc_root_entry
,
debug_create_proc_dir_entry
(
id
->
proc_root_entry
,
view
->
name
,
mode
,
view
->
name
,
mode
,
&
debug_inode_ops
,
&
debug_file_ops
);
&
debug_file_ops
);
rc
=
0
;
rc
=
0
;
}
}
...
@@ -1271,7 +1210,7 @@ void cleanup_module(void)
...
@@ -1271,7 +1210,7 @@ void cleanup_module(void)
#ifdef DEBUG
#ifdef DEBUG
printk
(
"debug_cleanup_module:
\n
"
);
printk
(
"debug_cleanup_module:
\n
"
);
#endif
#endif
debug_delete_proc_dir_entry
(
&
proc_root
,
debug_proc_root_entry
);
debug_delete_proc_dir_entry
(
NULL
,
debug_proc_root_entry
);
return
;
return
;
}
}
...
...
arch/s390x/kernel/debug.c
View file @
e3b08ca8
...
@@ -71,7 +71,6 @@ static int debug_close(struct inode *inode, struct file *file);
...
@@ -71,7 +71,6 @@ static int debug_close(struct inode *inode, struct file *file);
static
struct
proc_dir_entry
static
struct
proc_dir_entry
*
debug_create_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
*
debug_create_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
const
char
*
name
,
mode_t
mode
,
const
char
*
name
,
mode_t
mode
,
struct
inode_operations
*
iops
,
struct
file_operations
*
fops
);
struct
file_operations
*
fops
);
static
void
debug_delete_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
static
void
debug_delete_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
struct
proc_dir_entry
*
entry
);
struct
proc_dir_entry
*
entry
);
...
@@ -166,13 +165,6 @@ static struct file_operations debug_file_ops = {
...
@@ -166,13 +165,6 @@ static struct file_operations debug_file_ops = {
release:
debug_close
,
release:
debug_close
,
};
};
static
struct
inode_operations
debug_inode_ops
=
{
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
default_file_ops:
&
debug_file_ops
,
/* file ops */
#endif
};
static
struct
proc_dir_entry
*
debug_proc_root_entry
;
static
struct
proc_dir_entry
*
debug_proc_root_entry
;
/* functions */
/* functions */
...
@@ -277,11 +269,7 @@ static debug_info_t* debug_info_create(char *name, int page_order,
...
@@ -277,11 +269,7 @@ static debug_info_t* debug_info_create(char *name, int page_order,
/* create proc rood directory */
/* create proc rood directory */
rc
->
proc_root_entry
=
rc
->
proc_root_entry
=
proc_mkdir
(
rc
->
name
,
debug_proc_root_entry
);
debug_create_proc_dir_entry
(
debug_proc_root_entry
,
rc
->
name
,
S_IFDIR
|
S_IRUGO
|
S_IXUGO
|
S_IWUSR
|
S_IWGRP
,
NULL
,
NULL
);
/* append new element to linked list */
/* append new element to linked list */
if
(
debug_area_first
==
NULL
){
if
(
debug_area_first
==
NULL
){
...
@@ -523,8 +511,8 @@ static int debug_open(struct inode *inode, struct file *file)
...
@@ -523,8 +511,8 @@ static int debug_open(struct inode *inode, struct file *file)
for
(
i
=
0
;
i
<
DEBUG_MAX_VIEWS
;
i
++
)
{
for
(
i
=
0
;
i
<
DEBUG_MAX_VIEWS
;
i
++
)
{
if
(
debug_info
->
views
[
i
]
==
NULL
)
if
(
debug_info
->
views
[
i
]
==
NULL
)
continue
;
continue
;
else
if
(
debug_info
->
proc_entries
[
i
]
->
low_ino
==
else
if
(
debug_info
->
proc_entries
[
i
]
==
file
->
f_dentry
->
d_inode
->
i_ino
)
{
PDE
(
file
->
f_dentry
->
d_inode
)
)
{
goto
found
;
/* found view ! */
goto
found
;
/* found view ! */
}
}
}
}
...
@@ -598,42 +586,11 @@ static int debug_close(struct inode *inode, struct file *file)
...
@@ -598,42 +586,11 @@ static int debug_close(struct inode *inode, struct file *file)
static
struct
proc_dir_entry
*
debug_create_proc_dir_entry
static
struct
proc_dir_entry
*
debug_create_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
const
char
*
name
,
mode_t
mode
,
(
struct
proc_dir_entry
*
root
,
const
char
*
name
,
mode_t
mode
,
struct
inode_operations
*
iops
,
struct
file_operations
*
fops
)
struct
file_operations
*
fops
)
{
{
struct
proc_dir_entry
*
rc
=
NULL
;
struct
proc_dir_entry
*
rc
=
create_proc_entry
(
name
,
mode
,
root
);
if
(
rc
&&
fops
)
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
const
char
*
fn
=
name
;
int
len
;
len
=
strlen
(
fn
);
rc
=
(
struct
proc_dir_entry
*
)
kmalloc
(
sizeof
(
struct
proc_dir_entry
)
+
len
+
1
,
GFP_ATOMIC
);
if
(
!
rc
)
goto
out
;
memset
(
rc
,
0
,
sizeof
(
struct
proc_dir_entry
));
memcpy
(((
char
*
)
rc
)
+
sizeof
(
*
rc
),
fn
,
len
+
1
);
rc
->
name
=
((
char
*
)
rc
)
+
sizeof
(
*
rc
);
rc
->
namelen
=
len
;
rc
->
low_ino
=
0
,
rc
->
mode
=
mode
;
rc
->
nlink
=
1
;
rc
->
uid
=
0
;
rc
->
gid
=
0
;
rc
->
size
=
0
;
rc
->
get_info
=
NULL
;
rc
->
ops
=
iops
;
proc_register
(
root
,
rc
);
#else
rc
=
create_proc_entry
(
name
,
mode
,
root
);
if
(
!
rc
)
goto
out
;
if
(
fops
)
rc
->
proc_fops
=
fops
;
rc
->
proc_fops
=
fops
;
#endif
out:
return
rc
;
return
rc
;
}
}
...
@@ -645,13 +602,7 @@ static struct proc_dir_entry *debug_create_proc_dir_entry
...
@@ -645,13 +602,7 @@ static struct proc_dir_entry *debug_create_proc_dir_entry
static
void
debug_delete_proc_dir_entry
static
void
debug_delete_proc_dir_entry
(
struct
proc_dir_entry
*
root
,
struct
proc_dir_entry
*
proc_entry
)
(
struct
proc_dir_entry
*
root
,
struct
proc_dir_entry
*
proc_entry
)
{
{
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,98))
proc_unregister
(
root
,
proc_entry
->
low_ino
);
kfree
(
proc_entry
);
#else
remove_proc_entry
(
proc_entry
->
name
,
root
);
remove_proc_entry
(
proc_entry
->
name
,
root
);
#endif
}
}
/*
/*
...
@@ -906,11 +857,7 @@ int debug_init(void)
...
@@ -906,11 +857,7 @@ int debug_init(void)
down
(
&
debug_lock
);
down
(
&
debug_lock
);
if
(
!
initialized
)
{
if
(
!
initialized
)
{
debug_proc_root_entry
=
debug_proc_root_entry
=
proc_mkdir
(
DEBUG_DIR_ROOT
,
NULL
);
debug_create_proc_dir_entry
(
&
proc_root
,
DEBUG_DIR_ROOT
,
S_IFDIR
|
S_IRUGO
|
S_IXUGO
|
S_IWUSR
|
S_IWGRP
,
NULL
,
NULL
);
printk
(
KERN_INFO
"debug: Initialization complete
\n
"
);
printk
(
KERN_INFO
"debug: Initialization complete
\n
"
);
initialized
=
1
;
initialized
=
1
;
}
}
...
@@ -953,7 +900,6 @@ int debug_register_view(debug_info_t * id, struct debug_view *view)
...
@@ -953,7 +900,6 @@ int debug_register_view(debug_info_t * id, struct debug_view *view)
id
->
proc_entries
[
i
]
=
id
->
proc_entries
[
i
]
=
debug_create_proc_dir_entry
(
id
->
proc_root_entry
,
debug_create_proc_dir_entry
(
id
->
proc_root_entry
,
view
->
name
,
mode
,
view
->
name
,
mode
,
&
debug_inode_ops
,
&
debug_file_ops
);
&
debug_file_ops
);
rc
=
0
;
rc
=
0
;
}
}
...
...
drivers/i2c/i2c-proc.c
View file @
e3b08ca8
...
@@ -66,11 +66,6 @@ int __init sensors_init(void);
...
@@ -66,11 +66,6 @@ int __init sensors_init(void);
static
struct
ctl_table_header
*
i2c_entries
[
SENSORS_ENTRY_MAX
];
static
struct
ctl_table_header
*
i2c_entries
[
SENSORS_ENTRY_MAX
];
static
struct
i2c_client
*
i2c_clients
[
SENSORS_ENTRY_MAX
];
static
struct
i2c_client
*
i2c_clients
[
SENSORS_ENTRY_MAX
];
static
unsigned
short
i2c_inodes
[
SENSORS_ENTRY_MAX
];
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,1)
static
void
i2c_fill_inode
(
struct
inode
*
inode
,
int
fill
);
static
void
i2c_dir_fill_inode
(
struct
inode
*
inode
,
int
fill
);
#endif
/* LINUX_VERSION_CODE < KERNEL_VERSION(2,3,1) */
static
ctl_table
sysctl_table
[]
=
{
static
ctl_table
sysctl_table
[]
=
{
{
CTL_DEV
,
"dev"
,
NULL
,
0
,
0555
},
{
CTL_DEV
,
"dev"
,
NULL
,
0
,
0555
},
...
@@ -198,14 +193,7 @@ int i2c_register_entry(struct i2c_client *client, const char *prefix,
...
@@ -198,14 +193,7 @@ int i2c_register_entry(struct i2c_client *client, const char *prefix,
return
id
;
return
id
;
}
}
#endif
/* DEBUG */
#endif
/* DEBUG */
i2c_inodes
[
id
-
256
]
=
new_header
->
ctl_table
->
child
->
child
->
de
->
low_ino
;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27))
new_header
->
ctl_table
->
child
->
child
->
de
->
owner
=
controlling_mod
;
new_header
->
ctl_table
->
child
->
child
->
de
->
owner
=
controlling_mod
;
#else
new_header
->
ctl_table
->
child
->
child
->
de
->
fill_inode
=
&
i2c_dir_fill_inode
;
#endif
/* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27)) */
return
id
;
return
id
;
}
}
...
@@ -227,49 +215,6 @@ void i2c_deregister_entry(int id)
...
@@ -227,49 +215,6 @@ void i2c_deregister_entry(int id)
}
}
}
}
/* Monitor access for /proc/sys/dev/sensors; make unloading i2c-proc.o
impossible if some process still uses it or some file in it */
void
i2c_fill_inode
(
struct
inode
*
inode
,
int
fill
)
{
if
(
fill
)
MOD_INC_USE_COUNT
;
else
MOD_DEC_USE_COUNT
;
}
/* Monitor access for /proc/sys/dev/sensors/ directories; make unloading
the corresponding module impossible if some process still uses it or
some file in it */
void
i2c_dir_fill_inode
(
struct
inode
*
inode
,
int
fill
)
{
int
i
;
struct
i2c_client
*
client
;
#ifdef DEBUG
if
(
!
inode
)
{
printk
(
"i2c-proc.o: Warning: inode NULL in fill_inode()
\n
"
);
return
;
}
#endif
/* def DEBUG */
for
(
i
=
0
;
i
<
SENSORS_ENTRY_MAX
;
i
++
)
if
(
i2c_clients
[
i
]
&&
(
i2c_inodes
[
i
]
==
inode
->
i_ino
))
break
;
#ifdef DEBUG
if
(
i
==
SENSORS_ENTRY_MAX
)
{
printk
(
"i2c-proc.o: Warning: inode (%ld) not found in fill_inode()
\n
"
,
inode
->
i_ino
);
return
;
}
#endif
/* def DEBUG */
client
=
i2c_clients
[
i
];
if
(
fill
)
client
->
driver
->
inc_use
(
client
);
else
client
->
driver
->
dec_use
(
client
);
}
int
i2c_proc_chips
(
ctl_table
*
ctl
,
int
write
,
struct
file
*
filp
,
int
i2c_proc_chips
(
ctl_table
*
ctl
,
int
write
,
struct
file
*
filp
,
void
*
buffer
,
size_t
*
lenp
)
void
*
buffer
,
size_t
*
lenp
)
{
{
...
@@ -867,12 +812,7 @@ int __init sensors_init(void)
...
@@ -867,12 +812,7 @@ int __init sensors_init(void)
if
(
!
if
(
!
(
i2c_proc_header
=
(
i2c_proc_header
=
register_sysctl_table
(
i2c_proc
,
0
)))
return
-
ENOMEM
;
register_sysctl_table
(
i2c_proc
,
0
)))
return
-
ENOMEM
;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1))
i2c_proc_header
->
ctl_table
->
child
->
de
->
owner
=
THIS_MODULE
;
i2c_proc_header
->
ctl_table
->
child
->
de
->
owner
=
THIS_MODULE
;
#else
i2c_proc_header
->
ctl_table
->
child
->
de
->
fill_inode
=
&
i2c_fill_inode
;
#endif
/* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1)) */
i2c_initialized
++
;
i2c_initialized
++
;
return
0
;
return
0
;
}
}
...
...
drivers/isdn/hysdn/hysdn_procconf.c
View file @
e3b08ca8
...
@@ -255,7 +255,7 @@ hysdn_conf_open(struct inode *ino, struct file *filep)
...
@@ -255,7 +255,7 @@ hysdn_conf_open(struct inode *ino, struct file *filep)
card
=
card_root
;
card
=
card_root
;
while
(
card
)
{
while
(
card
)
{
pd
=
card
->
procconf
;
pd
=
card
->
procconf
;
if
(
pd
->
low_ino
==
(
ino
->
i_ino
&
0xFFFF
))
if
(
pd
==
PDE
(
ino
))
break
;
break
;
card
=
card
->
next
;
/* search next entry */
card
=
card
->
next
;
/* search next entry */
}
}
...
@@ -340,7 +340,7 @@ hysdn_conf_close(struct inode *ino, struct file *filep)
...
@@ -340,7 +340,7 @@ hysdn_conf_close(struct inode *ino, struct file *filep)
card
=
card_root
;
card
=
card_root
;
while
(
card
)
{
while
(
card
)
{
pd
=
card
->
procconf
;
pd
=
card
->
procconf
;
if
(
pd
->
low_ino
==
(
ino
->
i_ino
&
0xFFFF
))
if
(
pd
==
PDE
(
ino
))
break
;
break
;
card
=
card
->
next
;
/* search next entry */
card
=
card
->
next
;
/* search next entry */
}
}
...
...
drivers/isdn/hysdn/hysdn_proclog.c
View file @
e3b08ca8
...
@@ -207,7 +207,7 @@ hysdn_log_read(struct file *file, char *buf, size_t count, loff_t * off)
...
@@ -207,7 +207,7 @@ hysdn_log_read(struct file *file, char *buf, size_t count, loff_t * off)
{
{
struct
log_data
*
inf
;
struct
log_data
*
inf
;
int
len
;
int
len
;
word
ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
struct
procdata
*
pd
=
NULL
;
struct
procdata
*
pd
=
NULL
;
hysdn_card
*
card
;
hysdn_card
*
card
;
...
@@ -216,11 +216,10 @@ hysdn_log_read(struct file *file, char *buf, size_t count, loff_t * off)
...
@@ -216,11 +216,10 @@ hysdn_log_read(struct file *file, char *buf, size_t count, loff_t * off)
return
(
-
EAGAIN
);
return
(
-
EAGAIN
);
/* sorry, but we need to search the card */
/* sorry, but we need to search the card */
ino
=
file
->
f_dentry
->
d_inode
->
i_ino
&
0xFFFF
;
/* low-ino */
card
=
card_root
;
card
=
card_root
;
while
(
card
)
{
while
(
card
)
{
pd
=
card
->
proclog
;
pd
=
card
->
proclog
;
if
(
pd
->
log
->
low_ino
==
ino
)
if
(
pd
->
log
==
pde
)
break
;
break
;
card
=
card
->
next
;
/* search next entry */
card
=
card
->
next
;
/* search next entry */
}
}
...
@@ -258,7 +257,7 @@ hysdn_log_open(struct inode *ino, struct file *filep)
...
@@ -258,7 +257,7 @@ hysdn_log_open(struct inode *ino, struct file *filep)
card
=
card_root
;
card
=
card_root
;
while
(
card
)
{
while
(
card
)
{
pd
=
card
->
proclog
;
pd
=
card
->
proclog
;
if
(
pd
->
log
->
low_ino
==
(
ino
->
i_ino
&
0xFFFF
))
if
(
pd
->
log
==
PDE
(
ino
))
break
;
break
;
card
=
card
->
next
;
/* search next entry */
card
=
card
->
next
;
/* search next entry */
}
}
...
@@ -323,7 +322,7 @@ hysdn_log_close(struct inode *ino, struct file *filep)
...
@@ -323,7 +322,7 @@ hysdn_log_close(struct inode *ino, struct file *filep)
card
=
card_root
;
card
=
card_root
;
while
(
card
)
{
while
(
card
)
{
pd
=
card
->
proclog
;
pd
=
card
->
proclog
;
if
(
pd
->
log
->
low_ino
==
(
ino
->
i_ino
&
0xFFFF
))
if
(
pd
->
log
==
PDE
(
ino
))
break
;
break
;
card
=
card
->
next
;
/* search next entry */
card
=
card
->
next
;
/* search next entry */
}
}
...
@@ -359,7 +358,7 @@ static unsigned int
...
@@ -359,7 +358,7 @@ static unsigned int
hysdn_log_poll
(
struct
file
*
file
,
poll_table
*
wait
)
hysdn_log_poll
(
struct
file
*
file
,
poll_table
*
wait
)
{
{
unsigned
int
mask
=
0
;
unsigned
int
mask
=
0
;
word
ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
hysdn_card
*
card
;
hysdn_card
*
card
;
struct
procdata
*
pd
=
NULL
;
struct
procdata
*
pd
=
NULL
;
...
@@ -367,11 +366,10 @@ hysdn_log_poll(struct file *file, poll_table * wait)
...
@@ -367,11 +366,10 @@ hysdn_log_poll(struct file *file, poll_table * wait)
return
(
mask
);
/* no polling for write supported */
return
(
mask
);
/* no polling for write supported */
/* we need to search the card */
/* we need to search the card */
ino
=
file
->
f_dentry
->
d_inode
->
i_ino
&
0xFFFF
;
/* low-ino */
card
=
card_root
;
card
=
card_root
;
while
(
card
)
{
while
(
card
)
{
pd
=
card
->
proclog
;
pd
=
card
->
proclog
;
if
(
pd
->
log
->
low_ino
==
ino
)
if
(
pd
->
log
==
pde
)
break
;
break
;
card
=
card
->
next
;
/* search next entry */
card
=
card
->
next
;
/* search next entry */
}
}
...
...
drivers/net/wan/comx-hw-munich.c
View file @
e3b08ca8
...
@@ -2409,7 +2409,7 @@ static int munich_write_proc(struct file *file, const char *buffer,
...
@@ -2409,7 +2409,7 @@ static int munich_write_proc(struct file *file, const char *buffer,
/* Paranoia checking: */
/* Paranoia checking: */
if
(
file
->
f_dentry
->
d_inode
->
i_ino
!=
entry
->
low_ino
)
if
(
PDE
(
file
->
f_dentry
->
d_inode
)
!=
entry
)
{
{
printk
(
KERN_ERR
"munich_write_proc: file <-> data internal error
\n
"
);
printk
(
KERN_ERR
"munich_write_proc: file <-> data internal error
\n
"
);
return
-
EIO
;
return
-
EIO
;
...
...
drivers/net/wan/comx.c
View file @
e3b08ca8
...
@@ -942,8 +942,7 @@ static struct dentry *comx_lookup(struct inode *dir, struct dentry *dentry)
...
@@ -942,8 +942,7 @@ static struct dentry *comx_lookup(struct inode *dir, struct dentry *dentry)
lock_kernel
();
lock_kernel
();
if
((
de
=
PDE
(
dir
))
!=
NULL
)
{
if
((
de
=
PDE
(
dir
))
!=
NULL
)
{
for
(
de
=
de
->
subdir
;
de
;
de
=
de
->
next
)
{
for
(
de
=
de
->
subdir
;
de
;
de
=
de
->
next
)
{
if
((
de
&&
de
->
low_ino
)
&&
if
((
de
->
namelen
==
dentry
->
d_name
.
len
)
&&
(
de
->
namelen
==
dentry
->
d_name
.
len
)
&&
(
memcmp
(
dentry
->
d_name
.
name
,
de
->
name
,
(
memcmp
(
dentry
->
d_name
.
name
,
de
->
name
,
de
->
namelen
)
==
0
))
{
de
->
namelen
)
==
0
))
{
if
((
inode
=
proc_get_inode
(
dir
->
i_sb
,
if
((
inode
=
proc_get_inode
(
dir
->
i_sb
,
...
...
drivers/s390/char/tape.c
View file @
e3b08ca8
...
@@ -210,12 +210,6 @@ static struct file_operations tape_devices_file_ops =
...
@@ -210,12 +210,6 @@ static struct file_operations tape_devices_file_ops =
release:
tape_devices_release
,
/* close */
release:
tape_devices_release
,
/* close */
};
};
static
struct
inode_operations
tape_devices_inode_ops
=
{
#if !(LINUX_VERSION_CODE > KERNEL_VERSION(2,3,98))
default_file_ops:
&
tape_devices_file_ops
/* file ops */
#endif
/* LINUX_IS_24 */
};
#endif
/* CONFIG_PROC_FS */
#endif
/* CONFIG_PROC_FS */
/* SECTION: Parameters for tape */
/* SECTION: Parameters for tape */
...
@@ -271,9 +265,7 @@ tape_parm_call_setup (char *str)
...
@@ -271,9 +265,7 @@ tape_parm_call_setup (char *str)
return
1
;
return
1
;
}
}
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,2,16))
__setup
(
"tape="
,
tape_parm_call_setup
);
__setup
(
"tape="
,
tape_parm_call_setup
);
#endif
/* kernel <2.2.19 */
#endif
/* not defined MODULE */
#endif
/* not defined MODULE */
static
inline
int
static
inline
int
...
@@ -909,30 +901,10 @@ tape_init (void)
...
@@ -909,30 +901,10 @@ tape_init (void)
/* Allocate local buffer for the ccwcache */
/* Allocate local buffer for the ccwcache */
tape_init_emergency_req
();
tape_init_emergency_req
();
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,3,98))
tape_devices_entry
=
create_proc_entry
(
"tapedevices"
,
tape_devices_entry
=
create_proc_entry
(
"tapedevices"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
&
proc_root
);
&
proc_root
);
tape_devices_entry
->
proc_fops
=
&
tape_devices_file_ops
;
tape_devices_entry
->
proc_fops
=
&
tape_devices_file_ops
;
tape_devices_entry
->
proc_iops
=
&
tape_devices_inode_ops
;
#else
tape_devices_entry
=
(
struct
proc_dir_entry
*
)
kmalloc
(
sizeof
(
struct
proc_dir_entry
),
GFP_ATOMIC
);
if
(
tape_devices_entry
)
{
memset
(
tape_devices_entry
,
0
,
sizeof
(
struct
proc_dir_entry
));
tape_devices_entry
->
name
=
"tapedevices"
;
tape_devices_entry
->
namelen
=
strlen
(
"tapedevices"
);
tape_devices_entry
->
low_ino
=
0
;
tape_devices_entry
->
mode
=
(
S_IFREG
|
S_IRUGO
|
S_IWUSR
);
tape_devices_entry
->
nlink
=
1
;
tape_devices_entry
->
uid
=
0
;
tape_devices_entry
->
gid
=
0
;
tape_devices_entry
->
size
=
0
;
tape_devices_entry
->
get_info
=
NULL
;
tape_devices_entry
->
ops
=
&
tape_devices_inode_ops
;
proc_register
(
&
proc_root
,
tape_devices_entry
);
}
#endif
#endif
/* CONFIG_PROC_FS */
#endif
/* CONFIG_PROC_FS */
return
0
;
return
0
;
...
@@ -996,12 +968,7 @@ cleanup_module (void)
...
@@ -996,12 +968,7 @@ cleanup_module (void)
devfs_unregister
(
tape_devfs_root_entry
);
devfs_unregister
(
tape_devfs_root_entry
);
#endif CONFIG_DEVFS_FS
#endif CONFIG_DEVFS_FS
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,3,98))
remove_proc_entry
(
"tapedevices"
,
&
proc_root
);
remove_proc_entry
(
"tapedevices"
,
&
proc_root
);
#else
proc_unregister
(
&
proc_root
,
tape_devices_entry
->
low_ino
);
kfree
(
tape_devices_entry
);
#endif
/* LINUX_IS_24 */
#endif
#endif
#ifdef CONFIG_S390_TAPE_CHAR
#ifdef CONFIG_S390_TAPE_CHAR
tapechar_uninit
();
tapechar_uninit
();
...
...
drivers/s390/net/ctcmain.c
View file @
e3b08ca8
...
@@ -77,16 +77,7 @@
...
@@ -77,16 +77,7 @@
#define FREE_IRQ free_irq
#define FREE_IRQ free_irq
#endif
#endif
#if LINUX_VERSION_CODE >= 0x020213
#include <asm/idals.h>
# include <asm/idals.h>
#else
# define set_normalized_cda(ccw, addr) ((ccw)->cda = (addr),0)
# define clear_normalized_cda(ccw)
#endif
#if LINUX_VERSION_CODE < 0x020400
# define s390_dev_info_t dev_info_t
# define dev_kfree_skb_irq(a) dev_kfree_skb(a)
#endif
#include <asm/irq.h>
#include <asm/irq.h>
...
@@ -319,9 +310,7 @@ static int activated;
...
@@ -319,9 +310,7 @@ static int activated;
typedef
struct
ctc_priv_t
{
typedef
struct
ctc_priv_t
{
struct
net_device_stats
stats
;
struct
net_device_stats
stats
;
#if LINUX_VERSION_CODE >= 0x02032D
unsigned
long
tbusy
;
unsigned
long
tbusy
;
#endif
/**
/**
* The finite state machine of this interface.
* The finite state machine of this interface.
*/
*/
...
@@ -351,20 +340,6 @@ typedef struct ll_header_t {
...
@@ -351,20 +340,6 @@ typedef struct ll_header_t {
* Compatibility macros for busy handling
* Compatibility macros for busy handling
* of network devices.
* of network devices.
*/
*/
#if LINUX_VERSION_CODE < 0x02032D
static
__inline__
void
ctc_clear_busy
(
net_device
*
dev
)
{
clear_bit
(
0
,(
void
*
)
&
dev
->
tbusy
);
mark_bh
(
NET_BH
);
}
static
__inline__
int
ctc_test_and_set_busy
(
net_device
*
dev
)
{
return
(
test_and_set_bit
(
0
,
(
void
*
)
&
dev
->
tbusy
));
}
#define SET_DEVICE_START(device, value) dev->start = value
#else
static
__inline__
void
ctc_clear_busy
(
net_device
*
dev
)
static
__inline__
void
ctc_clear_busy
(
net_device
*
dev
)
{
{
clear_bit
(
0
,
&
(((
ctc_priv
*
)
dev
->
priv
)
->
tbusy
));
clear_bit
(
0
,
&
(((
ctc_priv
*
)
dev
->
priv
)
->
tbusy
));
...
@@ -378,7 +353,6 @@ static __inline__ int ctc_test_and_set_busy(net_device *dev)
...
@@ -378,7 +353,6 @@ static __inline__ int ctc_test_and_set_busy(net_device *dev)
}
}
#define SET_DEVICE_START(device, value)
#define SET_DEVICE_START(device, value)
#endif
/**
/**
* Print Banner.
* Print Banner.
...
@@ -1351,11 +1325,7 @@ static void ch_action_start(fsm_instance *fi, int event, void *arg)
...
@@ -1351,11 +1325,7 @@ static void ch_action_start(fsm_instance *fi, int event, void *arg)
dev
->
name
,
dev
->
name
,
(
CHANNEL_DIRECTION
(
ch
->
flags
)
==
READ
)
?
"RX"
:
"TX"
);
(
CHANNEL_DIRECTION
(
ch
->
flags
)
==
READ
)
?
"RX"
:
"TX"
);
#if LINUX_VERSION_CODE >= 0x020400
INIT_LIST_HEAD
(
&
ch
->
tq
.
list
);
INIT_LIST_HEAD
(
&
ch
->
tq
.
list
);
#else
ch
->
tq
.
next
=
NULL
;
#endif
ch
->
tq
.
sync
=
0
;
ch
->
tq
.
sync
=
0
;
ch
->
tq
.
routine
=
(
void
*
)(
void
*
)
ctc_bh
;
ch
->
tq
.
routine
=
(
void
*
)(
void
*
)
ctc_bh
;
ch
->
tq
.
data
=
ch
;
ch
->
tq
.
data
=
ch
;
...
@@ -2695,7 +2665,7 @@ static struct net_device_stats *ctc_stats(net_device *dev) {
...
@@ -2695,7 +2665,7 @@ static struct net_device_stats *ctc_stats(net_device *dev) {
* procfs related structures and routines
* procfs related structures and routines
*****************************************************************************/
*****************************************************************************/
static
net_device
*
find_netdev_by_ino
(
unsigned
long
ino
)
static
net_device
*
find_netdev_by_ino
(
struct
proc_dir_entry
*
pde
)
{
{
channel
*
ch
=
channels
;
channel
*
ch
=
channels
;
net_device
*
dev
=
NULL
;
net_device
*
dev
=
NULL
;
...
@@ -2706,8 +2676,8 @@ static net_device *find_netdev_by_ino(unsigned long ino)
...
@@ -2706,8 +2676,8 @@ static net_device *find_netdev_by_ino(unsigned long ino)
dev
=
ch
->
netdev
;
dev
=
ch
->
netdev
;
privptr
=
(
ctc_priv
*
)
dev
->
priv
;
privptr
=
(
ctc_priv
*
)
dev
->
priv
;
if
((
privptr
->
proc_ctrl_entry
->
low_ino
==
ino
)
||
if
((
privptr
->
proc_ctrl_entry
==
pde
)
||
(
privptr
->
proc_stat_entry
->
low_ino
==
ino
))
(
privptr
->
proc_stat_entry
==
pde
))
return
dev
;
return
dev
;
}
}
ch
=
ch
->
next
;
ch
=
ch
->
next
;
...
@@ -2715,20 +2685,6 @@ static net_device *find_netdev_by_ino(unsigned long ino)
...
@@ -2715,20 +2685,6 @@ static net_device *find_netdev_by_ino(unsigned long ino)
return
NULL
;
return
NULL
;
}
}
#if LINUX_VERSION_CODE < 0x020363
/**
* Lock the module, if someone changes into
* our proc directory.
*/
static
void
ctc_fill_inode
(
struct
inode
*
inode
,
int
fill
)
{
if
(
fill
)
{
MOD_INC_USE_COUNT
;
}
else
MOD_DEC_USE_COUNT
;
}
#endif
#define CTRL_BUFSIZE 40
#define CTRL_BUFSIZE 40
static
int
ctc_ctrl_open
(
struct
inode
*
inode
,
struct
file
*
file
)
static
int
ctc_ctrl_open
(
struct
inode
*
inode
,
struct
file
*
file
)
...
@@ -2750,14 +2706,14 @@ static int ctc_ctrl_close(struct inode *inode, struct file *file)
...
@@ -2750,14 +2706,14 @@ static int ctc_ctrl_close(struct inode *inode, struct file *file)
static
ssize_t
ctc_ctrl_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
static
ssize_t
ctc_ctrl_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
off
)
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
net_device
*
dev
;
net_device
*
dev
;
ctc_priv
*
privptr
;
ctc_priv
*
privptr
;
char
*
e
;
char
*
e
;
int
bs1
;
int
bs1
;
char
tmp
[
40
];
char
tmp
[
40
];
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -2795,7 +2751,7 @@ static ssize_t ctc_ctrl_write(struct file *file, const char *buf, size_t count,
...
@@ -2795,7 +2751,7 @@ static ssize_t ctc_ctrl_write(struct file *file, const char *buf, size_t count,
static
ssize_t
ctc_ctrl_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
static
ssize_t
ctc_ctrl_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
net_device
*
dev
;
net_device
*
dev
;
ctc_priv
*
privptr
;
ctc_priv
*
privptr
;
...
@@ -2803,7 +2759,7 @@ static ssize_t ctc_ctrl_read(struct file *file, char *buf, size_t count,
...
@@ -2803,7 +2759,7 @@ static ssize_t ctc_ctrl_read(struct file *file, char *buf, size_t count,
char
*
p
=
sbuf
;
char
*
p
=
sbuf
;
int
l
;
int
l
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -2847,11 +2803,11 @@ static int ctc_stat_close(struct inode *inode, struct file *file)
...
@@ -2847,11 +2803,11 @@ static int ctc_stat_close(struct inode *inode, struct file *file)
static
ssize_t
ctc_stat_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
static
ssize_t
ctc_stat_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
off
)
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
net_device
*
dev
;
net_device
*
dev
;
ctc_priv
*
privptr
;
ctc_priv
*
privptr
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
privptr
=
(
ctc_priv
*
)
dev
->
priv
;
privptr
=
(
ctc_priv
*
)
dev
->
priv
;
privptr
->
channel
[
WRITE
]
->
prof
.
maxmulti
=
0
;
privptr
->
channel
[
WRITE
]
->
prof
.
maxmulti
=
0
;
...
@@ -2866,7 +2822,7 @@ static ssize_t ctc_stat_write(struct file *file, const char *buf, size_t count,
...
@@ -2866,7 +2822,7 @@ static ssize_t ctc_stat_write(struct file *file, const char *buf, size_t count,
static
ssize_t
ctc_stat_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
static
ssize_t
ctc_stat_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
net_device
*
dev
;
net_device
*
dev
;
ctc_priv
*
privptr
;
ctc_priv
*
privptr
;
...
@@ -2874,7 +2830,7 @@ static ssize_t ctc_stat_read(struct file *file, char *buf, size_t count,
...
@@ -2874,7 +2830,7 @@ static ssize_t ctc_stat_read(struct file *file, char *buf, size_t count,
char
*
p
=
sbuf
;
char
*
p
=
sbuf
;
int
l
;
int
l
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -2928,74 +2884,7 @@ static struct file_operations ctc_ctrl_fops = {
...
@@ -2928,74 +2884,7 @@ static struct file_operations ctc_ctrl_fops = {
release:
ctc_ctrl_close
,
release:
ctc_ctrl_close
,
};
};
static
struct
inode_operations
ctc_stat_iops
=
{
#if LINUX_VERSION_CODE < 0x020363
default_file_ops:
&
ctc_stat_fops
#endif
};
static
struct
inode_operations
ctc_ctrl_iops
=
{
#if LINUX_VERSION_CODE < 0x020363
default_file_ops:
&
ctc_ctrl_fops
#endif
};
static
struct
proc_dir_entry
stat_entry
=
{
0
,
/* low_ino */
10
,
/* namelen */
"statistics"
,
/* name */
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
/* mode */
1
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
&
ctc_stat_iops
/* ops */
};
static
struct
proc_dir_entry
ctrl_entry
=
{
0
,
/* low_ino */
10
,
/* namelen */
"buffersize"
,
/* name */
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
/* mode */
1
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
&
ctc_ctrl_iops
/* ops */
};
#if LINUX_VERSION_CODE < 0x020363
static
struct
proc_dir_entry
ctc_dir
=
{
0
,
/* low_ino */
3
,
/* namelen */
"ctc"
,
/* name */
S_IFDIR
|
S_IRUGO
|
S_IXUGO
,
/* mode */
2
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
0
,
/* ops */
0
,
/* get_info */
ctc_fill_inode
/* fill_ino (for locking) */
};
static
struct
proc_dir_entry
ctc_template
=
{
0
,
/* low_ino */
0
,
/* namelen */
""
,
/* name */
S_IFDIR
|
S_IRUGO
|
S_IXUGO
,
/* mode */
2
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
0
,
/* ops */
0
,
/* get_info */
ctc_fill_inode
/* fill_ino (for locking) */
};
#else
static
struct
proc_dir_entry
*
ctc_dir
=
NULL
;
static
struct
proc_dir_entry
*
ctc_dir
=
NULL
;
static
struct
proc_dir_entry
*
ctc_template
=
NULL
;
#endif
/**
/**
* Create the driver's main directory /proc/net/ctc
* Create the driver's main directory /proc/net/ctc
...
@@ -3004,13 +2893,8 @@ static void ctc_proc_create_main(void) {
...
@@ -3004,13 +2893,8 @@ static void ctc_proc_create_main(void) {
/**
/**
* If not registered, register main proc dir-entry now
* If not registered, register main proc dir-entry now
*/
*/
#if LINUX_VERSION_CODE > 0x020362
if
(
!
ctc_dir
)
if
(
!
ctc_dir
)
ctc_dir
=
proc_mkdir
(
"ctc"
,
proc_net
);
ctc_dir
=
proc_mkdir
(
"ctc"
,
proc_net
);
#else
if
(
ctc_dir
.
low_ino
==
0
)
proc_net_register
(
&
ctc_dir
);
#endif
}
}
#ifdef MODULE
#ifdef MODULE
...
@@ -3018,11 +2902,7 @@ static void ctc_proc_create_main(void) {
...
@@ -3018,11 +2902,7 @@ static void ctc_proc_create_main(void) {
* Destroy /proc/net/ctc
* Destroy /proc/net/ctc
*/
*/
static
void
ctc_proc_destroy_main
(
void
)
{
static
void
ctc_proc_destroy_main
(
void
)
{
#if LINUX_VERSION_CODE > 0x020362
remove_proc_entry
(
"ctc"
,
proc_net
);
remove_proc_entry
(
"ctc"
,
proc_net
);
#else
proc_net_unregister
(
ctc_dir
.
low_ino
);
#endif
}
}
#endif MODULE
#endif MODULE
...
@@ -3037,27 +2917,17 @@ static void ctc_proc_destroy_main(void) {
...
@@ -3037,27 +2917,17 @@ static void ctc_proc_destroy_main(void) {
static
void
ctc_proc_create_sub
(
net_device
*
dev
)
{
static
void
ctc_proc_create_sub
(
net_device
*
dev
)
{
ctc_priv
*
privptr
=
dev
->
priv
;
ctc_priv
*
privptr
=
dev
->
priv
;
#if LINUX_VERSION_CODE > 0x020362
privptr
->
proc_dentry
=
proc_mkdir
(
dev
->
name
,
ctc_dir
);
privptr
->
proc_dentry
=
proc_mkdir
(
dev
->
name
,
ctc_dir
);
privptr
->
proc_stat_entry
=
privptr
->
proc_stat_entry
=
create_proc_entry
(
"statistics"
,
create_proc_entry
(
"statistics"
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
privptr
->
proc_dentry
);
privptr
->
proc_dentry
);
privptr
->
proc_stat_entry
->
proc_fops
=
&
ctc_stat_fops
;
privptr
->
proc_stat_entry
->
proc_fops
=
&
ctc_stat_fops
;
privptr
->
proc_stat_entry
->
proc_iops
=
&
ctc_stat_iops
;
privptr
->
proc_ctrl_entry
=
privptr
->
proc_ctrl_entry
=
create_proc_entry
(
"buffersize"
,
create_proc_entry
(
"buffersize"
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
privptr
->
proc_dentry
);
privptr
->
proc_dentry
);
privptr
->
proc_ctrl_entry
->
proc_fops
=
&
ctc_ctrl_fops
;
privptr
->
proc_ctrl_entry
->
proc_fops
=
&
ctc_ctrl_fops
;
privptr
->
proc_ctrl_entry
->
proc_iops
=
&
ctc_ctrl_iops
;
#else
privptr
->
proc_dentry
->
name
=
dev
->
name
;
privptr
->
proc_dentry
->
namelen
=
strlen
(
dev
->
name
);
proc_register
(
&
ctc_dir
,
privptr
->
proc_dentry
);
proc_register
(
privptr
->
proc_dentry
,
privptr
->
proc_stat_entry
);
proc_register
(
privptr
->
proc_dentry
,
privptr
->
proc_ctrl_entry
);
#endif
privptr
->
proc_registered
=
1
;
privptr
->
proc_registered
=
1
;
}
}
...
@@ -3070,18 +2940,9 @@ static void ctc_proc_create_sub(net_device *dev) {
...
@@ -3070,18 +2940,9 @@ static void ctc_proc_create_sub(net_device *dev) {
static
void
ctc_proc_destroy_sub
(
ctc_priv
*
privptr
)
{
static
void
ctc_proc_destroy_sub
(
ctc_priv
*
privptr
)
{
if
(
!
privptr
->
proc_registered
)
if
(
!
privptr
->
proc_registered
)
return
;
return
;
#if LINUX_VERSION_CODE > 0x020362
remove_proc_entry
(
"statistics"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"statistics"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"buffersize"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"buffersize"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
privptr
->
proc_dentry
->
name
,
ctc_dir
);
remove_proc_entry
(
privptr
->
proc_dentry
->
name
,
ctc_dir
);
#else
proc_unregister
(
privptr
->
proc_dentry
,
privptr
->
proc_stat_entry
->
low_ino
);
proc_unregister
(
privptr
->
proc_dentry
,
privptr
->
proc_ctrl_entry
->
low_ino
);
proc_unregister
(
&
ctc_dir
,
privptr
->
proc_dentry
->
low_ino
);
#endif
privptr
->
proc_registered
=
0
;
privptr
->
proc_registered
=
0
;
}
}
...
@@ -3263,14 +3124,8 @@ static param *find_param(char *name) {
...
@@ -3263,14 +3124,8 @@ static param *find_param(char *name) {
static
void
ctc_setup
(
char
*
setup
)
static
void
ctc_setup
(
char
*
setup
)
# define ctc_setup_return return
# define ctc_setup_return return
#else MODULE
#else MODULE
# if LINUX_VERSION_CODE < 0x020300
__initfunc
(
void
ctc_setup
(
char
*
setup
,
int
*
ints
))
# define ctc_setup_return return
# define ints local_ints
# else
static
int
__init
ctc_setup
(
char
*
setup
)
static
int
__init
ctc_setup
(
char
*
setup
)
# define ctc_setup_return return(1)
# define ctc_setup_return return(1)
# endif
#endif MODULE
#endif MODULE
{
{
int
write_dev
;
int
write_dev
;
...
@@ -3368,9 +3223,7 @@ static param *find_param(char *name) {
...
@@ -3368,9 +3223,7 @@ static param *find_param(char *name) {
ctc_setup_return
;
ctc_setup_return
;
}
}
#if LINUX_VERSION_CODE >= 0x020300
__setup
(
"ctc="
,
ctc_setup
);
__setup
(
"ctc="
,
ctc_setup
);
#endif
#endif
/* !CTC_CHANDEV */
#endif
/* !CTC_CHANDEV */
...
@@ -3443,17 +3296,12 @@ ctc_init_netdevice(net_device *dev, int alloc_device)
...
@@ -3443,17 +3296,12 @@ ctc_init_netdevice(net_device *dev, int alloc_device)
ctc_priv
*
privptr
;
ctc_priv
*
privptr
;
int
priv_size
;
int
priv_size
;
if
(
alloc_device
)
{
if
(
alloc_device
)
{
dev
=
kmalloc
(
sizeof
(
net_device
)
dev
=
kmalloc
(
sizeof
(
net_device
),
GFP_KERNEL
);
#if LINUX_VERSION_CODE < 0x020300
+
11
/* name + zero */
#endif
,
GFP_KERNEL
);
if
(
!
dev
)
if
(
!
dev
)
return
NULL
;
return
NULL
;
memset
(
dev
,
0
,
sizeof
(
net_device
));
memset
(
dev
,
0
,
sizeof
(
net_device
));
}
}
priv_size
=
sizeof
(
ctc_priv
)
+
sizeof
(
ctc_template
)
+
priv_size
=
sizeof
(
ctc_priv
);
sizeof
(
stat_entry
)
+
sizeof
(
ctrl_entry
);
dev
->
priv
=
kmalloc
(
priv_size
,
GFP_KERNEL
);
dev
->
priv
=
kmalloc
(
priv_size
,
GFP_KERNEL
);
if
(
dev
->
priv
==
NULL
)
{
if
(
dev
->
priv
==
NULL
)
{
if
(
alloc_device
)
if
(
alloc_device
)
...
@@ -3462,17 +3310,6 @@ ctc_init_netdevice(net_device *dev, int alloc_device)
...
@@ -3462,17 +3310,6 @@ ctc_init_netdevice(net_device *dev, int alloc_device)
}
}
memset
(
dev
->
priv
,
0
,
priv_size
);
memset
(
dev
->
priv
,
0
,
priv_size
);
privptr
=
(
ctc_priv
*
)
dev
->
priv
;
privptr
=
(
ctc_priv
*
)
dev
->
priv
;
privptr
->
proc_dentry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
ctc_priv
));
privptr
->
proc_stat_entry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
ctc_priv
)
+
sizeof
(
ctc_template
));
privptr
->
proc_ctrl_entry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
ctc_priv
)
+
sizeof
(
ctc_template
)
+
sizeof
(
stat_entry
));
memcpy
(
privptr
->
proc_dentry
,
&
ctc_template
,
sizeof
(
ctc_template
));
memcpy
(
privptr
->
proc_stat_entry
,
&
stat_entry
,
sizeof
(
stat_entry
));
memcpy
(
privptr
->
proc_ctrl_entry
,
&
ctrl_entry
,
sizeof
(
ctrl_entry
));
privptr
->
fsm
=
init_fsm
(
"ctcdev"
,
dev_state_names
,
privptr
->
fsm
=
init_fsm
(
"ctcdev"
,
dev_state_names
,
dev_event_names
,
NR_DEV_STATES
,
NR_DEV_EVENTS
,
dev_event_names
,
NR_DEV_STATES
,
NR_DEV_EVENTS
,
dev_fsm
,
DEV_FSM_LEN
,
GFP_KERNEL
);
dev_fsm
,
DEV_FSM_LEN
,
GFP_KERNEL
);
...
@@ -3890,9 +3727,6 @@ int ctc_init(void) {
...
@@ -3890,9 +3727,6 @@ int ctc_init(void) {
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
break
;
break
;
}
}
#if LINUX_VERSION_CODE < 0x020300
dev
->
name
=
(
unsigned
char
*
)
dev
+
sizeof
(
net_device
);
#endif
if
(
par
&&
par
->
name
)
{
if
(
par
&&
par
->
name
)
{
char
*
p
;
char
*
p
;
int
n
;
int
n
;
...
@@ -3989,9 +3823,7 @@ int ctc_init(void) {
...
@@ -3989,9 +3823,7 @@ int ctc_init(void) {
}
}
#ifndef MODULE
#ifndef MODULE
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,3,0))
__initcall
(
ctc_init
);
__initcall
(
ctc_init
);
#endif
/* LINUX_VERSION_CODE */
#endif
/* MODULE */
#endif
/* MODULE */
/* --- This is the END my friend --- */
/* --- This is the END my friend --- */
drivers/s390/net/netiucv.c
View file @
e3b08ca8
...
@@ -75,14 +75,7 @@ MODULE_PARM_DESC (iucv,
...
@@ -75,14 +75,7 @@ MODULE_PARM_DESC (iucv,
static
char
*
iucv
=
""
;
static
char
*
iucv
=
""
;
/**
* compatibility stuff
*/
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0))
typedef
struct
net_device
net_device
;
typedef
struct
net_device
net_device
;
#else
typedef
struct
device
net_device
;
#endif
/**
/**
...
@@ -141,9 +134,7 @@ typedef struct iucv_event_t {
...
@@ -141,9 +134,7 @@ typedef struct iucv_event_t {
*/
*/
typedef
struct
netiucv_priv_t
{
typedef
struct
netiucv_priv_t
{
struct
net_device_stats
stats
;
struct
net_device_stats
stats
;
#if LINUX_VERSION_CODE >= 0x02032D
unsigned
long
tbusy
;
unsigned
long
tbusy
;
#endif
fsm_instance
*
fsm
;
fsm_instance
*
fsm
;
iucv_connection
*
conn
;
iucv_connection
*
conn
;
struct
proc_dir_entry
*
proc_dentry
;
struct
proc_dir_entry
*
proc_dentry
;
...
@@ -172,20 +163,6 @@ typedef struct ll_header_t {
...
@@ -172,20 +163,6 @@ typedef struct ll_header_t {
* Compatibility macros for busy handling
* Compatibility macros for busy handling
* of network devices.
* of network devices.
*/
*/
#if LINUX_VERSION_CODE < 0x02032D
static
__inline__
void
netiucv_clear_busy
(
net_device
*
dev
)
{
clear_bit
(
0
,(
void
*
)
&
dev
->
tbusy
);
mark_bh
(
NET_BH
);
}
static
__inline__
int
netiucv_test_and_set_busy
(
net_device
*
dev
)
{
return
(
test_and_set_bit
(
0
,
(
void
*
)
&
dev
->
tbusy
));
}
#define SET_DEVICE_START(device, value) dev->start = value
#else
static
__inline__
void
netiucv_clear_busy
(
net_device
*
dev
)
static
__inline__
void
netiucv_clear_busy
(
net_device
*
dev
)
{
{
clear_bit
(
0
,
&
(((
netiucv_priv
*
)
dev
->
priv
)
->
tbusy
));
clear_bit
(
0
,
&
(((
netiucv_priv
*
)
dev
->
priv
)
->
tbusy
));
...
@@ -199,11 +176,6 @@ static __inline__ int netiucv_test_and_set_busy(net_device *dev)
...
@@ -199,11 +176,6 @@ static __inline__ int netiucv_test_and_set_busy(net_device *dev)
}
}
#define SET_DEVICE_START(device, value)
#define SET_DEVICE_START(device, value)
#endif
#if LINUX_VERSION_CODE < 0x020400
# define dev_kfree_skb_irq(a) dev_kfree_skb(a)
#endif
__u8
iucv_host
[
8
]
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
};
__u8
iucv_host
[
8
]
=
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
};
__u8
iucvMagic
[
16
]
=
{
__u8
iucvMagic
[
16
]
=
{
...
@@ -1282,7 +1254,7 @@ netiucv_change_mtu (net_device * dev, int new_mtu)
...
@@ -1282,7 +1254,7 @@ netiucv_change_mtu (net_device * dev, int new_mtu)
*****************************************************************************/
*****************************************************************************/
static
net_device
*
static
net_device
*
find_netdev_by_ino
(
unsigned
long
ino
)
find_netdev_by_ino
(
struct
proc_dir_entry
*
pde
)
{
{
iucv_connection
*
conn
=
connections
;
iucv_connection
*
conn
=
connections
;
net_device
*
dev
=
NULL
;
net_device
*
dev
=
NULL
;
...
@@ -1293,9 +1265,9 @@ find_netdev_by_ino(unsigned long ino)
...
@@ -1293,9 +1265,9 @@ find_netdev_by_ino(unsigned long ino)
dev
=
conn
->
netdev
;
dev
=
conn
->
netdev
;
privptr
=
(
netiucv_priv
*
)
dev
->
priv
;
privptr
=
(
netiucv_priv
*
)
dev
->
priv
;
if
((
privptr
->
proc_buffer_entry
->
low_ino
==
ino
)
||
if
((
privptr
->
proc_buffer_entry
==
pde
)
||
(
privptr
->
proc_user_entry
->
low_ino
==
ino
)
||
(
privptr
->
proc_user_entry
==
pde
)
||
(
privptr
->
proc_stat_entry
->
low_ino
==
ino
)
)
(
privptr
->
proc_stat_entry
==
pde
)
)
return
dev
;
return
dev
;
}
}
conn
=
conn
->
next
;
conn
=
conn
->
next
;
...
@@ -1303,21 +1275,6 @@ find_netdev_by_ino(unsigned long ino)
...
@@ -1303,21 +1275,6 @@ find_netdev_by_ino(unsigned long ino)
return
NULL
;
return
NULL
;
}
}
#if LINUX_VERSION_CODE < 0x020363
/**
* Lock the module, if someone changes into
* our proc directory.
*/
static
void
netiucv_fill_inode
(
struct
inode
*
inode
,
int
fill
)
{
if
(
fill
)
{
MOD_INC_USE_COUNT
;
}
else
MOD_DEC_USE_COUNT
;
}
#endif
#define CTRL_BUFSIZE 40
#define CTRL_BUFSIZE 40
static
int
static
int
...
@@ -1342,14 +1299,14 @@ static ssize_t
...
@@ -1342,14 +1299,14 @@ static ssize_t
netiucv_buffer_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
netiucv_buffer_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
off
)
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
net_device
*
dev
;
net_device
*
dev
;
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
char
*
e
;
char
*
e
;
int
bs1
;
int
bs1
;
char
tmp
[
CTRL_BUFSIZE
];
char
tmp
[
CTRL_BUFSIZE
];
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -1385,7 +1342,7 @@ netiucv_buffer_write(struct file *file, const char *buf, size_t count,
...
@@ -1385,7 +1342,7 @@ netiucv_buffer_write(struct file *file, const char *buf, size_t count,
static
ssize_t
static
ssize_t
netiucv_buffer_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
netiucv_buffer_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
net_device
*
dev
;
net_device
*
dev
;
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
...
@@ -1393,7 +1350,7 @@ netiucv_buffer_read(struct file *file, char *buf, size_t count, loff_t *off)
...
@@ -1393,7 +1350,7 @@ netiucv_buffer_read(struct file *file, char *buf, size_t count, loff_t *off)
char
*
p
=
sbuf
;
char
*
p
=
sbuf
;
int
l
;
int
l
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -1438,7 +1395,7 @@ static ssize_t
...
@@ -1438,7 +1395,7 @@ static ssize_t
netiucv_user_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
netiucv_user_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
off
)
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
net_device
*
dev
;
net_device
*
dev
;
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
int
i
;
int
i
;
...
@@ -1446,7 +1403,7 @@ netiucv_user_write(struct file *file, const char *buf, size_t count,
...
@@ -1446,7 +1403,7 @@ netiucv_user_write(struct file *file, const char *buf, size_t count,
char
tmp
[
CTRL_BUFSIZE
];
char
tmp
[
CTRL_BUFSIZE
];
char
user
[
9
];
char
user
[
9
];
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -1480,7 +1437,7 @@ netiucv_user_write(struct file *file, const char *buf, size_t count,
...
@@ -1480,7 +1437,7 @@ netiucv_user_write(struct file *file, const char *buf, size_t count,
static
ssize_t
static
ssize_t
netiucv_user_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
netiucv_user_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
net_device
*
dev
;
net_device
*
dev
;
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
...
@@ -1488,7 +1445,7 @@ netiucv_user_read(struct file *file, char *buf, size_t count, loff_t *off)
...
@@ -1488,7 +1445,7 @@ netiucv_user_read(struct file *file, char *buf, size_t count, loff_t *off)
char
*
p
=
sbuf
;
char
*
p
=
sbuf
;
int
l
;
int
l
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -1536,11 +1493,11 @@ netiucv_stat_close(struct inode *inode, struct file *file)
...
@@ -1536,11 +1493,11 @@ netiucv_stat_close(struct inode *inode, struct file *file)
static
ssize_t
static
ssize_t
netiucv_stat_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
off
)
netiucv_stat_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
net_device
*
dev
;
net_device
*
dev
;
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
privptr
=
(
netiucv_priv
*
)
dev
->
priv
;
privptr
=
(
netiucv_priv
*
)
dev
->
priv
;
privptr
->
conn
->
prof
.
maxmulti
=
0
;
privptr
->
conn
->
prof
.
maxmulti
=
0
;
...
@@ -1555,7 +1512,7 @@ netiucv_stat_write(struct file *file, const char *buf, size_t count, loff_t *off
...
@@ -1555,7 +1512,7 @@ netiucv_stat_write(struct file *file, const char *buf, size_t count, loff_t *off
static
ssize_t
static
ssize_t
netiucv_stat_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
netiucv_stat_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
off
)
{
{
unsigned
int
ino
=
((
struct
inode
*
)
file
->
f_dentry
->
d_inode
)
->
i_ino
;
struct
proc_dir_entry
*
pde
=
PDE
(
file
->
f_dentry
->
d_inode
)
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
char
*
sbuf
=
(
char
*
)
file
->
private_data
;
net_device
*
dev
;
net_device
*
dev
;
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
...
@@ -1563,7 +1520,7 @@ netiucv_stat_read(struct file *file, char *buf, size_t count, loff_t *off)
...
@@ -1563,7 +1520,7 @@ netiucv_stat_read(struct file *file, char *buf, size_t count, loff_t *off)
char
*
p
=
sbuf
;
char
*
p
=
sbuf
;
int
l
;
int
l
;
if
(
!
(
dev
=
find_netdev_by_ino
(
ino
)))
if
(
!
(
dev
=
find_netdev_by_ino
(
pde
)))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
off
!=
&
file
->
f_pos
)
if
(
off
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
return
-
ESPIPE
;
...
@@ -1624,92 +1581,8 @@ static struct file_operations netiucv_user_fops = {
...
@@ -1624,92 +1581,8 @@ static struct file_operations netiucv_user_fops = {
release:
netiucv_user_close
,
release:
netiucv_user_close
,
};
};
static
struct
inode_operations
netiucv_stat_iops
=
{
#if LINUX_VERSION_CODE < 0x020363
default_file_ops:
&
netiucv_stat_fops
#endif
};
static
struct
inode_operations
netiucv_buffer_iops
=
{
#if LINUX_VERSION_CODE < 0x020363
default_file_ops:
&
netiucv_buffer_fops
#endif
};
static
struct
inode_operations
netiucv_user_iops
=
{
#if LINUX_VERSION_CODE < 0x020363
default_file_ops:
&
netiucv_user_fops
#endif
};
static
struct
proc_dir_entry
stat_entry
=
{
0
,
/* low_ino */
10
,
/* namelen */
"statistics"
,
/* name */
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
/* mode */
1
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
&
netiucv_stat_iops
/* ops */
};
static
struct
proc_dir_entry
buffer_entry
=
{
0
,
/* low_ino */
10
,
/* namelen */
"buffersize"
,
/* name */
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
/* mode */
1
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
&
netiucv_buffer_iops
/* ops */
};
static
struct
proc_dir_entry
user_entry
=
{
0
,
/* low_ino */
8
,
/* namelen */
"username"
,
/* name */
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
/* mode */
1
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
&
netiucv_user_iops
/* ops */
};
#if LINUX_VERSION_CODE < 0x020363
static
struct
proc_dir_entry
netiucv_dir
=
{
0
,
/* low_ino */
4
,
/* namelen */
"iucv"
,
/* name */
S_IFDIR
|
S_IRUGO
|
S_IXUGO
,
/* mode */
2
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
0
,
/* ops */
0
,
/* get_info */
netiucv_fill_inode
/* fill_ino (for locking) */
};
static
struct
proc_dir_entry
netiucv_template
=
{
0
,
/* low_ino */
0
,
/* namelen */
""
,
/* name */
S_IFDIR
|
S_IRUGO
|
S_IXUGO
,
/* mode */
2
,
/* nlink */
0
,
/* uid */
0
,
/* gid */
0
,
/* size */
0
,
/* ops */
0
,
/* get_info */
netiucv_fill_inode
/* fill_ino (for locking) */
};
#else
static
struct
proc_dir_entry
*
netiucv_dir
=
NULL
;
static
struct
proc_dir_entry
*
netiucv_dir
=
NULL
;
static
struct
proc_dir_entry
*
netiucv_template
=
NULL
;
static
struct
proc_dir_entry
*
netiucv_template
=
NULL
;
#endif
/**
/**
* Create the driver's main directory /proc/net/iucv
* Create the driver's main directory /proc/net/iucv
...
@@ -1720,13 +1593,8 @@ netiucv_proc_create_main(void)
...
@@ -1720,13 +1593,8 @@ netiucv_proc_create_main(void)
/**
/**
* If not registered, register main proc dir-entry now
* If not registered, register main proc dir-entry now
*/
*/
#if LINUX_VERSION_CODE > 0x020362
if
(
!
netiucv_dir
)
if
(
!
netiucv_dir
)
netiucv_dir
=
proc_mkdir
(
"iucv"
,
proc_net
);
netiucv_dir
=
proc_mkdir
(
"iucv"
,
proc_net
);
#else
if
(
netiucv_dir
.
low_ino
==
0
)
proc_net_register
(
&
netiucv_dir
);
#endif
}
}
#ifdef MODULE
#ifdef MODULE
...
@@ -1736,11 +1604,7 @@ netiucv_proc_create_main(void)
...
@@ -1736,11 +1604,7 @@ netiucv_proc_create_main(void)
static
void
static
void
netiucv_proc_destroy_main
(
void
)
netiucv_proc_destroy_main
(
void
)
{
{
#if LINUX_VERSION_CODE > 0x020362
remove_proc_entry
(
"iucv"
,
proc_net
);
remove_proc_entry
(
"iucv"
,
proc_net
);
#else
proc_net_unregister
(
netiucv_dir
.
low_ino
);
#endif
}
}
#endif MODULE
#endif MODULE
...
@@ -1756,34 +1620,22 @@ static void
...
@@ -1756,34 +1620,22 @@ static void
netiucv_proc_create_sub
(
net_device
*
dev
)
{
netiucv_proc_create_sub
(
net_device
*
dev
)
{
netiucv_priv
*
privptr
=
dev
->
priv
;
netiucv_priv
*
privptr
=
dev
->
priv
;
#if LINUX_VERSION_CODE > 0x020362
privptr
->
proc_dentry
=
proc_mkdir
(
dev
->
name
,
netiucv_dir
);
privptr
->
proc_dentry
=
proc_mkdir
(
dev
->
name
,
netiucv_dir
);
privptr
->
proc_stat_entry
=
privptr
->
proc_stat_entry
=
create_proc_entry
(
"statistics"
,
create_proc_entry
(
"statistics"
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
privptr
->
proc_dentry
);
privptr
->
proc_dentry
);
privptr
->
proc_stat_entry
->
proc_fops
=
&
netiucv_stat_fops
;
privptr
->
proc_stat_entry
->
proc_fops
=
&
netiucv_stat_fops
;
privptr
->
proc_stat_entry
->
proc_iops
=
&
netiucv_stat_iops
;
privptr
->
proc_buffer_entry
=
privptr
->
proc_buffer_entry
=
create_proc_entry
(
"buffersize"
,
create_proc_entry
(
"buffersize"
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
privptr
->
proc_dentry
);
privptr
->
proc_dentry
);
privptr
->
proc_buffer_entry
->
proc_fops
=
&
netiucv_buffer_fops
;
privptr
->
proc_buffer_entry
->
proc_fops
=
&
netiucv_buffer_fops
;
privptr
->
proc_buffer_entry
->
proc_iops
=
&
netiucv_buffer_iops
;
privptr
->
proc_user_entry
=
privptr
->
proc_user_entry
=
create_proc_entry
(
"username"
,
create_proc_entry
(
"username"
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
S_IFREG
|
S_IRUSR
|
S_IWUSR
,
privptr
->
proc_dentry
);
privptr
->
proc_dentry
);
privptr
->
proc_user_entry
->
proc_fops
=
&
netiucv_user_fops
;
privptr
->
proc_user_entry
->
proc_fops
=
&
netiucv_user_fops
;
privptr
->
proc_user_entry
->
proc_iops
=
&
netiucv_user_iops
;
#else
privptr
->
proc_dentry
->
name
=
dev
->
name
;
privptr
->
proc_dentry
->
namelen
=
strlen
(
dev
->
name
);
proc_register
(
&
netiucv_dir
,
privptr
->
proc_dentry
);
proc_register
(
privptr
->
proc_dentry
,
privptr
->
proc_stat_entry
);
proc_register
(
privptr
->
proc_dentry
,
privptr
->
proc_buffer_entry
);
proc_register
(
privptr
->
proc_dentry
,
privptr
->
proc_user_entry
);
#endif
privptr
->
proc_registered
=
1
;
privptr
->
proc_registered
=
1
;
}
}
...
@@ -1797,21 +1649,10 @@ static void
...
@@ -1797,21 +1649,10 @@ static void
netiucv_proc_destroy_sub
(
netiucv_priv
*
privptr
)
{
netiucv_proc_destroy_sub
(
netiucv_priv
*
privptr
)
{
if
(
!
privptr
->
proc_registered
)
if
(
!
privptr
->
proc_registered
)
return
;
return
;
#if LINUX_VERSION_CODE > 0x020362
remove_proc_entry
(
"statistics"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"statistics"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"buffersize"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"buffersize"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"username"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
"username"
,
privptr
->
proc_dentry
);
remove_proc_entry
(
privptr
->
proc_dentry
->
name
,
netiucv_dir
);
remove_proc_entry
(
privptr
->
proc_dentry
->
name
,
netiucv_dir
);
#else
proc_unregister
(
privptr
->
proc_dentry
,
privptr
->
proc_stat_entry
->
low_ino
);
proc_unregister
(
privptr
->
proc_dentry
,
privptr
->
proc_buffer_entry
->
low_ino
);
proc_unregister
(
privptr
->
proc_dentry
,
privptr
->
proc_user_entry
->
low_ino
);
proc_unregister
(
&
netiucv_dir
,
privptr
->
proc_dentry
->
low_ino
);
#endif
privptr
->
proc_registered
=
0
;
privptr
->
proc_registered
=
0
;
}
}
...
@@ -1904,21 +1745,13 @@ netiucv_init_netdevice(int ifno, char *username)
...
@@ -1904,21 +1745,13 @@ netiucv_init_netdevice(int ifno, char *username)
netiucv_priv
*
privptr
;
netiucv_priv
*
privptr
;
int
priv_size
;
int
priv_size
;
net_device
*
dev
=
kmalloc
(
sizeof
(
net_device
)
net_device
*
dev
=
kmalloc
(
sizeof
(
net_device
),
GFP_KERNEL
);
#if LINUX_VERSION_CODE < 0x020300
+
11
/* name + zero */
#endif
,
GFP_KERNEL
);
if
(
!
dev
)
if
(
!
dev
)
return
NULL
;
return
NULL
;
memset
(
dev
,
0
,
sizeof
(
net_device
));
memset
(
dev
,
0
,
sizeof
(
net_device
));
#if LINUX_VERSION_CODE < 0x020300
dev
->
name
=
(
char
*
)
dev
+
sizeof
(
net_device
);
#endif
sprintf
(
dev
->
name
,
"iucv%d"
,
ifno
);
sprintf
(
dev
->
name
,
"iucv%d"
,
ifno
);
priv_size
=
sizeof
(
netiucv_priv
)
+
sizeof
(
netiucv_template
)
+
priv_size
=
sizeof
(
netiucv_priv
);
sizeof
(
stat_entry
)
+
sizeof
(
buffer_entry
)
+
sizeof
(
user_entry
);
dev
->
priv
=
kmalloc
(
priv_size
,
GFP_KERNEL
);
dev
->
priv
=
kmalloc
(
priv_size
,
GFP_KERNEL
);
if
(
dev
->
priv
==
NULL
)
{
if
(
dev
->
priv
==
NULL
)
{
kfree
(
dev
);
kfree
(
dev
);
...
@@ -1926,23 +1759,6 @@ netiucv_init_netdevice(int ifno, char *username)
...
@@ -1926,23 +1759,6 @@ netiucv_init_netdevice(int ifno, char *username)
}
}
memset
(
dev
->
priv
,
0
,
priv_size
);
memset
(
dev
->
priv
,
0
,
priv_size
);
privptr
=
(
netiucv_priv
*
)
dev
->
priv
;
privptr
=
(
netiucv_priv
*
)
dev
->
priv
;
privptr
->
proc_dentry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
netiucv_priv
));
privptr
->
proc_stat_entry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
netiucv_priv
)
+
sizeof
(
netiucv_template
));
privptr
->
proc_buffer_entry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
netiucv_priv
)
+
sizeof
(
netiucv_template
)
+
sizeof
(
stat_entry
));
privptr
->
proc_user_entry
=
(
struct
proc_dir_entry
*
)
(((
char
*
)
privptr
)
+
sizeof
(
netiucv_priv
)
+
sizeof
(
netiucv_template
)
+
sizeof
(
stat_entry
)
+
sizeof
(
buffer_entry
));
memcpy
(
privptr
->
proc_dentry
,
&
netiucv_template
,
sizeof
(
netiucv_template
));
memcpy
(
privptr
->
proc_stat_entry
,
&
stat_entry
,
sizeof
(
stat_entry
));
memcpy
(
privptr
->
proc_buffer_entry
,
&
buffer_entry
,
sizeof
(
buffer_entry
));
memcpy
(
privptr
->
proc_user_entry
,
&
user_entry
,
sizeof
(
user_entry
));
privptr
->
fsm
=
init_fsm
(
"netiucvdev"
,
dev_state_names
,
privptr
->
fsm
=
init_fsm
(
"netiucvdev"
,
dev_state_names
,
dev_event_names
,
NR_DEV_STATES
,
NR_DEV_EVENTS
,
dev_event_names
,
NR_DEV_STATES
,
NR_DEV_EVENTS
,
dev_fsm
,
DEV_FSM_LEN
,
GFP_KERNEL
);
dev_fsm
,
DEV_FSM_LEN
,
GFP_KERNEL
);
...
@@ -2015,14 +1831,9 @@ netiucv_banner(void)
...
@@ -2015,14 +1831,9 @@ netiucv_banner(void)
}
}
#ifndef MODULE
#ifndef MODULE
# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0))
# define init_return(a) return a
# define init_return(a) return a
static
int
__init
static
int
__init
iucv_setup
(
char
*
param
)
iucv_setup
(
char
*
param
)
# else
# define init_return(a) return
__initfunc
(
void
iucv_setup
(
char
*
param
,
int
*
ints
))
# endif
{
{
/**
/**
* We do not parse parameters here because at the time of
* We do not parse parameters here because at the time of
...
@@ -2034,9 +1845,7 @@ __initfunc (void iucv_setup(char *param, int *ints))
...
@@ -2034,9 +1845,7 @@ __initfunc (void iucv_setup(char *param, int *ints))
init_return
(
1
);
init_return
(
1
);
}
}
# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0))
__setup
(
"iucv="
,
iucv_setup
);
__setup
(
"iucv="
,
iucv_setup
);
# endif
#else
#else
static
void
static
void
netiucv_exit
(
void
)
netiucv_exit
(
void
)
...
...
fs/proc/generic.c
View file @
e3b08ca8
...
@@ -27,8 +27,6 @@ static loff_t proc_file_lseek(struct file *, loff_t, int);
...
@@ -27,8 +27,6 @@ static loff_t proc_file_lseek(struct file *, loff_t, int);
int
proc_match
(
int
len
,
const
char
*
name
,
struct
proc_dir_entry
*
de
)
int
proc_match
(
int
len
,
const
char
*
name
,
struct
proc_dir_entry
*
de
)
{
{
if
(
!
de
||
!
de
->
low_ino
)
return
0
;
if
(
de
->
namelen
!=
len
)
if
(
de
->
namelen
!=
len
)
return
0
;
return
0
;
return
!
memcmp
(
name
,
de
->
name
,
len
);
return
!
memcmp
(
name
,
de
->
name
,
len
);
...
@@ -266,8 +264,6 @@ struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry)
...
@@ -266,8 +264,6 @@ struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry)
de
=
PDE
(
dir
);
de
=
PDE
(
dir
);
if
(
de
)
{
if
(
de
)
{
for
(
de
=
de
->
subdir
;
de
;
de
=
de
->
next
)
{
for
(
de
=
de
->
subdir
;
de
;
de
=
de
->
next
)
{
if
(
!
de
||
!
de
->
low_ino
)
continue
;
if
(
de
->
namelen
!=
dentry
->
d_name
.
len
)
if
(
de
->
namelen
!=
dentry
->
d_name
.
len
)
continue
;
continue
;
if
(
!
memcmp
(
dentry
->
d_name
.
name
,
de
->
name
,
de
->
namelen
))
{
if
(
!
memcmp
(
dentry
->
d_name
.
name
,
de
->
name
,
de
->
namelen
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment