From: sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org
To: "Serge E. Hallyn" <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: kyle-hoO6YkzgTuCM0SS3m2neIg@public.gmane.org,
bastian-yyjItF7Rl6lg9hUCZPvPmw@public.gmane.org,
ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org,
hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org,
containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org,
xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org,
alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org
Subject: Re: [PATCH 02/10] Per-mount allocated_ptys
Date: Fri, 26 Sep 2008 18:12:22 -0700 [thread overview]
Message-ID: <20080927011222.GB2161@us.ibm.com> (raw)
In-Reply-To: <20080924171408.GB25255-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Serge E. Hallyn [serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org] wrote:
| Quoting sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org (sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org):
| >
| > >From bdba42b68e2b6765615618fce7eb7d4c6f75685d Mon Sep 17 00:00:00 2001
| > From: Sukadev Bhattiprolu <sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
| > Date: Tue, 9 Sep 2008 10:22:11 -0700
| > Subject: [PATCH 02/10] Per-mount allocated_ptys
| >
| > To enable multiple mounts of devpts, 'allocated_ptys' must be a per-mount
| > variable rather than a global variable. Move 'allocated_ptys' into the
| > super_block's s_fs_info.
| >
| > Changelog[v2]:
| > Define and use DEVPTS_SB() wrapper.
| >
| > Signed-off-by: Sukadev Bhattiprolu <sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
| > ---
| > fs/devpts/inode.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++------
| > 1 files changed, 48 insertions(+), 7 deletions(-)
| >
| > diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
| > index ec33833..6e63db7 100644
| > --- a/fs/devpts/inode.c
| > +++ b/fs/devpts/inode.c
| > @@ -30,7 +30,6 @@
| > #define PTMX_MINOR 2
| >
| > extern int pty_limit; /* Config limit on Unix98 ptys */
| > -static DEFINE_IDA(allocated_ptys);
| > static DEFINE_MUTEX(allocated_ptys_lock);
| >
| > static struct vfsmount *devpts_mnt;
| > @@ -55,6 +54,15 @@ static match_table_t tokens = {
| > {Opt_err, NULL}
| > };
| >
| > +struct pts_fs_info {
| > + struct ida allocated_ptys;
| > +};
| > +
| > +static inline struct pts_fs_info *DEVPTS_SB(struct super_block *sb)
|
| This is an odd name... how about DEVPTS_SBINFO or DEVPTS_SB_IDA?
I was just following established tradition :-)
EXT4_SB(), EXT3_SB(), EXT2_SB(), REISERFS_SB(), NFS_SB()
I don't mind DEVPTS_SBINFO(), but since this will soon have more than
just an ida, DEVPTS_SB_IDA() may not work.
|
| > +{
| > + return sb->s_fs_info;
| > +}
| > +
| > static inline struct super_block *pts_sb_from_inode(struct inode *inode)
| > {
| > if (inode->i_sb->s_magic == DEVPTS_SUPER_MAGIC)
| > @@ -126,6 +134,19 @@ static const struct super_operations devpts_sops = {
| > .show_options = devpts_show_options,
| > };
| >
| > +static void *new_pts_fs_info(void)
| > +{
| > + struct pts_fs_info *fsi;
| > +
| > + fsi = kzalloc(sizeof(struct pts_fs_info), GFP_KERNEL);
| > + if (!fsi)
| > + return NULL;
| > +
| > + ida_init(&fsi->allocated_ptys);
| > +
| > + return fsi;
| > +}
| > +
| > static int
| > devpts_fill_super(struct super_block *s, void *data, int silent)
| > {
| > @@ -137,9 +158,13 @@ devpts_fill_super(struct super_block *s, void *data, int silent)
| > s->s_op = &devpts_sops;
| > s->s_time_gran = 1;
| >
| > + s->s_fs_info = new_pts_fs_info();
| > + if (!s->s_fs_info)
| > + goto fail;
| > +
| > inode = new_inode(s);
| > if (!inode)
| > - goto fail;
| > + goto free_fsi;
| > inode->i_ino = 1;
| > inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
| > inode->i_blocks = 0;
| > @@ -155,6 +180,9 @@ devpts_fill_super(struct super_block *s, void *data, int silent)
| >
| > printk("devpts: get root dentry failed\n");
| > iput(inode);
| > +
| > +free_fsi:
| > + kfree(s->s_fs_info);
| > fail:
| > return -ENOMEM;
| > }
| > @@ -165,11 +193,19 @@ static int devpts_get_sb(struct file_system_type *fs_type,
| > return get_sb_single(fs_type, flags, data, devpts_fill_super, mnt);
| > }
| >
| > +static void devpts_kill_sb(struct super_block *sb)
| > +{
| > + struct pts_fs_info *fsi = DEVPTS_SB(sb);
| > +
|
| don't you need to ida_destroy(fsi->allocated_ptys) ?
I had it before, but since all ptys must be destroyed, and ida_remove()
frees the pages as necessary and ida_init() does not alloc memory, I had
commented it out and later removed it. Let me check again.
|
| > + kfree(fsi);
| > + kill_anon_super(sb);
| > +}
| > +
| > static struct file_system_type devpts_fs_type = {
| > .owner = THIS_MODULE,
| > .name = "devpts",
| > .get_sb = devpts_get_sb,
| > - .kill_sb = kill_anon_super,
| > + .kill_sb = devpts_kill_sb,
| > };
| >
| > /*
| > @@ -179,16 +215,18 @@ static struct file_system_type devpts_fs_type = {
| >
| > int devpts_new_index(struct inode *ptmx_inode)
| > {
| > + struct super_block *sb = pts_sb_from_inode(ptmx_inode);
| > + struct pts_fs_info *fsi = DEVPTS_SB(sb);
| > int index;
| > int ida_ret;
| >
| > retry:
| > - if (!ida_pre_get(&allocated_ptys, GFP_KERNEL)) {
| > + if (!ida_pre_get(&fsi->allocated_ptys, GFP_KERNEL)) {
| > return -ENOMEM;
| > }
| >
| > mutex_lock(&allocated_ptys_lock);
| > - ida_ret = ida_get_new(&allocated_ptys, &index);
| > + ida_ret = ida_get_new(&fsi->allocated_ptys, &index);
| > if (ida_ret < 0) {
| > mutex_unlock(&allocated_ptys_lock);
| > if (ida_ret == -EAGAIN)
| > @@ -197,7 +235,7 @@ retry:
| > }
| >
| > if (index >= pty_limit) {
| > - ida_remove(&allocated_ptys, index);
| > + ida_remove(&fsi->allocated_ptys, index);
| > mutex_unlock(&allocated_ptys_lock);
| > return -EIO;
| > }
| > @@ -207,8 +245,11 @@ retry:
| >
| > void devpts_kill_index(struct inode *ptmx_inode, int idx)
| > {
| > + struct super_block *sb = pts_sb_from_inode(ptmx_inode);
| > + struct pts_fs_info *fsi = DEVPTS_SB(sb);
| > +
| > mutex_lock(&allocated_ptys_lock);
| > - ida_remove(&allocated_ptys, idx);
| > + ida_remove(&fsi->allocated_ptys, idx);
| > mutex_unlock(&allocated_ptys_lock);
| > }
| >
| > --
| > 1.5.2.5
next prev parent reply other threads:[~2008-09-27 1:12 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-12 17:48 [PATCH 0/10][v4]: Enable multiple devpts instances sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912174845.GA17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-12 17:50 ` [PATCH 01/10] Remove devpts_root global sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175057.GB17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 17:04 ` Serge E. Hallyn
2008-09-12 17:51 ` [PATCH 02/10] Per-mount allocated_ptys sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175116.GC17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 17:14 ` Serge E. Hallyn
[not found] ` <20080924171408.GB25255-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-27 1:12 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8 [this message]
2008-09-12 17:51 ` [PATCH 03/10] Per-mount 'config' object sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175135.GD17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 17:20 ` Serge E. Hallyn
2008-09-12 17:51 ` [PATCH 04/10] Extract option parsing to new function sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175153.GE17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 17:23 ` Serge E. Hallyn
2008-09-12 17:52 ` [PATCH 05/10] Add DEVPTS_MULTIPLE_INSTANCES config token sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175210.GF17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 17:24 ` Serge E. Hallyn
2008-09-12 17:52 ` [PATCH 06/10] Define mknod_ptmx() sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175237.GG17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 18:21 ` Serge E. Hallyn
[not found] ` <20080924182125.GF25255-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-26 21:32 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
2008-09-24 18:50 ` Serge E. Hallyn
[not found] ` <20080924185046.GA31535-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-26 21:29 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080926212954.GE31505-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-29 13:14 ` Serge E. Hallyn
2008-09-12 17:52 ` [PATCH 07/10] Update ptmx permissions during remount sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175252.GH17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 18:30 ` Serge E. Hallyn
2008-09-12 17:53 ` [PATCH 08/10] Define get_sb_ref() sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175308.GI17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 19:20 ` Serge E. Hallyn
2008-09-24 19:55 ` Dave Hansen
2008-09-26 21:21 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080926212115.GD31505-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-26 21:31 ` Dave Hansen
2008-09-27 0:47 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080927004727.GA2161-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-29 14:00 ` Cedric Le Goater
[not found] ` <48E0DF71.2070007-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-09-30 15:13 ` Serge E. Hallyn
[not found] ` <20080930151325.GA26713-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-10-01 12:38 ` Cedric Le Goater
2008-09-27 20:29 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080927202924.GA16208-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-10-04 3:09 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
2008-09-12 17:53 ` [PATCH 09/10] Enable multiple instances of devpts sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175322.GJ17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-24 20:26 ` Serge E. Hallyn
[not found] ` <20080924202616.GB31664-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-26 21:03 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080926210347.GB31505-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-29 13:01 ` Serge E. Hallyn
[not found] ` <20080929130131.GA12531-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-29 15:18 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080929151828.GA10202-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-29 15:29 ` Serge E. Hallyn
[not found] ` <20080929152951.GA32518-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-29 15:58 ` Cedric Le Goater
2008-09-29 14:06 ` Cedric Le Goater
2008-09-12 17:53 ` [PATCH 10/10] Document usage of multiple-instances " sukadev-r/Jw6+rmf7HQT0dZR+AlfA
[not found] ` <20080912175347.GK17350-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-19 15:33 ` Alan Cox
[not found] ` <20080919163311.626b715f-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>
2008-09-19 16:53 ` H. Peter Anvin
2008-09-20 16:17 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
[not found] ` <20080920161717.GA23693-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-22 13:29 ` Serge E. Hallyn
[not found] ` <20080922132937.GA11932-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-22 19:25 ` Serge E. Hallyn
2008-09-22 16:16 ` Serge E. Hallyn
[not found] ` <20080922161658.GA27087-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-22 16:33 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
2008-09-24 20:36 ` Serge E. Hallyn
[not found] ` <20080924203650.GC31664-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-09-26 21:05 ` sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080927011222.GB2161@us.ibm.com \
--to=sukadev-23vcf4htsmix0ybbhkvfkdbpr1lh4cv8@public.gmane.org \
--cc=alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org \
--cc=bastian-yyjItF7Rl6lg9hUCZPvPmw@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \
--cc=hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org \
--cc=kyle-hoO6YkzgTuCM0SS3m2neIg@public.gmane.org \
--cc=serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org \
--cc=xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.