mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-30 11:04:25 +00:00
Bury __put_super_and_need_restart()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
79893c17b4
commit
35cf7ba0b4
5 changed files with 6 additions and 31 deletions
|
@ -8,6 +8,7 @@
|
||||||
#include <linux/writeback.h>
|
#include <linux/writeback.h>
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
/* A global variable is a bit ugly, but it keeps the code simple */
|
/* A global variable is a bit ugly, but it keeps the code simple */
|
||||||
int sysctl_drop_caches;
|
int sysctl_drop_caches;
|
||||||
|
|
|
@ -87,6 +87,8 @@ extern struct file *get_empty_filp(void);
|
||||||
* super.c
|
* super.c
|
||||||
*/
|
*/
|
||||||
extern int do_remount_sb(struct super_block *, int, void *, int);
|
extern int do_remount_sb(struct super_block *, int, void *, int);
|
||||||
|
extern void __put_super(struct super_block *sb);
|
||||||
|
extern void put_super(struct super_block *sb);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* open.c
|
* open.c
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/quotaops.h>
|
#include <linux/quotaops.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/writeback.h>
|
#include <linux/writeback.h>
|
||||||
|
#include "../internal.h"
|
||||||
|
|
||||||
static int check_quotactl_permission(struct super_block *sb, int type, int cmd,
|
static int check_quotactl_permission(struct super_block *sb, int type, int cmd,
|
||||||
qid_t id)
|
qid_t id)
|
||||||
|
|
30
fs/super.c
30
fs/super.c
|
@ -127,40 +127,14 @@ static inline void destroy_super(struct super_block *s)
|
||||||
/* Superblock refcounting */
|
/* Superblock refcounting */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Drop a superblock's refcount. Returns non-zero if the superblock was
|
* Drop a superblock's refcount. The caller must hold sb_lock.
|
||||||
* destroyed. The caller must hold sb_lock.
|
|
||||||
*/
|
*/
|
||||||
int __put_super(struct super_block *sb)
|
void __put_super(struct super_block *sb)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (!--sb->s_count) {
|
if (!--sb->s_count) {
|
||||||
list_del_init(&sb->s_list);
|
list_del_init(&sb->s_list);
|
||||||
destroy_super(sb);
|
destroy_super(sb);
|
||||||
ret = 1;
|
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Drop a superblock's refcount.
|
|
||||||
* Returns non-zero if the superblock is about to be destroyed and
|
|
||||||
* at least is already removed from super_blocks list, so if we are
|
|
||||||
* making a loop through super blocks then we need to restart.
|
|
||||||
* The caller must hold sb_lock.
|
|
||||||
*/
|
|
||||||
int __put_super_and_need_restart(struct super_block *sb)
|
|
||||||
{
|
|
||||||
/* check for race with generic_shutdown_super() */
|
|
||||||
if (list_empty(&sb->s_instances)) {
|
|
||||||
/* super block is removed, need to restart... */
|
|
||||||
__put_super(sb);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/* can't be the last, since s_list is still in use */
|
|
||||||
sb->s_count--;
|
|
||||||
BUG_ON(sb->s_count == 0);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1778,9 +1778,6 @@ extern int get_sb_pseudo(struct file_system_type *, char *,
|
||||||
const struct super_operations *ops, unsigned long,
|
const struct super_operations *ops, unsigned long,
|
||||||
struct vfsmount *mnt);
|
struct vfsmount *mnt);
|
||||||
extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
|
extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
|
||||||
int __put_super_and_need_restart(struct super_block *sb);
|
|
||||||
int __put_super(struct super_block *sb);
|
|
||||||
void put_super(struct super_block *sb);
|
|
||||||
|
|
||||||
/* Alas, no aliases. Too much hassle with bringing module.h everywhere */
|
/* Alas, no aliases. Too much hassle with bringing module.h everywhere */
|
||||||
#define fops_get(fops) \
|
#define fops_get(fops) \
|
||||||
|
|
Loading…
Add table
Reference in a new issue