X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fnodemap_lproc.c;h=fa6a6a7f455e21da8c3b961a4451e8911d39d574;hb=3be9beb00e7cca9d758b364a85537b0631dddc12;hp=e5c4b0ca97cea41eead407416aefc41c7d3d7741;hpb=0754bc8f2623bea184111af216f7567608db35b6;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/nodemap_lproc.c b/lustre/ptlrpc/nodemap_lproc.c index e5c4b0c..fa6a6a7 100644 --- a/lustre/ptlrpc/nodemap_lproc.c +++ b/lustre/ptlrpc/nodemap_lproc.c @@ -37,12 +37,6 @@ #include #include "nodemap_internal.h" -/* Turn on proc debug interface to allow OSS and - * MDS nodes to configure nodemap independently of - * MGS (since the nodemap distribution is not written - * yet */ -#define NODEMAP_PROC_DEBUG 1 - static LIST_HEAD(nodemap_pde_list); /** @@ -174,6 +168,61 @@ static int nodemap_ranges_open(struct inode *inode, struct file *file) } /** + * Reads and prints the fileset for the given nodemap. + * + * \param m seq file in proc fs + * \param data unused + * \retval 0 success + */ +static int nodemap_fileset_seq_show(struct seq_file *m, void *data) +{ + struct lu_nodemap *nodemap; + int rc; + + mutex_lock(&active_config_lock); + nodemap = nodemap_lookup(m->private); + mutex_unlock(&active_config_lock); + if (IS_ERR(nodemap)) { + rc = PTR_ERR(nodemap); + CERROR("cannot find nodemap '%s': rc = %d\n", + (char *)m->private, rc); + return rc; + } + + rc = seq_printf(m, "%s\n", nodemap->nm_fileset); + nodemap_putref(nodemap); + return rc; +} + +/** + * Set a fileset on a nodemap. + * + * \param[in] file proc file + * \param[in] buffer string, "" + * \param[in] count \a buffer length + * \param[in] off unused + * \retval \a count on success + * \retval negative number on error + */ +static ssize_t +nodemap_fileset_seq_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *off) +{ + struct seq_file *m = file->private_data; + int rc = 0; + + if (count > 0) + rc = nodemap_set_fileset(m->private, buffer); + + if (rc != 0) + return -EINVAL; + + return count; +} +LPROC_SEQ_FOPS(nodemap_fileset); + +/** * Reads and prints the exports attached to the given nodemap. * * \param m seq file in proc fs, stores nodemap @@ -239,7 +288,8 @@ static int nodemap_exports_open(struct inode *inode, struct file *file) */ static int nodemap_active_seq_show(struct seq_file *m, void *data) { - return seq_printf(m, "%u\n", (unsigned int)nodemap_active); + seq_printf(m, "%u\n", (unsigned int)nodemap_active); + return 0; } /** @@ -290,21 +340,20 @@ LPROC_SEQ_FOPS(nodemap_active); static int nodemap_id_seq_show(struct seq_file *m, void *data) { struct lu_nodemap *nodemap; - int rc; mutex_lock(&active_config_lock); nodemap = nodemap_lookup(m->private); mutex_unlock(&active_config_lock); if (IS_ERR(nodemap)) { - rc = PTR_ERR(nodemap); + int rc = PTR_ERR(nodemap); CERROR("cannot find nodemap '%s': rc = %d\n", (char *)m->private, rc); return rc; } - rc = seq_printf(m, "%u\n", nodemap->nm_id); + seq_printf(m, "%u\n", nodemap->nm_id); nodemap_putref(nodemap); - return rc; + return 0; } LPROC_SEQ_FOPS_RO(nodemap_id); @@ -318,21 +367,20 @@ LPROC_SEQ_FOPS_RO(nodemap_id); static int nodemap_squash_uid_seq_show(struct seq_file *m, void *data) { struct lu_nodemap *nodemap; - int rc; mutex_lock(&active_config_lock); nodemap = nodemap_lookup(m->private); mutex_unlock(&active_config_lock); if (IS_ERR(nodemap)) { - rc = PTR_ERR(nodemap); + int rc = PTR_ERR(nodemap); CERROR("cannot find nodemap '%s': rc = %d\n", (char *)m->private, rc); return rc; } - rc = seq_printf(m, "%u\n", nodemap->nm_squash_uid); + seq_printf(m, "%u\n", nodemap->nm_squash_uid); nodemap_putref(nodemap); - return rc; + return 0; } /** @@ -345,21 +393,20 @@ static int nodemap_squash_uid_seq_show(struct seq_file *m, void *data) static int nodemap_squash_gid_seq_show(struct seq_file *m, void *data) { struct lu_nodemap *nodemap; - int rc; mutex_lock(&active_config_lock); nodemap = nodemap_lookup(m->private); mutex_unlock(&active_config_lock); if (IS_ERR(nodemap)) { - rc = PTR_ERR(nodemap); + int rc = PTR_ERR(nodemap); CERROR("cannot find nodemap '%s': rc = %d\n", (char *)m->private, rc); return rc; } - rc = seq_printf(m, "%u\n", nodemap->nm_squash_gid); + seq_printf(m, "%u\n", nodemap->nm_squash_gid); nodemap_putref(nodemap); - return rc; + return 0; } /** @@ -372,21 +419,21 @@ static int nodemap_squash_gid_seq_show(struct seq_file *m, void *data) static int nodemap_trusted_seq_show(struct seq_file *m, void *data) { struct lu_nodemap *nodemap; - int rc; mutex_lock(&active_config_lock); nodemap = nodemap_lookup(m->private); mutex_unlock(&active_config_lock); if (IS_ERR(nodemap)) { - rc = PTR_ERR(nodemap); + int rc = PTR_ERR(nodemap); + CERROR("cannot find nodemap '%s': rc = %d\n", (char *)m->private, rc); return rc; } - rc = seq_printf(m, "%d\n", (int)nodemap->nmf_trust_client_ids); + seq_printf(m, "%d\n", (int)nodemap->nmf_trust_client_ids); nodemap_putref(nodemap); - return rc; + return 0; } /** @@ -411,9 +458,9 @@ static int nodemap_admin_seq_show(struct seq_file *m, void *data) return rc; } - rc = seq_printf(m, "%d\n", (int)nodemap->nmf_allow_root_access); + seq_printf(m, "%d\n", (int)nodemap->nmf_allow_root_access); nodemap_putref(nodemap); - return rc; + return 0; } #ifdef NODEMAP_PROC_DEBUG @@ -1067,6 +1114,10 @@ static struct lprocfs_vars lprocfs_nodemap_vars[] = { .fops = &nodemap_ranges_fops, }, { + .name = "fileset", + .fops = &nodemap_fileset_fops, + }, + { .name = "exports", .fops = &nodemap_exports_fops, },