Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 96448
b: refs/heads/master
c: a0612b1
h: refs/heads/master
v: v3
  • Loading branch information
Jeff Dike authored and Linus Torvalds committed May 13, 2008
1 parent 058af91 commit f69de75
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 53 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 96cee3044dca2e6510ca7cc276d1eac34a1cfd51
refs/heads/master: a0612b1f0b3d851458dafe5886e33d58c1967440
82 changes: 30 additions & 52 deletions trunk/fs/hppfs/hppfs_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ struct hppfs_private {
};

struct hppfs_inode_info {
struct dentry *proc_dentry;
struct dentry *proc_dentry;
struct inode vfs_inode;
};

Expand All @@ -52,7 +52,7 @@ static int is_pid(struct dentry *dentry)
int i;

sb = dentry->d_sb;
if ((sb->s_op != &hppfs_sbops) || (dentry->d_parent != sb->s_root))
if (dentry->d_parent != sb->s_root)
return 0;

for (i = 0; i < dentry->d_name.len; i++) {
Expand Down Expand Up @@ -136,7 +136,7 @@ static int file_removed(struct dentry *dentry, const char *file)
}

static struct dentry *hppfs_lookup(struct inode *ino, struct dentry *dentry,
struct nameidata *nd)
struct nameidata *nd)
{
struct dentry *proc_dentry, *new, *parent;
struct inode *inode;
Expand Down Expand Up @@ -254,6 +254,8 @@ static ssize_t hppfs_read(struct file *file, char __user *buf, size_t count,
int err;

if (hppfs->contents != NULL) {
int rem;

if (*ppos >= hppfs->len)
return 0;

Expand All @@ -267,8 +269,10 @@ static ssize_t hppfs_read(struct file *file, char __user *buf, size_t count,

if (off + count > hppfs->len)
count = hppfs->len - off;
copy_to_user(buf, &data->contents[off], count);
*ppos += count;
rem = copy_to_user(buf, &data->contents[off], count);
*ppos += count - rem;
if (rem > 0)
return -EFAULT;
} else if (hppfs->host_fd != -1) {
err = os_seek_file(hppfs->host_fd, *ppos);
if (err) {
Expand All @@ -285,21 +289,15 @@ static ssize_t hppfs_read(struct file *file, char __user *buf, size_t count,
return count;
}

static ssize_t hppfs_write(struct file *file, const char __user *buf, size_t len,
loff_t *ppos)
static ssize_t hppfs_write(struct file *file, const char __user *buf,
size_t len, loff_t *ppos)
{
struct hppfs_private *data = file->private_data;
struct file *proc_file = data->proc_file;
ssize_t (*write)(struct file *, const char __user *, size_t, loff_t *);
int err;

write = proc_file->f_path.dentry->d_inode->i_fop->write;

proc_file->f_pos = file->f_pos;
err = (*write)(proc_file, buf, len, &proc_file->f_pos);
file->f_pos = proc_file->f_pos;

return err;
return (*write)(proc_file, buf, len, ppos);
}

static int open_host_sock(char *host_file, int *filter_out)
Expand Down Expand Up @@ -357,7 +355,7 @@ static struct hppfs_data *hppfs_get_data(int fd, int filter,

if (filter) {
while ((n = read_proc(proc_file, data->contents,
sizeof(data->contents), NULL, 0)) > 0)
sizeof(data->contents), NULL, 0)) > 0)
os_write_file(fd, data->contents, n);
err = os_shutdown_socket(fd, 0, 1);
if (err) {
Expand Down Expand Up @@ -429,8 +427,8 @@ static int file_mode(int fmode)
static int hppfs_open(struct inode *inode, struct file *file)
{
struct hppfs_private *data;
struct dentry *proc_dentry;
struct vfsmount *proc_mnt;
struct dentry *proc_dentry;
char *host_file;
int err, fd, type, filter;

Expand Down Expand Up @@ -492,8 +490,8 @@ static int hppfs_open(struct inode *inode, struct file *file)
static int hppfs_dir_open(struct inode *inode, struct file *file)
{
struct hppfs_private *data;
struct dentry *proc_dentry;
struct vfsmount *proc_mnt;
struct dentry *proc_dentry;
int err;

err = -ENOMEM;
Expand Down Expand Up @@ -620,6 +618,9 @@ static struct inode *hppfs_alloc_inode(struct super_block *sb)

void hppfs_delete_inode(struct inode *ino)
{
dput(HPPFS_I(ino)->proc_dentry);
mntput(ino->i_sb->s_fs_info);

clear_inode(ino);
}

Expand All @@ -628,69 +629,46 @@ static void hppfs_destroy_inode(struct inode *inode)
kfree(HPPFS_I(inode));
}

static void hppfs_put_super(struct super_block *sb)
{
mntput(sb->s_fs_info);
}

static const struct super_operations hppfs_sbops = {
.alloc_inode = hppfs_alloc_inode,
.destroy_inode = hppfs_destroy_inode,
.delete_inode = hppfs_delete_inode,
.statfs = hppfs_statfs,
.put_super = hppfs_put_super,
};

static int hppfs_readlink(struct dentry *dentry, char __user *buffer,
int buflen)
{
struct file *proc_file;
struct dentry *proc_dentry;
struct vfsmount *proc_mnt;
int ret;

proc_dentry = HPPFS_I(dentry->d_inode)->proc_dentry;
proc_mnt = dentry->d_sb->s_fs_info;

proc_file = dentry_open(dget(proc_dentry), mntget(proc_mnt), O_RDONLY);
if (IS_ERR(proc_file))
return PTR_ERR(proc_file);

ret = proc_dentry->d_inode->i_op->readlink(proc_dentry, buffer, buflen);

fput(proc_file);

return ret;
return proc_dentry->d_inode->i_op->readlink(proc_dentry, buffer,
buflen);
}

static void* hppfs_follow_link(struct dentry *dentry, struct nameidata *nd)
static void *hppfs_follow_link(struct dentry *dentry, struct nameidata *nd)
{
struct file *proc_file;
struct dentry *proc_dentry;
struct vfsmount *proc_mnt;
void *ret;

proc_dentry = HPPFS_I(dentry->d_inode)->proc_dentry;
proc_mnt = dentry->d_sb->s_fs_info;

proc_file = dentry_open(dget(proc_dentry), mntget(proc_mnt), O_RDONLY);
if (IS_ERR(proc_file))
return proc_file;

ret = proc_dentry->d_inode->i_op->follow_link(proc_dentry, nd);

fput(proc_file);
return proc_dentry->d_inode->i_op->follow_link(proc_dentry, nd);
}

return ret;
int hppfs_permission(struct inode *inode, int mask, struct nameidata *nd)
{
return generic_permission(inode, mask, NULL);
}

static const struct inode_operations hppfs_dir_iops = {
.lookup = hppfs_lookup,
.permission = hppfs_permission,
};

static const struct inode_operations hppfs_link_iops = {
.readlink = hppfs_readlink,
.follow_link = hppfs_follow_link,
.permission = hppfs_permission,
};

static struct inode *get_inode(struct super_block *sb, struct dentry *dentry)
Expand All @@ -712,7 +690,7 @@ static struct inode *get_inode(struct super_block *sb, struct dentry *dentry)
inode->i_fop = &hppfs_file_fops;
}

HPPFS_I(inode)->proc_dentry = dentry;
HPPFS_I(inode)->proc_dentry = dget(dentry);

inode->i_uid = proc_ino->i_uid;
inode->i_gid = proc_ino->i_gid;
Expand All @@ -725,7 +703,7 @@ static struct inode *get_inode(struct super_block *sb, struct dentry *dentry)
inode->i_size = proc_ino->i_size;
inode->i_blocks = proc_ino->i_blocks;

return 0;
return inode;
}

static int hppfs_fill_super(struct super_block *sb, void *d, int silent)
Expand Down

0 comments on commit f69de75

Please sign in to comment.