Skip to content

Commit 706cd59

Browse files
more ugly hacks to enable debugfs
1 parent b53f1f8 commit 706cd59

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

sys/compat/lindebugfs/lindebugfs.c

+24-4
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ debugfs_fill(PFS_FILL_ARGS)
9696
vn.v_data = d->dm_data;
9797
buf = uio->uio_iov[0].iov_base;
9898
len = min(uio->uio_iov[0].iov_len, uio->uio_resid);
99+
uio->uio_offset = 0;
100+
99101
off = 0;
100102
lf.private_data = NULL;
101103
rc = d->dm_fops->open(&vn, &lf);
@@ -106,11 +108,29 @@ debugfs_fill(PFS_FILL_ARGS)
106108
return (-rc);
107109
}
108110
sf = lf.private_data;
109-
sf->buf = sb;
111+
110112
if (uio->uio_rw == UIO_READ)
111-
rc = d->dm_fops->read(&lf, NULL, len, &off);
113+
{
114+
len = min(len, sb->s_size);
115+
sf->buf = sb;
116+
rc = d->dm_fops->read(&lf, buf, len, &off);
117+
118+
if( sbuf_len(sb) == 0 && rc > 0 )
119+
sbuf_bcopyin( sb, buf, rc );
120+
}
112121
else
113-
rc = d->dm_fops->write(&lf, buf, len, &off);
122+
{
123+
struct sbuf sb_local;
124+
int error;
125+
126+
sbuf_uionew(&sb_local, uio, &error);
127+
if( error )
128+
return error;
129+
130+
sf->buf = &sb_local;
131+
rc = d->dm_fops->write(&lf, buf, len, &off);
132+
sbuf_delete(&sb_local);
133+
}
114134
if (d->dm_fops->release)
115135
d->dm_fops->release(&vn, &lf);
116136
else
@@ -150,7 +170,7 @@ debugfs_create_file(const char *name, umode_t mode,
150170
else
151171
pnode = debugfs_root;
152172

153-
flags = fops->write ? PFS_RDWR : PFS_RD;
173+
flags = ( fops->write ? PFS_RDWR : PFS_RD ) | PFS_RAWWR;
154174
dnode->d_pfs_node = pfs_create_file(pnode, name, debugfs_fill,
155175
debugfs_attr, NULL, debugfs_destroy, flags);
156176
dnode->d_pfs_node->pn_data = dm;

0 commit comments

Comments
 (0)