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
sh: convert /proc/cpu/aligmnent, /proc/cpu/kernel_alignment to seq_file
[safe/jmp/linux-2.6]
/
fs
/
afs
/
super.c
diff --git
a/fs/afs/super.c
b/fs/afs/super.c
index
993cdf1
..
e1ea1c2
100644
(file)
--- a/
fs/afs/super.c
+++ b/
fs/afs/super.c
@@
-10,7
+10,7
@@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Authors: David Howells <dhowells@redhat.com>
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Authors: David Howells <dhowells@redhat.com>
- * David Woodhouse <dwmw2@
redhat.com
>
+ * David Woodhouse <dwmw2@
infradead.org
>
*
*/
*
*/
@@
-18,6
+18,7
@@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
+#include <linux/smp_lock.h>
#include <linux/fs.h>
#include <linux/pagemap.h>
#include <linux/parser.h>
#include <linux/fs.h>
#include <linux/pagemap.h>
#include <linux/parser.h>
@@
-27,8
+28,7
@@
#define AFS_FS_MAGIC 0x6B414653 /* 'kAFS' */
#define AFS_FS_MAGIC 0x6B414653 /* 'kAFS' */
-static void afs_i_init_once(void *foo, struct kmem_cache *cachep,
- unsigned long flags);
+static void afs_i_init_once(void *foo);
static int afs_get_sb(struct file_system_type *fs_type,
int flags, const char *dev_name,
void *data, struct vfsmount *mnt);
static int afs_get_sb(struct file_system_type *fs_type,
int flags, const char *dev_name,
void *data, struct vfsmount *mnt);
@@
-51,8
+51,8
@@
static const struct super_operations afs_super_ops = {
.write_inode = afs_write_inode,
.destroy_inode = afs_destroy_inode,
.clear_inode = afs_clear_inode,
.write_inode = afs_write_inode,
.destroy_inode = afs_destroy_inode,
.clear_inode = afs_clear_inode,
- .umount_begin = afs_umount_begin,
.put_super = afs_put_super,
.put_super = afs_put_super,
+ .show_options = generic_show_options,
};
static struct kmem_cache *afs_inode_cachep;
};
static struct kmem_cache *afs_inode_cachep;
@@
-65,7
+65,7
@@
enum {
afs_opt_vol,
};
afs_opt_vol,
};
-static match_table_t afs_options_list = {
+static
const
match_table_t afs_options_list = {
{ afs_opt_cell, "cell=%s" },
{ afs_opt_rwpath, "rwpath" },
{ afs_opt_vol, "vol=%s" },
{ afs_opt_cell, "cell=%s" },
{ afs_opt_rwpath, "rwpath" },
{ afs_opt_vol, "vol=%s" },
@@
-89,8
+89,7
@@
int __init afs_fs_init(void)
sizeof(struct afs_vnode),
0,
SLAB_HWCACHE_ALIGN,
sizeof(struct afs_vnode),
0,
SLAB_HWCACHE_ALIGN,
- afs_i_init_once,
- NULL);
+ afs_i_init_once);
if (!afs_inode_cachep) {
printk(KERN_NOTICE "kAFS: Failed to allocate inode cache\n");
return ret;
if (!afs_inode_cachep) {
printk(KERN_NOTICE "kAFS: Failed to allocate inode cache\n");
return ret;
@@
-359,6
+358,7
@@
static int afs_get_sb(struct file_system_type *fs_type,
struct super_block *sb;
struct afs_volume *vol;
struct key *key;
struct super_block *sb;
struct afs_volume *vol;
struct key *key;
+ char *new_opts = kstrdup(options, GFP_KERNEL);
int ret;
_enter(",,%s,%p", dev_name, options);
int ret;
_enter(",,%s,%p", dev_name, options);
@@
-406,10
+406,10
@@
static int afs_get_sb(struct file_system_type *fs_type,
sb->s_flags = flags;
ret = afs_fill_super(sb, ¶ms);
if (ret < 0) {
sb->s_flags = flags;
ret = afs_fill_super(sb, ¶ms);
if (ret < 0) {
- up_write(&sb->s_umount);
- deactivate_super(sb);
+ deactivate_locked_super(sb);
goto error;
}
goto error;
}
+ save_mount_options(sb, new_opts);
sb->s_flags |= MS_ACTIVE;
} else {
_debug("reuse");
sb->s_flags |= MS_ACTIVE;
} else {
_debug("reuse");
@@
-419,6
+419,7
@@
static int afs_get_sb(struct file_system_type *fs_type,
simple_set_mnt(mnt, sb);
afs_put_volume(params.volume);
afs_put_cell(params.cell);
simple_set_mnt(mnt, sb);
afs_put_volume(params.volume);
afs_put_cell(params.cell);
+ kfree(new_opts);
_leave(" = 0 [%p]", sb);
return 0;
_leave(" = 0 [%p]", sb);
return 0;
@@
-426,6
+427,7
@@
error:
afs_put_volume(params.volume);
afs_put_cell(params.cell);
key_put(params.key);
afs_put_volume(params.volume);
afs_put_cell(params.cell);
key_put(params.key);
+ kfree(new_opts);
_leave(" = %d", ret);
return ret;
}
_leave(" = %d", ret);
return ret;
}
@@
-439,16
+441,19
@@
static void afs_put_super(struct super_block *sb)
_enter("");
_enter("");
+ lock_kernel();
+
afs_put_volume(as->volume);
afs_put_volume(as->volume);
+ unlock_kernel();
+
_leave("");
}
/*
* initialise an inode cache slab element prior to any use
*/
_leave("");
}
/*
* initialise an inode cache slab element prior to any use
*/
-static void afs_i_init_once(void *_vnode, struct kmem_cache *cachep,
- unsigned long flags)
+static void afs_i_init_once(void *_vnode)
{
struct afs_vnode *vnode = _vnode;
{
struct afs_vnode *vnode = _vnode;