mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
autofs: change catatonic setting to a bit flag
Change the superblock info. catatonic setting to be part of a flags bit field. Link: http://lkml.kernel.org/r/154296973142.9889.17275721668508589639.stgit@pluto-themaw-net Signed-off-by: Ian Kent <raven@themaw.net> Cc: Al Viro <viro@ZenIV.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9bf964c9ce
commit
9d8719a42e
5 changed files with 20 additions and 16 deletions
|
@ -103,16 +103,18 @@ struct autofs_wait_queue {
|
||||||
|
|
||||||
#define AUTOFS_SBI_MAGIC 0x6d4a556d
|
#define AUTOFS_SBI_MAGIC 0x6d4a556d
|
||||||
|
|
||||||
|
#define AUTOFS_SBI_CATATONIC 0x0001
|
||||||
|
|
||||||
struct autofs_sb_info {
|
struct autofs_sb_info {
|
||||||
u32 magic;
|
u32 magic;
|
||||||
int pipefd;
|
int pipefd;
|
||||||
struct file *pipe;
|
struct file *pipe;
|
||||||
struct pid *oz_pgrp;
|
struct pid *oz_pgrp;
|
||||||
int catatonic;
|
|
||||||
int version;
|
int version;
|
||||||
int sub_version;
|
int sub_version;
|
||||||
int min_proto;
|
int min_proto;
|
||||||
int max_proto;
|
int max_proto;
|
||||||
|
unsigned int flags;
|
||||||
unsigned long exp_timeout;
|
unsigned long exp_timeout;
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
struct super_block *sb;
|
struct super_block *sb;
|
||||||
|
@ -142,7 +144,8 @@ static inline struct autofs_info *autofs_dentry_ino(struct dentry *dentry)
|
||||||
*/
|
*/
|
||||||
static inline int autofs_oz_mode(struct autofs_sb_info *sbi)
|
static inline int autofs_oz_mode(struct autofs_sb_info *sbi)
|
||||||
{
|
{
|
||||||
return sbi->catatonic || task_pgrp(current) == sbi->oz_pgrp;
|
return ((sbi->flags & AUTOFS_SBI_CATATONIC) ||
|
||||||
|
task_pgrp(current) == sbi->oz_pgrp);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct inode *autofs_get_inode(struct super_block *, umode_t);
|
struct inode *autofs_get_inode(struct super_block *, umode_t);
|
||||||
|
|
|
@ -350,7 +350,7 @@ static int autofs_dev_ioctl_setpipefd(struct file *fp,
|
||||||
pipefd = param->setpipefd.pipefd;
|
pipefd = param->setpipefd.pipefd;
|
||||||
|
|
||||||
mutex_lock(&sbi->wq_mutex);
|
mutex_lock(&sbi->wq_mutex);
|
||||||
if (!sbi->catatonic) {
|
if (!(sbi->flags & AUTOFS_SBI_CATATONIC)) {
|
||||||
mutex_unlock(&sbi->wq_mutex);
|
mutex_unlock(&sbi->wq_mutex);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
} else {
|
} else {
|
||||||
|
@ -377,7 +377,7 @@ static int autofs_dev_ioctl_setpipefd(struct file *fp,
|
||||||
swap(sbi->oz_pgrp, new_pid);
|
swap(sbi->oz_pgrp, new_pid);
|
||||||
sbi->pipefd = pipefd;
|
sbi->pipefd = pipefd;
|
||||||
sbi->pipe = pipe;
|
sbi->pipe = pipe;
|
||||||
sbi->catatonic = 0;
|
sbi->flags &= ~AUTOFS_SBI_CATATONIC;
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
put_pid(new_pid);
|
put_pid(new_pid);
|
||||||
|
|
|
@ -227,12 +227,12 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
|
||||||
sbi->magic = AUTOFS_SBI_MAGIC;
|
sbi->magic = AUTOFS_SBI_MAGIC;
|
||||||
sbi->pipefd = -1;
|
sbi->pipefd = -1;
|
||||||
sbi->pipe = NULL;
|
sbi->pipe = NULL;
|
||||||
sbi->catatonic = 1;
|
|
||||||
sbi->exp_timeout = 0;
|
sbi->exp_timeout = 0;
|
||||||
sbi->oz_pgrp = NULL;
|
sbi->oz_pgrp = NULL;
|
||||||
sbi->sb = s;
|
sbi->sb = s;
|
||||||
sbi->version = 0;
|
sbi->version = 0;
|
||||||
sbi->sub_version = 0;
|
sbi->sub_version = 0;
|
||||||
|
sbi->flags = AUTOFS_SBI_CATATONIC;
|
||||||
set_autofs_type_indirect(&sbi->type);
|
set_autofs_type_indirect(&sbi->type);
|
||||||
sbi->min_proto = 0;
|
sbi->min_proto = 0;
|
||||||
sbi->max_proto = 0;
|
sbi->max_proto = 0;
|
||||||
|
@ -318,7 +318,7 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail_fput;
|
goto fail_fput;
|
||||||
sbi->pipe = pipe;
|
sbi->pipe = pipe;
|
||||||
sbi->catatonic = 0;
|
sbi->flags &= ~AUTOFS_SBI_CATATONIC;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Success! Install the root dentry now to indicate completion.
|
* Success! Install the root dentry now to indicate completion.
|
||||||
|
|
|
@ -510,7 +510,8 @@ static struct dentry *autofs_lookup(struct inode *dir,
|
||||||
sbi = autofs_sbi(dir->i_sb);
|
sbi = autofs_sbi(dir->i_sb);
|
||||||
|
|
||||||
pr_debug("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n",
|
pr_debug("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n",
|
||||||
current->pid, task_pgrp_nr(current), sbi->catatonic,
|
current->pid, task_pgrp_nr(current),
|
||||||
|
sbi->flags & AUTOFS_SBI_CATATONIC,
|
||||||
autofs_oz_mode(sbi));
|
autofs_oz_mode(sbi));
|
||||||
|
|
||||||
active = autofs_lookup_active(dentry);
|
active = autofs_lookup_active(dentry);
|
||||||
|
@ -563,7 +564,7 @@ static int autofs_dir_symlink(struct inode *dir,
|
||||||
* autofs mount is catatonic but the state of an autofs
|
* autofs mount is catatonic but the state of an autofs
|
||||||
* file system needs to be preserved over restarts.
|
* file system needs to be preserved over restarts.
|
||||||
*/
|
*/
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
BUG_ON(!ino);
|
BUG_ON(!ino);
|
||||||
|
@ -626,7 +627,7 @@ static int autofs_dir_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
* autofs mount is catatonic but the state of an autofs
|
* autofs mount is catatonic but the state of an autofs
|
||||||
* file system needs to be preserved over restarts.
|
* file system needs to be preserved over restarts.
|
||||||
*/
|
*/
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
if (atomic_dec_and_test(&ino->count)) {
|
if (atomic_dec_and_test(&ino->count)) {
|
||||||
|
@ -714,7 +715,7 @@ static int autofs_dir_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
* autofs mount is catatonic but the state of an autofs
|
* autofs mount is catatonic but the state of an autofs
|
||||||
* file system needs to be preserved over restarts.
|
* file system needs to be preserved over restarts.
|
||||||
*/
|
*/
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
spin_lock(&sbi->lookup_lock);
|
spin_lock(&sbi->lookup_lock);
|
||||||
|
@ -759,7 +760,7 @@ static int autofs_dir_mkdir(struct inode *dir,
|
||||||
* autofs mount is catatonic but the state of an autofs
|
* autofs mount is catatonic but the state of an autofs
|
||||||
* file system needs to be preserved over restarts.
|
* file system needs to be preserved over restarts.
|
||||||
*/
|
*/
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
pr_debug("dentry %p, creating %pd\n", dentry, dentry);
|
pr_debug("dentry %p, creating %pd\n", dentry, dentry);
|
||||||
|
|
|
@ -20,14 +20,14 @@ void autofs_catatonic_mode(struct autofs_sb_info *sbi)
|
||||||
struct autofs_wait_queue *wq, *nwq;
|
struct autofs_wait_queue *wq, *nwq;
|
||||||
|
|
||||||
mutex_lock(&sbi->wq_mutex);
|
mutex_lock(&sbi->wq_mutex);
|
||||||
if (sbi->catatonic) {
|
if (sbi->flags & AUTOFS_SBI_CATATONIC) {
|
||||||
mutex_unlock(&sbi->wq_mutex);
|
mutex_unlock(&sbi->wq_mutex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_debug("entering catatonic mode\n");
|
pr_debug("entering catatonic mode\n");
|
||||||
|
|
||||||
sbi->catatonic = 1;
|
sbi->flags |= AUTOFS_SBI_CATATONIC;
|
||||||
wq = sbi->queues;
|
wq = sbi->queues;
|
||||||
sbi->queues = NULL; /* Erase all wait queues */
|
sbi->queues = NULL; /* Erase all wait queues */
|
||||||
while (wq) {
|
while (wq) {
|
||||||
|
@ -255,7 +255,7 @@ static int validate_request(struct autofs_wait_queue **wait,
|
||||||
struct autofs_wait_queue *wq;
|
struct autofs_wait_queue *wq;
|
||||||
struct autofs_info *ino;
|
struct autofs_info *ino;
|
||||||
|
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
/* Wait in progress, continue; */
|
/* Wait in progress, continue; */
|
||||||
|
@ -290,7 +290,7 @@ static int validate_request(struct autofs_wait_queue **wait,
|
||||||
if (mutex_lock_interruptible(&sbi->wq_mutex))
|
if (mutex_lock_interruptible(&sbi->wq_mutex))
|
||||||
return -EINTR;
|
return -EINTR;
|
||||||
|
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
wq = autofs_find_wait(sbi, qstr);
|
wq = autofs_find_wait(sbi, qstr);
|
||||||
|
@ -359,7 +359,7 @@ int autofs_wait(struct autofs_sb_info *sbi,
|
||||||
pid_t tgid;
|
pid_t tgid;
|
||||||
|
|
||||||
/* In catatonic mode, we don't wait for nobody */
|
/* In catatonic mode, we don't wait for nobody */
|
||||||
if (sbi->catatonic)
|
if (sbi->flags & AUTOFS_SBI_CATATONIC)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue