mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 19:49:33 -04:00
nfsd: allow state with no file to appear in /proc/fs/nfsd/clients/*/states
Change the "show" functions to show some content even if a file cannot be found. This is the case for admin-revoked state. This is primarily useful for debugging - to ensure states are being removed eventually. So change several seq_printf() to seq_puts(). Some of these are needed to keep checkpatch happy. Others were done for consistency. Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
@@ -2554,9 +2554,9 @@ static struct nfs4_client *get_nfsdfs_clp(struct inode *inode)
|
||||
|
||||
static void seq_quote_mem(struct seq_file *m, char *data, int len)
|
||||
{
|
||||
seq_printf(m, "\"");
|
||||
seq_puts(m, "\"");
|
||||
seq_escape_mem(m, data, len, ESCAPE_HEX | ESCAPE_NAP | ESCAPE_APPEND, "\"\\");
|
||||
seq_printf(m, "\"");
|
||||
seq_puts(m, "\"");
|
||||
}
|
||||
|
||||
static const char *cb_state2str(int state)
|
||||
@@ -2597,14 +2597,14 @@ static int client_info_show(struct seq_file *m, void *v)
|
||||
seq_puts(m, "status: unconfirmed\n");
|
||||
seq_printf(m, "seconds from last renew: %lld\n",
|
||||
ktime_get_boottime_seconds() - clp->cl_time);
|
||||
seq_printf(m, "name: ");
|
||||
seq_puts(m, "name: ");
|
||||
seq_quote_mem(m, clp->cl_name.data, clp->cl_name.len);
|
||||
seq_printf(m, "\nminor version: %d\n", clp->cl_minorversion);
|
||||
if (clp->cl_nii_domain.data) {
|
||||
seq_printf(m, "Implementation domain: ");
|
||||
seq_puts(m, "Implementation domain: ");
|
||||
seq_quote_mem(m, clp->cl_nii_domain.data,
|
||||
clp->cl_nii_domain.len);
|
||||
seq_printf(m, "\nImplementation name: ");
|
||||
seq_puts(m, "\nImplementation name: ");
|
||||
seq_quote_mem(m, clp->cl_nii_name.data, clp->cl_nii_name.len);
|
||||
seq_printf(m, "\nImplementation time: [%lld, %ld]\n",
|
||||
clp->cl_nii_time.tv_sec, clp->cl_nii_time.tv_nsec);
|
||||
@@ -2671,7 +2671,7 @@ static void nfs4_show_superblock(struct seq_file *s, struct nfsd_file *f)
|
||||
|
||||
static void nfs4_show_owner(struct seq_file *s, struct nfs4_stateowner *oo)
|
||||
{
|
||||
seq_printf(s, "owner: ");
|
||||
seq_puts(s, "owner: ");
|
||||
seq_quote_mem(s, oo->so_owner.data, oo->so_owner.len);
|
||||
}
|
||||
|
||||
@@ -2689,20 +2689,13 @@ static int nfs4_show_open(struct seq_file *s, struct nfs4_stid *st)
|
||||
struct nfs4_stateowner *oo;
|
||||
unsigned int access, deny;
|
||||
|
||||
if (st->sc_type != SC_TYPE_OPEN && st->sc_type != SC_TYPE_LOCK)
|
||||
return 0; /* XXX: or SEQ_SKIP? */
|
||||
ols = openlockstateid(st);
|
||||
oo = ols->st_stateowner;
|
||||
nf = st->sc_file;
|
||||
|
||||
spin_lock(&nf->fi_lock);
|
||||
file = find_any_file_locked(nf);
|
||||
if (!file)
|
||||
goto out;
|
||||
|
||||
seq_printf(s, "- ");
|
||||
seq_puts(s, "- ");
|
||||
nfs4_show_stateid(s, &st->sc_stateid);
|
||||
seq_printf(s, ": { type: open, ");
|
||||
seq_puts(s, ": { type: open, ");
|
||||
|
||||
access = bmap_to_share_mode(ols->st_access_bmap);
|
||||
deny = bmap_to_share_mode(ols->st_deny_bmap);
|
||||
@@ -2714,14 +2707,17 @@ static int nfs4_show_open(struct seq_file *s, struct nfs4_stid *st)
|
||||
deny & NFS4_SHARE_ACCESS_READ ? "r" : "-",
|
||||
deny & NFS4_SHARE_ACCESS_WRITE ? "w" : "-");
|
||||
|
||||
nfs4_show_superblock(s, file);
|
||||
seq_printf(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
seq_printf(s, ", ");
|
||||
nfs4_show_owner(s, oo);
|
||||
seq_printf(s, " }\n");
|
||||
out:
|
||||
spin_lock(&nf->fi_lock);
|
||||
file = find_any_file_locked(nf);
|
||||
if (file) {
|
||||
nfs4_show_superblock(s, file);
|
||||
seq_puts(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
seq_puts(s, ", ");
|
||||
}
|
||||
spin_unlock(&nf->fi_lock);
|
||||
nfs4_show_owner(s, oo);
|
||||
seq_puts(s, " }\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2735,30 +2731,29 @@ static int nfs4_show_lock(struct seq_file *s, struct nfs4_stid *st)
|
||||
ols = openlockstateid(st);
|
||||
oo = ols->st_stateowner;
|
||||
nf = st->sc_file;
|
||||
|
||||
seq_puts(s, "- ");
|
||||
nfs4_show_stateid(s, &st->sc_stateid);
|
||||
seq_puts(s, ": { type: lock, ");
|
||||
|
||||
spin_lock(&nf->fi_lock);
|
||||
file = find_any_file_locked(nf);
|
||||
if (!file)
|
||||
goto out;
|
||||
if (file) {
|
||||
/*
|
||||
* Note: a lock stateid isn't really the same thing as a lock,
|
||||
* it's the locking state held by one owner on a file, and there
|
||||
* may be multiple (or no) lock ranges associated with it.
|
||||
* (Same for the matter is true of open stateids.)
|
||||
*/
|
||||
|
||||
seq_printf(s, "- ");
|
||||
nfs4_show_stateid(s, &st->sc_stateid);
|
||||
seq_printf(s, ": { type: lock, ");
|
||||
|
||||
/*
|
||||
* Note: a lock stateid isn't really the same thing as a lock,
|
||||
* it's the locking state held by one owner on a file, and there
|
||||
* may be multiple (or no) lock ranges associated with it.
|
||||
* (Same for the matter is true of open stateids.)
|
||||
*/
|
||||
|
||||
nfs4_show_superblock(s, file);
|
||||
/* XXX: open stateid? */
|
||||
seq_printf(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
seq_printf(s, ", ");
|
||||
nfs4_show_superblock(s, file);
|
||||
/* XXX: open stateid? */
|
||||
seq_puts(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
seq_puts(s, ", ");
|
||||
}
|
||||
nfs4_show_owner(s, oo);
|
||||
seq_printf(s, " }\n");
|
||||
out:
|
||||
seq_puts(s, " }\n");
|
||||
spin_unlock(&nf->fi_lock);
|
||||
return 0;
|
||||
}
|
||||
@@ -2771,25 +2766,25 @@ static int nfs4_show_deleg(struct seq_file *s, struct nfs4_stid *st)
|
||||
|
||||
ds = delegstateid(st);
|
||||
nf = st->sc_file;
|
||||
spin_lock(&nf->fi_lock);
|
||||
file = nf->fi_deleg_file;
|
||||
if (!file)
|
||||
goto out;
|
||||
|
||||
seq_printf(s, "- ");
|
||||
seq_puts(s, "- ");
|
||||
nfs4_show_stateid(s, &st->sc_stateid);
|
||||
seq_printf(s, ": { type: deleg, ");
|
||||
seq_puts(s, ": { type: deleg, ");
|
||||
|
||||
seq_printf(s, "access: %s, ",
|
||||
ds->dl_type == NFS4_OPEN_DELEGATE_READ ? "r" : "w");
|
||||
seq_printf(s, "access: %s",
|
||||
ds->dl_type == NFS4_OPEN_DELEGATE_READ ? "r" : "w");
|
||||
|
||||
/* XXX: lease time, whether it's being recalled. */
|
||||
|
||||
nfs4_show_superblock(s, file);
|
||||
seq_printf(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
seq_printf(s, " }\n");
|
||||
out:
|
||||
spin_lock(&nf->fi_lock);
|
||||
file = nf->fi_deleg_file;
|
||||
if (file) {
|
||||
seq_puts(s, ", ");
|
||||
nfs4_show_superblock(s, file);
|
||||
seq_puts(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
}
|
||||
seq_puts(s, " }\n");
|
||||
spin_unlock(&nf->fi_lock);
|
||||
return 0;
|
||||
}
|
||||
@@ -2802,16 +2797,19 @@ static int nfs4_show_layout(struct seq_file *s, struct nfs4_stid *st)
|
||||
ls = container_of(st, struct nfs4_layout_stateid, ls_stid);
|
||||
file = ls->ls_file;
|
||||
|
||||
seq_printf(s, "- ");
|
||||
seq_puts(s, "- ");
|
||||
nfs4_show_stateid(s, &st->sc_stateid);
|
||||
seq_printf(s, ": { type: layout, ");
|
||||
seq_puts(s, ": { type: layout");
|
||||
|
||||
/* XXX: What else would be useful? */
|
||||
|
||||
nfs4_show_superblock(s, file);
|
||||
seq_printf(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
seq_printf(s, " }\n");
|
||||
if (file) {
|
||||
seq_puts(s, ", ");
|
||||
nfs4_show_superblock(s, file);
|
||||
seq_puts(s, ", ");
|
||||
nfs4_show_fname(s, file);
|
||||
}
|
||||
seq_puts(s, " }\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user