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
string: factorize skip_spaces and export it to be generally available
[safe/jmp/linux-2.6]
/
fs
/
smbfs
/
inode.c
diff --git
a/fs/smbfs/inode.c
b/fs/smbfs/inode.c
index
6ec88bf
..
1c4c8f0
100644
(file)
--- a/
fs/smbfs/inode.c
+++ b/
fs/smbfs/inode.c
@@
-7,7
+7,6
@@
* Please add a note about your changes to smbfs in the ChangeLog file.
*/
* Please add a note about your changes to smbfs in the ChangeLog file.
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/time.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/time.h>
#include <linux/kernel.h>
@@
-26,6
+25,7
@@
#include <linux/net.h>
#include <linux/vfs.h>
#include <linux/highuid.h>
#include <linux/net.h>
#include <linux/vfs.h>
#include <linux/highuid.h>
+#include <linux/sched.h>
#include <linux/smb_fs.h>
#include <linux/smbno.h>
#include <linux/smb_mount.h>
#include <linux/smb_fs.h>
#include <linux/smbno.h>
#include <linux/smb_mount.h>
@@
-48,15
+48,15
@@
static void smb_delete_inode(struct inode *);
static void smb_put_super(struct super_block *);
static void smb_delete_inode(struct inode *);
static void smb_put_super(struct super_block *);
-static int smb_statfs(struct
super_block
*, struct kstatfs *);
+static int smb_statfs(struct
dentry
*, struct kstatfs *);
static int smb_show_options(struct seq_file *, struct vfsmount *);
static int smb_show_options(struct seq_file *, struct vfsmount *);
-static
kmem_cache_t
*smb_inode_cachep;
+static
struct kmem_cache
*smb_inode_cachep;
static struct inode *smb_alloc_inode(struct super_block *sb)
{
struct smb_inode_info *ei;
static struct inode *smb_alloc_inode(struct super_block *sb)
{
struct smb_inode_info *ei;
- ei = (struct smb_inode_info *)kmem_cache_alloc(smb_inode_cachep,
SLAB
_KERNEL);
+ ei = (struct smb_inode_info *)kmem_cache_alloc(smb_inode_cachep,
GFP
_KERNEL);
if (!ei)
return NULL;
return &ei->vfs_inode;
if (!ei)
return NULL;
return &ei->vfs_inode;
@@
-67,21
+67,20
@@
static void smb_destroy_inode(struct inode *inode)
kmem_cache_free(smb_inode_cachep, SMB_I(inode));
}
kmem_cache_free(smb_inode_cachep, SMB_I(inode));
}
-static void init_once(void *
foo, kmem_cache_t * cachep, unsigned long flags
)
+static void init_once(void *
foo
)
{
struct smb_inode_info *ei = (struct smb_inode_info *) foo;
{
struct smb_inode_info *ei = (struct smb_inode_info *) foo;
- unsigned long flagmask = SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR;
- if ((flags & flagmask) == SLAB_CTOR_CONSTRUCTOR)
- inode_init_once(&ei->vfs_inode);
+ inode_init_once(&ei->vfs_inode);
}
}
-
+
static int init_inodecache(void)
{
smb_inode_cachep = kmem_cache_create("smb_inode_cache",
sizeof(struct smb_inode_info),
static int init_inodecache(void)
{
smb_inode_cachep = kmem_cache_create("smb_inode_cache",
sizeof(struct smb_inode_info),
- 0, SLAB_RECLAIM_ACCOUNT,
- init_once, NULL);
+ 0, (SLAB_RECLAIM_ACCOUNT|
+ SLAB_MEM_SPREAD),
+ init_once);
if (smb_inode_cachep == NULL)
return -ENOMEM;
return 0;
if (smb_inode_cachep == NULL)
return -ENOMEM;
return 0;
@@
-89,8
+88,7
@@
static int init_inodecache(void)
static void destroy_inodecache(void)
{
static void destroy_inodecache(void)
{
- if (kmem_cache_destroy(smb_inode_cachep))
- printk(KERN_INFO "smb_inode_cache: not all structures were freed\n");
+ kmem_cache_destroy(smb_inode_cachep);
}
static int smb_remount(struct super_block *sb, int *flags, char *data)
}
static int smb_remount(struct super_block *sb, int *flags, char *data)
@@
-99,7
+97,7
@@
static int smb_remount(struct super_block *sb, int *flags, char *data)
return 0;
}
return 0;
}
-static struct super_operations smb_sops =
+static
const
struct super_operations smb_sops =
{
.alloc_inode = smb_alloc_inode,
.destroy_inode = smb_destroy_inode,
{
.alloc_inode = smb_alloc_inode,
.destroy_inode = smb_destroy_inode,
@@
-167,7
+165,6
@@
smb_get_inode_attr(struct inode *inode, struct smb_fattr *fattr)
fattr->f_mtime = inode->i_mtime;
fattr->f_ctime = inode->i_ctime;
fattr->f_atime = inode->i_atime;
fattr->f_mtime = inode->i_mtime;
fattr->f_ctime = inode->i_ctime;
fattr->f_atime = inode->i_atime;
- fattr->f_blksize= inode->i_blksize;
fattr->f_blocks = inode->i_blocks;
fattr->attr = SMB_I(inode)->attr;
fattr->f_blocks = inode->i_blocks;
fattr->attr = SMB_I(inode)->attr;
@@
-201,7
+198,6
@@
smb_set_inode_attr(struct inode *inode, struct smb_fattr *fattr)
inode->i_uid = fattr->f_uid;
inode->i_gid = fattr->f_gid;
inode->i_ctime = fattr->f_ctime;
inode->i_uid = fattr->f_uid;
inode->i_gid = fattr->f_gid;
inode->i_ctime = fattr->f_ctime;
- inode->i_blksize= fattr->f_blksize;
inode->i_blocks = fattr->f_blocks;
inode->i_size = fattr->f_size;
inode->i_mtime = fattr->f_mtime;
inode->i_blocks = fattr->f_blocks;
inode->i_size = fattr->f_size;
inode->i_mtime = fattr->f_mtime;
@@
-216,7
+212,7
@@
smb_set_inode_attr(struct inode *inode, struct smb_fattr *fattr)
if (inode->i_mtime.tv_sec != last_time || inode->i_size != last_sz) {
VERBOSE("%ld changed, old=%ld, new=%ld, oz=%ld, nz=%ld\n",
inode->i_ino,
if (inode->i_mtime.tv_sec != last_time || inode->i_size != last_sz) {
VERBOSE("%ld changed, old=%ld, new=%ld, oz=%ld, nz=%ld\n",
inode->i_ino,
- (long) last_time, (long) inode->i_mtime,
+ (long) last_time, (long) inode->i_mtime
.tv_sec
,
(long) last_sz, (long) inode->i_size);
if (!S_ISDIR(inode->i_mode))
(long) last_sz, (long) inode->i_size);
if (!S_ISDIR(inode->i_mode))
@@
-463,14
+459,8
@@
smb_show_options(struct seq_file *s, struct vfsmount *m)
static void
smb_unload_nls(struct smb_sb_info *server)
{
static void
smb_unload_nls(struct smb_sb_info *server)
{
- if (server->remote_nls) {
- unload_nls(server->remote_nls);
- server->remote_nls = NULL;
- }
- if (server->local_nls) {
- unload_nls(server->local_nls);
- server->local_nls = NULL;
- }
+ unload_nls(server->remote_nls);
+ unload_nls(server->local_nls);
}
static void
}
static void
@@
-478,6
+468,8
@@
smb_put_super(struct super_block *sb)
{
struct smb_sb_info *server = SMB_SB(sb);
{
struct smb_sb_info *server = SMB_SB(sb);
+ lock_kernel();
+
smb_lock_server(server);
server->state = CONN_INVALID;
smbiod_unregister_server(server);
smb_lock_server(server);
server->state = CONN_INVALID;
smbiod_unregister_server(server);
@@
-485,13
+477,16
@@
smb_put_super(struct super_block *sb)
smb_close_socket(server);
if (server->conn_pid)
smb_close_socket(server);
if (server->conn_pid)
- kill_p
roc
(server->conn_pid, SIGTERM, 1);
+ kill_p
id
(server->conn_pid, SIGTERM, 1);
-
smb_
kfree(server->ops);
+ kfree(server->ops);
smb_unload_nls(server);
sb->s_fs_info = NULL;
smb_unlock_server(server);
smb_unload_nls(server);
sb->s_fs_info = NULL;
smb_unlock_server(server);
- smb_kfree(server);
+ put_pid(server->conn_pid);
+ kfree(server);
+
+ unlock_kernel();
}
static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
}
static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
@@
-503,6
+498,13
@@
static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
struct smb_fattr root;
int ver;
void *mem;
struct smb_fattr root;
int ver;
void *mem;
+ static int warn_count;
+
+ if (warn_count < 5) {
+ warn_count++;
+ printk(KERN_EMERG "smbfs is deprecated and will be removed"
+ " from the 2.6.27 kernel. Please migrate to cifs\n");
+ }
if (!raw_data)
goto out_no_data;
if (!raw_data)
goto out_no_data;
@@
-519,11
+521,10
@@
static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
sb->s_op = &smb_sops;
sb->s_time_gran = 100;
sb->s_op = &smb_sops;
sb->s_time_gran = 100;
- server =
smb_km
alloc(sizeof(struct smb_sb_info), GFP_KERNEL);
+ server =
kz
alloc(sizeof(struct smb_sb_info), GFP_KERNEL);
if (!server)
goto out_no_server;
sb->s_fs_info = server;
if (!server)
goto out_no_server;
sb->s_fs_info = server;
- memset(server, 0, sizeof(struct smb_sb_info));
server->super_block = sb;
server->mnt = NULL;
server->super_block = sb;
server->mnt = NULL;
@@
-534,16
+535,16
@@
static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
INIT_LIST_HEAD(&server->xmitq);
INIT_LIST_HEAD(&server->recvq);
server->conn_error = 0;
INIT_LIST_HEAD(&server->xmitq);
INIT_LIST_HEAD(&server->recvq);
server->conn_error = 0;
- server->conn_pid =
0
;
+ server->conn_pid =
NULL
;
server->state = CONN_INVALID; /* no connection yet */
server->generation = 0;
/* Allocate the global temp buffer and some superblock helper structs */
/* FIXME: move these to the smb_sb_info struct */
server->state = CONN_INVALID; /* no connection yet */
server->generation = 0;
/* Allocate the global temp buffer and some superblock helper structs */
/* FIXME: move these to the smb_sb_info struct */
- VERBOSE("alloc chunk = %
d
\n", sizeof(struct smb_ops) +
+ VERBOSE("alloc chunk = %
lu
\n", sizeof(struct smb_ops) +
sizeof(struct smb_mount_data_kernel));
sizeof(struct smb_mount_data_kernel));
- mem =
smb_
kmalloc(sizeof(struct smb_ops) +
-
sizeof(struct smb_mount_data_kernel), GFP_KERNEL);
+ mem = kmalloc(sizeof(struct smb_ops) +
+ sizeof(struct smb_mount_data_kernel), GFP_KERNEL);
if (!mem)
goto out_no_mem;
if (!mem)
goto out_no_mem;
@@
-583,7
+584,7
@@
static int smb_fill_super(struct super_block *sb, void *raw_data, int silent)
if (parse_options(mnt, raw_data))
goto out_bad_option;
}
if (parse_options(mnt, raw_data))
goto out_bad_option;
}
- mnt->mounted_uid = current
->uid
;
+ mnt->mounted_uid = current
_uid()
;
smb_setcodepage(server, &mnt->codepage);
/*
smb_setcodepage(server, &mnt->codepage);
/*
@@
-621,12
+622,12
@@
out_no_root:
out_no_smbiod:
smb_unload_nls(server);
out_bad_option:
out_no_smbiod:
smb_unload_nls(server);
out_bad_option:
-
smb_
kfree(mem);
+ kfree(mem);
out_no_mem:
if (!server->mnt)
printk(KERN_ERR "smb_fill_super: allocation failure\n");
sb->s_fs_info = NULL;
out_no_mem:
if (!server->mnt)
printk(KERN_ERR "smb_fill_super: allocation failure\n");
sb->s_fs_info = NULL;
-
smb_
kfree(server);
+ kfree(server);
goto out_fail;
out_wrong_data:
printk(KERN_ERR "smbfs: mount_data version %d is not supported\n", ver);
goto out_fail;
out_wrong_data:
printk(KERN_ERR "smbfs: mount_data version %d is not supported\n", ver);
@@
-641,13
+642,13
@@
out_no_server:
}
static int
}
static int
-smb_statfs(struct
super_block *sb
, struct kstatfs *buf)
+smb_statfs(struct
dentry *dentry
, struct kstatfs *buf)
{
int result;
lock_kernel();
{
int result;
lock_kernel();
- result = smb_proc_dskattr(
sb
, buf);
+ result = smb_proc_dskattr(
dentry
, buf);
unlock_kernel();
unlock_kernel();
@@
-782,16
+783,10
@@
out:
return error;
}
return error;
}
-#ifdef DEBUG_SMB_MALLOC
-int smb_malloced;
-int smb_current_kmalloced;
-int smb_current_vmalloced;
-#endif
-
-static struct super_block *smb_get_sb(struct file_system_type *fs_type,
- int flags, const char *dev_name, void *data)
+static int smb_get_sb(struct file_system_type *fs_type,
+ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
{
{
- return get_sb_nodev(fs_type, flags, data, smb_fill_super);
+ return get_sb_nodev(fs_type, flags, data, smb_fill_super
, mnt
);
}
static struct file_system_type smb_fs_type = {
}
static struct file_system_type smb_fs_type = {
@@
-807,12
+802,6
@@
static int __init init_smb_fs(void)
int err;
DEBUG1("registering ...\n");
int err;
DEBUG1("registering ...\n");
-#ifdef DEBUG_SMB_MALLOC
- smb_malloced = 0;
- smb_current_kmalloced = 0;
- smb_current_vmalloced = 0;
-#endif
-
err = init_inodecache();
if (err)
goto out_inode;
err = init_inodecache();
if (err)
goto out_inode;
@@
-837,11
+826,6
@@
static void __exit exit_smb_fs(void)
unregister_filesystem(&smb_fs_type);
smb_destroy_request_cache();
destroy_inodecache();
unregister_filesystem(&smb_fs_type);
smb_destroy_request_cache();
destroy_inodecache();
-#ifdef DEBUG_SMB_MALLOC
- printk(KERN_DEBUG "smb_malloced: %d\n", smb_malloced);
- printk(KERN_DEBUG "smb_current_kmalloced: %d\n",smb_current_kmalloced);
- printk(KERN_DEBUG "smb_current_vmalloced: %d\n",smb_current_vmalloced);
-#endif
}
module_init(init_smb_fs)
}
module_init(init_smb_fs)