Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git]
/
kernel
/
fs
/
fuse
/
cuse.c
diff --git
a/kernel/fs/fuse/cuse.c
b/kernel/fs/fuse/cuse.c
index
e5bbf74
..
8e3ee19
100644
(file)
--- a/
kernel/fs/fuse/cuse.c
+++ b/
kernel/fs/fuse/cuse.c
@@
-489,6
+489,7
@@
static void cuse_fc_release(struct fuse_conn *fc)
*/
static int cuse_channel_open(struct inode *inode, struct file *file)
{
*/
static int cuse_channel_open(struct inode *inode, struct file *file)
{
+ struct fuse_dev *fud;
struct cuse_conn *cc;
int rc;
struct cuse_conn *cc;
int rc;
@@
-499,17
+500,22
@@
static int cuse_channel_open(struct inode *inode, struct file *file)
fuse_conn_init(&cc->fc);
fuse_conn_init(&cc->fc);
+ fud = fuse_dev_alloc(&cc->fc);
+ if (!fud) {
+ kfree(cc);
+ return -ENOMEM;
+ }
+
INIT_LIST_HEAD(&cc->list);
cc->fc.release = cuse_fc_release;
INIT_LIST_HEAD(&cc->list);
cc->fc.release = cuse_fc_release;
- cc->fc.connected = 1;
cc->fc.initialized = 1;
rc = cuse_send_init(cc);
if (rc) {
cc->fc.initialized = 1;
rc = cuse_send_init(cc);
if (rc) {
- fuse_
conn_put(&cc->fc
);
+ fuse_
dev_free(fud
);
return rc;
}
return rc;
}
- file->private_data =
&cc->fc; /* channel owns base reference to cc */
+ file->private_data =
fud;
return 0;
}
return 0;
}
@@
-527,7
+533,8
@@
static int cuse_channel_open(struct inode *inode, struct file *file)
*/
static int cuse_channel_release(struct inode *inode, struct file *file)
{
*/
static int cuse_channel_release(struct inode *inode, struct file *file)
{
- struct cuse_conn *cc = fc_to_cc(file->private_data);
+ struct fuse_dev *fud = file->private_data;
+ struct cuse_conn *cc = fc_to_cc(fud->fc);
int rc;
/* remove from the conntbl, no more access from this point on */
int rc;
/* remove from the conntbl, no more access from this point on */
@@
-542,6
+549,8
@@
static int cuse_channel_release(struct inode *inode, struct file *file)
unregister_chrdev_region(cc->cdev->dev, 1);
cdev_del(cc->cdev);
}
unregister_chrdev_region(cc->cdev->dev, 1);
cdev_del(cc->cdev);
}
+ /* Base reference is now owned by "fud" */
+ fuse_conn_put(&cc->fc);
rc = fuse_dev_release(inode, file); /* puts the base reference */
rc = fuse_dev_release(inode, file); /* puts the base reference */