* [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
@ 2006-02-12 13:40 Ian Kent
0 siblings, 0 replies; 7+ messages in thread
From: Ian Kent @ 2006-02-12 13:40 UTC (permalink / raw)
To: Kernel Mailing List; +Cc: linux-fsdevel, autofs
This patch define a new autofs packet for autofs v5 and updates
the waitq.c functions to handle the additional packet type.
--- linux-2.6.16-rc2-mm1/include/linux/auto_fs4.h.v5-packet-proto 2006-02-09 20:11:00.000000000 +0800
+++ linux-2.6.16-rc2-mm1/include/linux/auto_fs4.h 2006-02-09 20:38:30.000000000 +0800
@@ -19,18 +19,37 @@
#undef AUTOFS_MIN_PROTO_VERSION
#undef AUTOFS_MAX_PROTO_VERSION
-#define AUTOFS_PROTO_VERSION 4
+#define AUTOFS_PROTO_VERSION 5
#define AUTOFS_MIN_PROTO_VERSION 3
-#define AUTOFS_MAX_PROTO_VERSION 4
+#define AUTOFS_MAX_PROTO_VERSION 5
-#define AUTOFS_PROTO_SUBVERSION 10
+#define AUTOFS_PROTO_SUBVERSION 0
/* Mask for expire behaviour */
#define AUTOFS_EXP_IMMEDIATE 1
#define AUTOFS_EXP_LEAVES 2
-/* New message type */
-#define autofs_ptype_expire_multi 2 /* Expire entry (umount request) */
+/* Daemon notification packet types */
+enum autofs_notify {
+ NFY_NONE,
+ NFY_MOUNT,
+ NFY_EXPIRE
+};
+
+/* Kernel protocol version 4 packet types */
+
+/* Expire entry (umount request) */
+#define autofs_ptype_expire_multi 2
+
+/* Kernel protocol version 5 packet types */
+
+/* Indirect mount missing and expire requests. */
+#define autofs_ptype_missing_indirect 3
+#define autofs_ptype_expire_indirect 4
+
+/* Direct mount missing and expire requests */
+#define autofs_ptype_missing_direct 5
+#define autofs_ptype_expire_direct 6
/* v4 multi expire (via pipe) */
struct autofs_packet_expire_multi {
@@ -40,14 +59,36 @@ struct autofs_packet_expire_multi {
char name[NAME_MAX+1];
};
+/* autofs v5 common packet struct */
+struct autofs_v5_packet {
+ struct autofs_packet_hdr hdr;
+ autofs_wqt_t wait_queue_token;
+ __u32 dev;
+ __u64 ino;
+ uid_t uid;
+ gid_t gid;
+ pid_t pid;
+ pid_t tgid;
+ int len;
+ char name[NAME_MAX+1];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
union autofs_packet_union {
struct autofs_packet_hdr hdr;
struct autofs_packet_missing missing;
struct autofs_packet_expire expire;
struct autofs_packet_expire_multi expire_multi;
+ struct autofs_v5_packet v5_packet;
};
#define AUTOFS_IOC_EXPIRE_MULTI _IOW(0x93,0x66,int)
+#define AUTOFS_IOC_EXPIRE_INDIRECT AUTOFS_IOC_EXPIRE_MULTI
+#define AUTOFS_IOC_EXPIRE_DIRECT AUTOFS_IOC_EXPIRE_MULTI
#define AUTOFS_IOC_PROTOSUBVER _IOR(0x93,0x67,int)
#define AUTOFS_IOC_ASKREGHOST _IOR(0x93,0x68,int)
#define AUTOFS_IOC_TOGGLEREGHOST _IOR(0x93,0x69,int)
--- linux-2.6.16-rc2-mm1/fs/autofs4/autofs_i.h.v5-packet-proto 2006-02-09 20:33:15.000000000 +0800
+++ linux-2.6.16-rc2-mm1/fs/autofs4/autofs_i.h 2006-02-09 20:38:30.000000000 +0800
@@ -77,6 +77,12 @@ struct autofs_wait_queue {
int hash;
int len;
char *name;
+ u32 dev;
+ u64 ino;
+ uid_t uid;
+ gid_t gid;
+ pid_t pid;
+ pid_t tgid;
/* This is for status reporting upon return */
int status;
atomic_t notified;
@@ -179,13 +185,6 @@ struct autofs_info *autofs4_init_ino(str
/* Queue management functions */
-enum autofs_notify
-{
- NFY_NONE,
- NFY_MOUNT,
- NFY_EXPIRE
-};
-
int autofs4_wait(struct autofs_sb_info *,struct dentry *, enum autofs_notify);
int autofs4_wait_release(struct autofs_sb_info *,autofs_wqt_t,int);
void autofs4_catatonic_mode(struct autofs_sb_info *);
@@ -203,6 +202,16 @@ static inline int autofs4_follow_mount(s
return res;
}
+static inline u32 autofs4_get_dev(struct autofs_sb_info *sbi)
+{
+ return new_encode_dev(sbi->sb->s_dev);
+}
+
+static inline u64 autofs4_get_ino(struct autofs_sb_info *sbi)
+{
+ return sbi->sb->s_root->d_inode->i_ino;
+}
+
static inline int simple_positive(struct dentry *dentry)
{
return dentry->d_inode && !d_unhashed(dentry);
--- linux-2.6.16-rc2-mm1/fs/autofs4/waitq.c.v5-packet-proto 2006-02-09 20:10:11.000000000 +0800
+++ linux-2.6.16-rc2-mm1/fs/autofs4/waitq.c 2006-02-09 20:38:53.000000000 +0800
@@ -3,7 +3,7 @@
* linux/fs/autofs/waitq.c
*
* Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
- * Copyright 2001-2003 Ian Kent <raven@themaw.net>
+ * Copyright 2001-2006 Ian Kent <raven@themaw.net>
*
* This file is part of the Linux kernel and is made available under
* the terms of the GNU General Public License, version 2, or at your
@@ -97,7 +97,10 @@ static void autofs4_notify_daemon(struct
pkt.hdr.proto_version = sbi->version;
pkt.hdr.type = type;
- if (type == autofs_ptype_missing) {
+ switch (type) {
+ /* Kernel protocol v4 missing and expire packets */
+ case autofs_ptype_missing:
+ {
struct autofs_packet_missing *mp = &pkt.missing;
pktsz = sizeof(*mp);
@@ -106,7 +109,10 @@ static void autofs4_notify_daemon(struct
mp->len = wq->len;
memcpy(mp->name, wq->name, wq->len);
mp->name[wq->len] = '\0';
- } else if (type == autofs_ptype_expire_multi) {
+ break;
+ }
+ case autofs_ptype_expire_multi:
+ {
struct autofs_packet_expire_multi *ep = &pkt.expire_multi;
pktsz = sizeof(*ep);
@@ -115,7 +121,34 @@ static void autofs4_notify_daemon(struct
ep->len = wq->len;
memcpy(ep->name, wq->name, wq->len);
ep->name[wq->len] = '\0';
- } else {
+ break;
+ }
+ /*
+ * Kernel protocol v5 packet for handling indirect and direct
+ * mount missing and expire requests
+ */
+ case autofs_ptype_missing_indirect:
+ case autofs_ptype_expire_indirect:
+ case autofs_ptype_missing_direct:
+ case autofs_ptype_expire_direct:
+ {
+ struct autofs_v5_packet *packet = &pkt.v5_packet;
+
+ pktsz = sizeof(*packet);
+
+ packet->wait_queue_token = wq->wait_queue_token;
+ packet->len = wq->len;
+ memcpy(packet->name, wq->name, wq->len);
+ packet->name[wq->len] = '\0';
+ packet->dev = wq->dev;
+ packet->ino = wq->ino;
+ packet->uid = wq->uid;
+ packet->gid = wq->gid;
+ packet->pid = wq->pid;
+ packet->tgid = wq->tgid;
+ break;
+ }
+ default:
printk("autofs4_notify_daemon: bad type %d!\n", type);
return;
}
@@ -161,7 +194,9 @@ int autofs4_wait(struct autofs_sb_info *
{
struct autofs_wait_queue *wq;
char *name;
- int len, status;
+ unsigned int len = 0;
+ unsigned int hash = 0;
+ int status;
/* In catatonic mode, we don't wait for nobody */
if (sbi->catatonic)
@@ -171,11 +206,17 @@ int autofs4_wait(struct autofs_sb_info *
if (!name)
return -ENOMEM;
- len = autofs4_getpath(sbi, dentry, &name);
- if (!len) {
- kfree(name);
- return -ENOENT;
+ /* If this is a direct mount request create a dummy name */
+ if (IS_ROOT(dentry) && (sbi->type & AUTOFS_TYP_DIRECT))
+ len = sprintf(name, "%p", dentry);
+ else {
+ len = autofs4_getpath(sbi, dentry, &name);
+ if (!len) {
+ kfree(name);
+ return -ENOENT;
+ }
}
+ hash = full_name_hash(name, len);
if (mutex_lock_interruptible(&sbi->wq_mutex)) {
kfree(name);
@@ -211,9 +252,15 @@ int autofs4_wait(struct autofs_sb_info *
wq->next = sbi->queues;
sbi->queues = wq;
init_waitqueue_head(&wq->queue);
- wq->hash = dentry->d_name.hash;
+ wq->hash = hash;
wq->name = name;
wq->len = len;
+ wq->dev = autofs4_get_dev(sbi);
+ wq->ino = autofs4_get_ino(sbi);
+ wq->uid = current->uid;
+ wq->gid = current->gid;
+ wq->pid = current->pid;
+ wq->tgid = current->tgid;
wq->status = -EINTR; /* Status return if interrupted */
atomic_set(&wq->wait_ctr, 2);
atomic_set(&wq->notified, 1);
@@ -227,8 +274,23 @@ int autofs4_wait(struct autofs_sb_info *
}
if (notify != NFY_NONE && atomic_dec_and_test(&wq->notified)) {
- int type = (notify == NFY_MOUNT ?
- autofs_ptype_missing : autofs_ptype_expire_multi);
+ int type;
+
+ if (sbi->version < 5) {
+ if (notify == NFY_MOUNT)
+ type = autofs_ptype_missing;
+ else
+ type = autofs_ptype_expire_multi;
+ } else {
+ if (notify == NFY_MOUNT)
+ type = (sbi->type & AUTOFS_TYP_DIRECT) ?
+ autofs_ptype_missing_direct :
+ autofs_ptype_missing_indirect;
+ else
+ type = (sbi->type & AUTOFS_TYP_DIRECT) ?
+ autofs_ptype_expire_direct :
+ autofs_ptype_expire_indirect;
+ }
DPRINTK("new wait id = 0x%08lx, name = %.*s, nfy=%d\n",
(unsigned long) wq->wait_queue_token, wq->len, wq->name, notify);
^ permalink raw reply [flat|nested] 7+ messages in thread
* [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
@ 2006-02-17 7:01 Ian Kent
2006-02-17 8:51 ` Andrew Morton
0 siblings, 1 reply; 7+ messages in thread
From: Ian Kent @ 2006-02-17 7:01 UTC (permalink / raw)
To: Kernel Mailing List; +Cc: linux-fsdevel, autofs
This patch define a new autofs packet for autofs v5 and updates
the waitq.c functions to handle the additional packet type.
Signed-off-by: Ian Kent <raven@themaw.net>
--- linux-2.6.16-rc2-mm1/include/linux/auto_fs4.h.v5-packet-proto 2006-02-09 20:11:00.000000000 +0800
+++ linux-2.6.16-rc2-mm1/include/linux/auto_fs4.h 2006-02-09 20:38:30.000000000 +0800
@@ -19,18 +19,37 @@
#undef AUTOFS_MIN_PROTO_VERSION
#undef AUTOFS_MAX_PROTO_VERSION
-#define AUTOFS_PROTO_VERSION 4
+#define AUTOFS_PROTO_VERSION 5
#define AUTOFS_MIN_PROTO_VERSION 3
-#define AUTOFS_MAX_PROTO_VERSION 4
+#define AUTOFS_MAX_PROTO_VERSION 5
-#define AUTOFS_PROTO_SUBVERSION 10
+#define AUTOFS_PROTO_SUBVERSION 0
/* Mask for expire behaviour */
#define AUTOFS_EXP_IMMEDIATE 1
#define AUTOFS_EXP_LEAVES 2
-/* New message type */
-#define autofs_ptype_expire_multi 2 /* Expire entry (umount request) */
+/* Daemon notification packet types */
+enum autofs_notify {
+ NFY_NONE,
+ NFY_MOUNT,
+ NFY_EXPIRE
+};
+
+/* Kernel protocol version 4 packet types */
+
+/* Expire entry (umount request) */
+#define autofs_ptype_expire_multi 2
+
+/* Kernel protocol version 5 packet types */
+
+/* Indirect mount missing and expire requests. */
+#define autofs_ptype_missing_indirect 3
+#define autofs_ptype_expire_indirect 4
+
+/* Direct mount missing and expire requests */
+#define autofs_ptype_missing_direct 5
+#define autofs_ptype_expire_direct 6
/* v4 multi expire (via pipe) */
struct autofs_packet_expire_multi {
@@ -40,14 +59,36 @@ struct autofs_packet_expire_multi {
char name[NAME_MAX+1];
};
+/* autofs v5 common packet struct */
+struct autofs_v5_packet {
+ struct autofs_packet_hdr hdr;
+ autofs_wqt_t wait_queue_token;
+ __u32 dev;
+ __u64 ino;
+ uid_t uid;
+ gid_t gid;
+ pid_t pid;
+ pid_t tgid;
+ int len;
+ char name[NAME_MAX+1];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
union autofs_packet_union {
struct autofs_packet_hdr hdr;
struct autofs_packet_missing missing;
struct autofs_packet_expire expire;
struct autofs_packet_expire_multi expire_multi;
+ struct autofs_v5_packet v5_packet;
};
#define AUTOFS_IOC_EXPIRE_MULTI _IOW(0x93,0x66,int)
+#define AUTOFS_IOC_EXPIRE_INDIRECT AUTOFS_IOC_EXPIRE_MULTI
+#define AUTOFS_IOC_EXPIRE_DIRECT AUTOFS_IOC_EXPIRE_MULTI
#define AUTOFS_IOC_PROTOSUBVER _IOR(0x93,0x67,int)
#define AUTOFS_IOC_ASKREGHOST _IOR(0x93,0x68,int)
#define AUTOFS_IOC_TOGGLEREGHOST _IOR(0x93,0x69,int)
--- linux-2.6.16-rc2-mm1/fs/autofs4/autofs_i.h.v5-packet-proto 2006-02-09 20:33:15.000000000 +0800
+++ linux-2.6.16-rc2-mm1/fs/autofs4/autofs_i.h 2006-02-09 20:38:30.000000000 +0800
@@ -77,6 +77,12 @@ struct autofs_wait_queue {
int hash;
int len;
char *name;
+ u32 dev;
+ u64 ino;
+ uid_t uid;
+ gid_t gid;
+ pid_t pid;
+ pid_t tgid;
/* This is for status reporting upon return */
int status;
atomic_t notified;
@@ -179,13 +185,6 @@ struct autofs_info *autofs4_init_ino(str
/* Queue management functions */
-enum autofs_notify
-{
- NFY_NONE,
- NFY_MOUNT,
- NFY_EXPIRE
-};
-
int autofs4_wait(struct autofs_sb_info *,struct dentry *, enum autofs_notify);
int autofs4_wait_release(struct autofs_sb_info *,autofs_wqt_t,int);
void autofs4_catatonic_mode(struct autofs_sb_info *);
@@ -203,6 +202,16 @@ static inline int autofs4_follow_mount(s
return res;
}
+static inline u32 autofs4_get_dev(struct autofs_sb_info *sbi)
+{
+ return new_encode_dev(sbi->sb->s_dev);
+}
+
+static inline u64 autofs4_get_ino(struct autofs_sb_info *sbi)
+{
+ return sbi->sb->s_root->d_inode->i_ino;
+}
+
static inline int simple_positive(struct dentry *dentry)
{
return dentry->d_inode && !d_unhashed(dentry);
--- linux-2.6.16-rc2-mm1/fs/autofs4/waitq.c.v5-packet-proto 2006-02-09 20:10:11.000000000 +0800
+++ linux-2.6.16-rc2-mm1/fs/autofs4/waitq.c 2006-02-09 20:38:53.000000000 +0800
@@ -3,7 +3,7 @@
* linux/fs/autofs/waitq.c
*
* Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
- * Copyright 2001-2003 Ian Kent <raven@themaw.net>
+ * Copyright 2001-2006 Ian Kent <raven@themaw.net>
*
* This file is part of the Linux kernel and is made available under
* the terms of the GNU General Public License, version 2, or at your
@@ -97,7 +97,10 @@ static void autofs4_notify_daemon(struct
pkt.hdr.proto_version = sbi->version;
pkt.hdr.type = type;
- if (type == autofs_ptype_missing) {
+ switch (type) {
+ /* Kernel protocol v4 missing and expire packets */
+ case autofs_ptype_missing:
+ {
struct autofs_packet_missing *mp = &pkt.missing;
pktsz = sizeof(*mp);
@@ -106,7 +109,10 @@ static void autofs4_notify_daemon(struct
mp->len = wq->len;
memcpy(mp->name, wq->name, wq->len);
mp->name[wq->len] = '\0';
- } else if (type == autofs_ptype_expire_multi) {
+ break;
+ }
+ case autofs_ptype_expire_multi:
+ {
struct autofs_packet_expire_multi *ep = &pkt.expire_multi;
pktsz = sizeof(*ep);
@@ -115,7 +121,34 @@ static void autofs4_notify_daemon(struct
ep->len = wq->len;
memcpy(ep->name, wq->name, wq->len);
ep->name[wq->len] = '\0';
- } else {
+ break;
+ }
+ /*
+ * Kernel protocol v5 packet for handling indirect and direct
+ * mount missing and expire requests
+ */
+ case autofs_ptype_missing_indirect:
+ case autofs_ptype_expire_indirect:
+ case autofs_ptype_missing_direct:
+ case autofs_ptype_expire_direct:
+ {
+ struct autofs_v5_packet *packet = &pkt.v5_packet;
+
+ pktsz = sizeof(*packet);
+
+ packet->wait_queue_token = wq->wait_queue_token;
+ packet->len = wq->len;
+ memcpy(packet->name, wq->name, wq->len);
+ packet->name[wq->len] = '\0';
+ packet->dev = wq->dev;
+ packet->ino = wq->ino;
+ packet->uid = wq->uid;
+ packet->gid = wq->gid;
+ packet->pid = wq->pid;
+ packet->tgid = wq->tgid;
+ break;
+ }
+ default:
printk("autofs4_notify_daemon: bad type %d!\n", type);
return;
}
@@ -161,7 +194,9 @@ int autofs4_wait(struct autofs_sb_info *
{
struct autofs_wait_queue *wq;
char *name;
- int len, status;
+ unsigned int len = 0;
+ unsigned int hash = 0;
+ int status;
/* In catatonic mode, we don't wait for nobody */
if (sbi->catatonic)
@@ -171,11 +206,17 @@ int autofs4_wait(struct autofs_sb_info *
if (!name)
return -ENOMEM;
- len = autofs4_getpath(sbi, dentry, &name);
- if (!len) {
- kfree(name);
- return -ENOENT;
+ /* If this is a direct mount request create a dummy name */
+ if (IS_ROOT(dentry) && (sbi->type & AUTOFS_TYP_DIRECT))
+ len = sprintf(name, "%p", dentry);
+ else {
+ len = autofs4_getpath(sbi, dentry, &name);
+ if (!len) {
+ kfree(name);
+ return -ENOENT;
+ }
}
+ hash = full_name_hash(name, len);
if (mutex_lock_interruptible(&sbi->wq_mutex)) {
kfree(name);
@@ -211,9 +252,15 @@ int autofs4_wait(struct autofs_sb_info *
wq->next = sbi->queues;
sbi->queues = wq;
init_waitqueue_head(&wq->queue);
- wq->hash = dentry->d_name.hash;
+ wq->hash = hash;
wq->name = name;
wq->len = len;
+ wq->dev = autofs4_get_dev(sbi);
+ wq->ino = autofs4_get_ino(sbi);
+ wq->uid = current->uid;
+ wq->gid = current->gid;
+ wq->pid = current->pid;
+ wq->tgid = current->tgid;
wq->status = -EINTR; /* Status return if interrupted */
atomic_set(&wq->wait_ctr, 2);
atomic_set(&wq->notified, 1);
@@ -227,8 +274,23 @@ int autofs4_wait(struct autofs_sb_info *
}
if (notify != NFY_NONE && atomic_dec_and_test(&wq->notified)) {
- int type = (notify == NFY_MOUNT ?
- autofs_ptype_missing : autofs_ptype_expire_multi);
+ int type;
+
+ if (sbi->version < 5) {
+ if (notify == NFY_MOUNT)
+ type = autofs_ptype_missing;
+ else
+ type = autofs_ptype_expire_multi;
+ } else {
+ if (notify == NFY_MOUNT)
+ type = (sbi->type & AUTOFS_TYP_DIRECT) ?
+ autofs_ptype_missing_direct :
+ autofs_ptype_missing_indirect;
+ else
+ type = (sbi->type & AUTOFS_TYP_DIRECT) ?
+ autofs_ptype_expire_direct :
+ autofs_ptype_expire_indirect;
+ }
DPRINTK("new wait id = 0x%08lx, name = %.*s, nfy=%d\n",
(unsigned long) wq->wait_queue_token, wq->len, wq->name, notify);
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
2006-02-17 7:01 [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications Ian Kent
@ 2006-02-17 8:51 ` Andrew Morton
2006-02-17 9:09 ` Ian Kent
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2006-02-17 8:51 UTC (permalink / raw)
To: Ian Kent; +Cc: linux-kernel, linux-fsdevel, autofs
Ian Kent <raven@themaw.net> wrote:
>
> +/* autofs v5 common packet struct */
> +struct autofs_v5_packet {
> + struct autofs_packet_hdr hdr;
> + autofs_wqt_t wait_queue_token;
> + __u32 dev;
> + __u64 ino;
> + uid_t uid;
> + gid_t gid;
> + pid_t pid;
> + pid_t tgid;
> + int len;
> + char name[NAME_MAX+1];
> +};
Is this known to work with 32-bit userspace on 64-bit kernels?
In particular, perhaps the ?id_t's should become a type of known size and
alignment (u32 or u64)?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
2006-02-17 8:51 ` Andrew Morton
@ 2006-02-17 9:09 ` Ian Kent
2006-02-17 9:17 ` Andrew Morton
2006-02-17 9:21 ` Ian Kent
0 siblings, 2 replies; 7+ messages in thread
From: Ian Kent @ 2006-02-17 9:09 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-fsdevel, autofs
On Fri, 17 Feb 2006, Andrew Morton wrote:
> Ian Kent <raven@themaw.net> wrote:
> >
> > +/* autofs v5 common packet struct */
> > +struct autofs_v5_packet {
> > + struct autofs_packet_hdr hdr;
> > + autofs_wqt_t wait_queue_token;
> > + __u32 dev;
> > + __u64 ino;
> > + uid_t uid;
> > + gid_t gid;
> > + pid_t pid;
> > + pid_t tgid;
> > + int len;
> > + char name[NAME_MAX+1];
> > +};
>
> Is this known to work with 32-bit userspace on 64-bit kernels?
>
> In particular, perhaps the ?id_t's should become a type of known size and
> alignment (u32 or u64)?
>
Yes. I take your point.
I used this for some time on my Ultra 2, which has this type of arch,
without problem. I increased the ino field from 32 to 64 bits since that
time and haven't since tested it.
I'm happy to change them to 64 bit if you believe it will avoid potential
problems?
Ian
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
2006-02-17 9:09 ` Ian Kent
@ 2006-02-17 9:17 ` Andrew Morton
2006-02-17 11:03 ` Ian Kent
2006-02-17 9:21 ` Ian Kent
1 sibling, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2006-02-17 9:17 UTC (permalink / raw)
To: Ian Kent; +Cc: linux-kernel, linux-fsdevel, autofs
Ian Kent <raven@themaw.net> wrote:
>
> On Fri, 17 Feb 2006, Andrew Morton wrote:
>
> > Ian Kent <raven@themaw.net> wrote:
> > >
> > > +/* autofs v5 common packet struct */
> > > +struct autofs_v5_packet {
> > > + struct autofs_packet_hdr hdr;
> > > + autofs_wqt_t wait_queue_token;
> > > + __u32 dev;
> > > + __u64 ino;
> > > + uid_t uid;
> > > + gid_t gid;
> > > + pid_t pid;
> > > + pid_t tgid;
> > > + int len;
> > > + char name[NAME_MAX+1];
> > > +};
> >
> > Is this known to work with 32-bit userspace on 64-bit kernels?
> >
> > In particular, perhaps the ?id_t's should become a type of known size and
> > alignment (u32 or u64)?
> >
>
> Yes. I take your point.
>
> I used this for some time on my Ultra 2, which has this type of arch,
> without problem. I increased the ino field from 32 to 64 bits since that
> time and haven't since tested it.
>
> I'm happy to change them to 64 bit if you believe it will avoid potential
> problems?
>
This stuff always makes my head spin, but certainly using u64 throughout
would be the safest approach.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
2006-02-17 9:09 ` Ian Kent
2006-02-17 9:17 ` Andrew Morton
@ 2006-02-17 9:21 ` Ian Kent
1 sibling, 0 replies; 7+ messages in thread
From: Ian Kent @ 2006-02-17 9:21 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-fsdevel, autofs
On Fri, 17 Feb 2006, Ian Kent wrote:
> On Fri, 17 Feb 2006, Andrew Morton wrote:
>
> > Ian Kent <raven@themaw.net> wrote:
> > >
> > > +/* autofs v5 common packet struct */
> > > +struct autofs_v5_packet {
> > > + struct autofs_packet_hdr hdr;
> > > + autofs_wqt_t wait_queue_token;
> > > + __u32 dev;
> > > + __u64 ino;
> > > + uid_t uid;
> > > + gid_t gid;
> > > + pid_t pid;
> > > + pid_t tgid;
> > > + int len;
> > > + char name[NAME_MAX+1];
> > > +};
> >
> > Is this known to work with 32-bit userspace on 64-bit kernels?
> >
> > In particular, perhaps the ?id_t's should become a type of known size and
> > alignment (u32 or u64)?
> >
>
> Yes. I take your point.
>
> I used this for some time on my Ultra 2, which has this type of arch,
> without problem. I increased the ino field from 32 to 64 bits since that
> time and haven't since tested it.
>
> I'm happy to change them to 64 bit if you believe it will avoid potential
> problems?
>
Come to think of it my sons has an AMD64 system with a 32 bit Fedora
install on it. I'll test on that as well over the weekend.
Ian
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications
2006-02-17 9:17 ` Andrew Morton
@ 2006-02-17 11:03 ` Ian Kent
0 siblings, 0 replies; 7+ messages in thread
From: Ian Kent @ 2006-02-17 11:03 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-fsdevel, autofs
On Fri, 17 Feb 2006, Andrew Morton wrote:
> Ian Kent <raven@themaw.net> wrote:
> >
> > On Fri, 17 Feb 2006, Andrew Morton wrote:
> >
> > > Ian Kent <raven@themaw.net> wrote:
> > > >
> > > > +/* autofs v5 common packet struct */
> > > > +struct autofs_v5_packet {
> > > > + struct autofs_packet_hdr hdr;
> > > > + autofs_wqt_t wait_queue_token;
> > > > + __u32 dev;
> > > > + __u64 ino;
> > > > + uid_t uid;
> > > > + gid_t gid;
> > > > + pid_t pid;
> > > > + pid_t tgid;
> > > > + int len;
> > > > + char name[NAME_MAX+1];
> > > > +};
> > >
> > > Is this known to work with 32-bit userspace on 64-bit kernels?
> > >
> > > In particular, perhaps the ?id_t's should become a type of known size and
> > > alignment (u32 or u64)?
> > >
> >
> > Yes. I take your point.
> >
> > I used this for some time on my Ultra 2, which has this type of arch,
> > without problem. I increased the ino field from 32 to 64 bits since that
> > time and haven't since tested it.
> >
> > I'm happy to change them to 64 bit if you believe it will avoid potential
> > problems?
> >
>
> This stuff always makes my head spin, but certainly using u64 throughout
> would be the safest approach.
>
OK. I'll change it, test it tomorrow and post the resulting patch.
Ian
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-02-17 11:03 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-17 7:01 [RFC:PATCH 4/4] autofs4 - add new packet type for v5 communications Ian Kent
2006-02-17 8:51 ` Andrew Morton
2006-02-17 9:09 ` Ian Kent
2006-02-17 9:17 ` Andrew Morton
2006-02-17 11:03 ` Ian Kent
2006-02-17 9:21 ` Ian Kent
-- strict thread matches above, loose matches on Subject: below --
2006-02-12 13:40 Ian Kent
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).