Using mmotm-2008-02-15-11-03, I get
CC fs/sysfs/file.o
fs/sysfs/file.c: In function 'sysfs_open_file':
fs/sysfs/file.c:334: warning: passing argument 1 of 'd_path' from incompatible pointer type
fs/sysfs/file.c:334: warning: passing argument 2 of 'd_path' from incompatible pointer type
fs/sysfs/file.c:334: warning: passing argument 3 of 'd_path' makes integer from pointer without a cast
fs/sysfs/file.c:334: error: too many arguments to function 'd_path'
make[2]: *** [fs/sysfs/file.o] Error 1
make[1]: *** [fs/sysfs] Error 2
make: *** [fs] Error 2
The following small patch fixes it for me.
Cheers,
Erez.
Signed-off-by: Erez Zadok <[email protected]>
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index 02223e2..a57b024 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -329,9 +329,11 @@ static int sysfs_open_file(struct inode *inode, struct file *file)
struct sysfs_ops *ops;
int error = -EACCES;
char *p;
+ struct path sysfs_path;
- p = d_path(file->f_dentry, sysfs_mount, last_sysfs_file,
- sizeof(last_sysfs_file));
+ sysfs_path.dentry = file->f_dentry;
+ sysfs_path.mnt = sysfs_mount;
+ p = d_path(&sysfs_path, last_sysfs_file, sizeof(last_sysfs_file));
if (p)
memmove(last_sysfs_file, p, strlen(p) + 1);
On Sat, Feb 16, 2008 at 02:12:05PM -0500, Erez Zadok wrote:
> diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
> index 02223e2..a57b024 100644
> --- a/fs/sysfs/file.c
> +++ b/fs/sysfs/file.c
> @@ -329,9 +329,11 @@ static int sysfs_open_file(struct inode *inode, struct file *file)
> struct sysfs_ops *ops;
> int error = -EACCES;
> char *p;
> + struct path sysfs_path;
>
> - p = d_path(file->f_dentry, sysfs_mount, last_sysfs_file,
> - sizeof(last_sysfs_file));
> + sysfs_path.dentry = file->f_dentry;
> + sysfs_path.mnt = sysfs_mount;
> + p = d_path(&sysfs_path, last_sysfs_file, sizeof(last_sysfs_file));
A d_path(file->f_path, ..); should do it, but I'd really like to know
what sysfs crowd was smoking when adding a d_path in ->open. Guys,
please explain what's going on here.
On Sun, Feb 17, Christoph Hellwig wrote:
> On Sat, Feb 16, 2008 at 02:12:05PM -0500, Erez Zadok wrote:
> > diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
> > index 02223e2..a57b024 100644
> > --- a/fs/sysfs/file.c
> > +++ b/fs/sysfs/file.c
> > @@ -329,9 +329,11 @@ static int sysfs_open_file(struct inode *inode, struct file *file)
> > struct sysfs_ops *ops;
> > int error = -EACCES;
> > char *p;
> > + struct path sysfs_path;
> >
> > - p = d_path(file->f_dentry, sysfs_mount, last_sysfs_file,
> > - sizeof(last_sysfs_file));
> > + sysfs_path.dentry = file->f_dentry;
> > + sysfs_path.mnt = sysfs_mount;
> > + p = d_path(&sysfs_path, last_sysfs_file, sizeof(last_sysfs_file));
>
> A d_path(file->f_path, ..); should do it, but I'd really like to know
> what sysfs crowd was smoking when adding a d_path in ->open. Guys,
> please explain what's going on here.
>
This is from gregkh-driver-sysfs-crash-debugging.patch which is only in -mm I
guess.