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/sysctl.h>
 | 
			
		||||
#include <linux/gfp.h>
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
/* A global variable is a bit ugly, but it keeps the code simple */
 | 
			
		||||
int sysctl_drop_caches;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,6 +87,8 @@ extern struct file *get_empty_filp(void);
 | 
			
		|||
 * super.c
 | 
			
		||||
 */
 | 
			
		||||
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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
#include <linux/quotaops.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/writeback.h>
 | 
			
		||||
#include "../internal.h"
 | 
			
		||||
 | 
			
		||||
static int check_quotactl_permission(struct super_block *sb, int type, int cmd,
 | 
			
		||||
				     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  */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Drop a superblock's refcount.  Returns non-zero if the superblock was
 | 
			
		||||
 * destroyed.  The caller must hold sb_lock.
 | 
			
		||||
 * Drop a superblock's refcount.  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) {
 | 
			
		||||
		list_del_init(&sb->s_list);
 | 
			
		||||
		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,
 | 
			
		||||
	struct vfsmount *mnt);
 | 
			
		||||
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 */
 | 
			
		||||
#define fops_get(fops) \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue