Loading fs/fuse/dir.c +25 −27 Original line number Original line Diff line number Diff line Loading @@ -1152,38 +1152,36 @@ static int fuse_permission(struct inode *inode, int mask) static int fuse_readlink_page(struct inode *inode, struct page *page) static int fuse_readlink_page(struct inode *inode, struct page *page) { { struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_req *req; struct fuse_page_desc desc = { .length = PAGE_SIZE - 1 }; int err; struct fuse_args_pages ap = { .num_pages = 1, .pages = &page, .descs = &desc, }; char *link; ssize_t res; ap.args.opcode = FUSE_READLINK; ap.args.nodeid = get_node_id(inode); ap.args.out_pages = true; ap.args.out_argvar = true; ap.args.page_zeroing = true; ap.args.out_numargs = 1; ap.args.out_args[0].size = desc.length; res = fuse_simple_request(fc, &ap.args); req = fuse_get_req(fc, 1); fuse_invalidate_atime(inode); if (IS_ERR(req)) return PTR_ERR(req); req->out.page_zeroing = 1; req->out.argpages = 1; req->num_pages = 1; req->pages[0] = page; req->page_descs[0].length = PAGE_SIZE - 1; req->in.h.opcode = FUSE_READLINK; req->in.h.nodeid = get_node_id(inode); req->out.argvar = 1; req->out.numargs = 1; req->out.args[0].size = PAGE_SIZE - 1; fuse_request_send(fc, req); err = req->out.h.error; if (!err) { if (res < 0) char *link = page_address(page); return res; size_t len = req->out.args[0].size; BUG_ON(len >= PAGE_SIZE); if (WARN_ON(res >= PAGE_SIZE)) link[len] = '\0'; return -EIO; } fuse_put_request(fc, req); link = page_address(page); fuse_invalidate_atime(inode); link[res] = '\0'; return err; return 0; } } static const char *fuse_get_link(struct dentry *dentry, struct inode *inode, static const char *fuse_get_link(struct dentry *dentry, struct inode *inode, Loading Loading
fs/fuse/dir.c +25 −27 Original line number Original line Diff line number Diff line Loading @@ -1152,38 +1152,36 @@ static int fuse_permission(struct inode *inode, int mask) static int fuse_readlink_page(struct inode *inode, struct page *page) static int fuse_readlink_page(struct inode *inode, struct page *page) { { struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_req *req; struct fuse_page_desc desc = { .length = PAGE_SIZE - 1 }; int err; struct fuse_args_pages ap = { .num_pages = 1, .pages = &page, .descs = &desc, }; char *link; ssize_t res; ap.args.opcode = FUSE_READLINK; ap.args.nodeid = get_node_id(inode); ap.args.out_pages = true; ap.args.out_argvar = true; ap.args.page_zeroing = true; ap.args.out_numargs = 1; ap.args.out_args[0].size = desc.length; res = fuse_simple_request(fc, &ap.args); req = fuse_get_req(fc, 1); fuse_invalidate_atime(inode); if (IS_ERR(req)) return PTR_ERR(req); req->out.page_zeroing = 1; req->out.argpages = 1; req->num_pages = 1; req->pages[0] = page; req->page_descs[0].length = PAGE_SIZE - 1; req->in.h.opcode = FUSE_READLINK; req->in.h.nodeid = get_node_id(inode); req->out.argvar = 1; req->out.numargs = 1; req->out.args[0].size = PAGE_SIZE - 1; fuse_request_send(fc, req); err = req->out.h.error; if (!err) { if (res < 0) char *link = page_address(page); return res; size_t len = req->out.args[0].size; BUG_ON(len >= PAGE_SIZE); if (WARN_ON(res >= PAGE_SIZE)) link[len] = '\0'; return -EIO; } fuse_put_request(fc, req); link = page_address(page); fuse_invalidate_atime(inode); link[res] = '\0'; return err; return 0; } } static const char *fuse_get_link(struct dentry *dentry, struct inode *inode, static const char *fuse_get_link(struct dentry *dentry, struct inode *inode, Loading