/* Tries to acquire an active reference. grab_super() is used when we had just found a superblock in super_blocks or fs_type->fs_supers and want to turn it into a full-blown active reference. grab_super() is called with sb_lock held and drops it. Returns 1 in case of success, 0 if we had failed (superblock contents was already dead or dying when grab_super() had been called).  */
static int grab_super(struct super_block *s) __releases(sb_lock)
/* Tries to acquire an active reference. grab_super() is used when we had just found a superblock in super_blocks or fs_type->fs_supers and want to turn it into a full-blown active reference. grab_super() is called with sb_lock held and drops it. Returns 1 in case of success, 0 if we had failed (superblock contents was already dead or dying when grab_super() had been called).  */
static int grab_super(struct super_block *s) __releases(sb_lock)
{
	s->s_count++;
	spin_unlock(&sb_lock);
	down_write(&s->s_umount);
	if (s->s_root) {
		spin_lock(&sb_lock);
		if (s->s_count > S_BIAS) {
			atomic_inc(&s->s_active);
			s->s_count--;
			spin_unlock(&sb_lock);
			return 1;
		}
		spin_unlock(&sb_lock);
	}
	up_write(&s->s_umount);
	put_super(s);
	yield();
	return 0;
}