1 /* 2 * net/sunrpc/rpc_pipe.c 3 * 4 * Userland/kernel interface for rpcauth_gss. 5 * Code shamelessly plagiarized from fs/nfsd/nfsctl.c 6 * and fs/sysfs/inode.c 7 * 8 * Copyright (c) 2002, Trond Myklebust <trond.myklebust@fys.uio.no> 9 * 10 */ 11 #include <linux/module.h> 12 #include <linux/slab.h> 13 #include <linux/string.h> 14 #include <linux/pagemap.h> 15 #include <linux/mount.h> 16 #include <linux/namei.h> 17 #include <linux/fsnotify.h> 18 #include <linux/kernel.h> 19 20 #include <asm/ioctls.h> 21 #include <linux/fs.h> 22 #include <linux/poll.h> 23 #include <linux/wait.h> 24 #include <linux/seq_file.h> 25 26 #include <linux/sunrpc/clnt.h> 27 #include <linux/workqueue.h> 28 #include <linux/sunrpc/rpc_pipe_fs.h> 29 #include <linux/sunrpc/cache.h> 30 #include <linux/smp_lock.h> 31 32 static struct vfsmount *rpc_mount __read_mostly; 33 static int rpc_mount_count; 34 35 static struct file_system_type rpc_pipe_fs_type; 36 37 38 static struct kmem_cache *rpc_inode_cachep __read_mostly; 39 40 #define RPC_UPCALL_TIMEOUT (30*HZ) 41 42 static void rpc_purge_list(struct rpc_inode *rpci, struct list_head *head, 43 void (*destroy_msg)(struct rpc_pipe_msg *), int err) 44 { 45 struct rpc_pipe_msg *msg; 46 47 if (list_empty(head)) 48 return; 49 do { 50 msg = list_entry(head->next, struct rpc_pipe_msg, list); 51 list_del_init(&msg->list); 52 msg->errno = err; 53 destroy_msg(msg); 54 } while (!list_empty(head)); 55 wake_up(&rpci->waitq); 56 } 57 58 static void 59 rpc_timeout_upcall_queue(struct work_struct *work) 60 { 61 LIST_HEAD(free_list); 62 struct rpc_inode *rpci = 63 container_of(work, struct rpc_inode, queue_timeout.work); 64 struct inode *inode = &rpci->vfs_inode; 65 void (*destroy_msg)(struct rpc_pipe_msg *); 66 67 spin_lock(&inode->i_lock); 68 if (rpci->ops == NULL) { 69 spin_unlock(&inode->i_lock); 70 return; 71 } 72 destroy_msg = rpci->ops->destroy_msg; 73 if (rpci->nreaders == 0) { 74 list_splice_init(&rpci->pipe, &free_list); 75 rpci->pipelen = 0; 76 } 77 spin_unlock(&inode->i_lock); 78 rpc_purge_list(rpci, &free_list, destroy_msg, -ETIMEDOUT); 79 } 80 81 /** 82 * rpc_queue_upcall - queue an upcall message to userspace 83 * @inode: inode of upcall pipe on which to queue given message 84 * @msg: message to queue 85 * 86 * Call with an @inode created by rpc_mkpipe() to queue an upcall. 87 * A userspace process may then later read the upcall by performing a 88 * read on an open file for this inode. It is up to the caller to 89 * initialize the fields of @msg (other than @msg->list) appropriately. 90 */ 91 int 92 rpc_queue_upcall(struct inode *inode, struct rpc_pipe_msg *msg) 93 { 94 struct rpc_inode *rpci = RPC_I(inode); 95 int res = -EPIPE; 96 97 spin_lock(&inode->i_lock); 98 if (rpci->ops == NULL) 99 goto out; 100 if (rpci->nreaders) { 101 list_add_tail(&msg->list, &rpci->pipe); 102 rpci->pipelen += msg->len; 103 res = 0; 104 } else if (rpci->flags & RPC_PIPE_WAIT_FOR_OPEN) { 105 if (list_empty(&rpci->pipe)) 106 queue_delayed_work(rpciod_workqueue, 107 &rpci->queue_timeout, 108 RPC_UPCALL_TIMEOUT); 109 list_add_tail(&msg->list, &rpci->pipe); 110 rpci->pipelen += msg->len; 111 res = 0; 112 } 113 out: 114 spin_unlock(&inode->i_lock); 115 wake_up(&rpci->waitq); 116 return res; 117 } 118 EXPORT_SYMBOL_GPL(rpc_queue_upcall); 119 120 static inline void 121 rpc_inode_setowner(struct inode *inode, void *private) 122 { 123 RPC_I(inode)->private = private; 124 } 125 126 static void 127 rpc_close_pipes(struct inode *inode) 128 { 129 struct rpc_inode *rpci = RPC_I(inode); 130 const struct rpc_pipe_ops *ops; 131 int need_release; 132 133 mutex_lock(&inode->i_mutex); 134 ops = rpci->ops; 135 if (ops != NULL) { 136 LIST_HEAD(free_list); 137 spin_lock(&inode->i_lock); 138 need_release = rpci->nreaders != 0 || rpci->nwriters != 0; 139 rpci->nreaders = 0; 140 list_splice_init(&rpci->in_upcall, &free_list); 141 list_splice_init(&rpci->pipe, &free_list); 142 rpci->pipelen = 0; 143 rpci->ops = NULL; 144 spin_unlock(&inode->i_lock); 145 rpc_purge_list(rpci, &free_list, ops->destroy_msg, -EPIPE); 146 rpci->nwriters = 0; 147 if (need_release && ops->release_pipe) 148 ops->release_pipe(inode); 149 cancel_delayed_work_sync(&rpci->queue_timeout); 150 } 151 rpc_inode_setowner(inode, NULL); 152 mutex_unlock(&inode->i_mutex); 153 } 154 155 static struct inode * 156 rpc_alloc_inode(struct super_block *sb) 157 { 158 struct rpc_inode *rpci; 159 rpci = (struct rpc_inode *)kmem_cache_alloc(rpc_inode_cachep, GFP_KERNEL); 160 if (!rpci) 161 return NULL; 162 return &rpci->vfs_inode; 163 } 164 165 static void 166 rpc_destroy_inode(struct inode *inode) 167 { 168 kmem_cache_free(rpc_inode_cachep, RPC_I(inode)); 169 } 170 171 static int 172 rpc_pipe_open(struct inode *inode, struct file *filp) 173 { 174 struct rpc_inode *rpci = RPC_I(inode); 175 int first_open; 176 int res = -ENXIO; 177 178 mutex_lock(&inode->i_mutex); 179 if (rpci->ops == NULL) 180 goto out; 181 first_open = rpci->nreaders == 0 && rpci->nwriters == 0; 182 if (first_open && rpci->ops->open_pipe) { 183 res = rpci->ops->open_pipe(inode); 184 if (res) 185 goto out; 186 } 187 if (filp->f_mode & FMODE_READ) 188 rpci->nreaders++; 189 if (filp->f_mode & FMODE_WRITE) 190 rpci->nwriters++; 191 res = 0; 192 out: 193 mutex_unlock(&inode->i_mutex); 194 return res; 195 } 196 197 static int 198 rpc_pipe_release(struct inode *inode, struct file *filp) 199 { 200 struct rpc_inode *rpci = RPC_I(inode); 201 struct rpc_pipe_msg *msg; 202 int last_close; 203 204 mutex_lock(&inode->i_mutex); 205 if (rpci->ops == NULL) 206 goto out; 207 msg = (struct rpc_pipe_msg *)filp->private_data; 208 if (msg != NULL) { 209 spin_lock(&inode->i_lock); 210 msg->errno = -EAGAIN; 211 list_del_init(&msg->list); 212 spin_unlock(&inode->i_lock); 213 rpci->ops->destroy_msg(msg); 214 } 215 if (filp->f_mode & FMODE_WRITE) 216 rpci->nwriters --; 217 if (filp->f_mode & FMODE_READ) { 218 rpci->nreaders --; 219 if (rpci->nreaders == 0) { 220 LIST_HEAD(free_list); 221 spin_lock(&inode->i_lock); 222 list_splice_init(&rpci->pipe, &free_list); 223 rpci->pipelen = 0; 224 spin_unlock(&inode->i_lock); 225 rpc_purge_list(rpci, &free_list, 226 rpci->ops->destroy_msg, -EAGAIN); 227 } 228 } 229 last_close = rpci->nwriters == 0 && rpci->nreaders == 0; 230 if (last_close && rpci->ops->release_pipe) 231 rpci->ops->release_pipe(inode); 232 out: 233 mutex_unlock(&inode->i_mutex); 234 return 0; 235 } 236 237 static ssize_t 238 rpc_pipe_read(struct file *filp, char __user *buf, size_t len, loff_t *offset) 239 { 240 struct inode *inode = filp->f_path.dentry->d_inode; 241 struct rpc_inode *rpci = RPC_I(inode); 242 struct rpc_pipe_msg *msg; 243 int res = 0; 244 245 mutex_lock(&inode->i_mutex); 246 if (rpci->ops == NULL) { 247 res = -EPIPE; 248 goto out_unlock; 249 } 250 msg = filp->private_data; 251 if (msg == NULL) { 252 spin_lock(&inode->i_lock); 253 if (!list_empty(&rpci->pipe)) { 254 msg = list_entry(rpci->pipe.next, 255 struct rpc_pipe_msg, 256 list); 257 list_move(&msg->list, &rpci->in_upcall); 258 rpci->pipelen -= msg->len; 259 filp->private_data = msg; 260 msg->copied = 0; 261 } 262 spin_unlock(&inode->i_lock); 263 if (msg == NULL) 264 goto out_unlock; 265 } 266 /* NOTE: it is up to the callback to update msg->copied */ 267 res = rpci->ops->upcall(filp, msg, buf, len); 268 if (res < 0 || msg->len == msg->copied) { 269 filp->private_data = NULL; 270 spin_lock(&inode->i_lock); 271 list_del_init(&msg->list); 272 spin_unlock(&inode->i_lock); 273 rpci->ops->destroy_msg(msg); 274 } 275 out_unlock: 276 mutex_unlock(&inode->i_mutex); 277 return res; 278 } 279 280 static ssize_t 281 rpc_pipe_write(struct file *filp, const char __user *buf, size_t len, loff_t *offset) 282 { 283 struct inode *inode = filp->f_path.dentry->d_inode; 284 struct rpc_inode *rpci = RPC_I(inode); 285 int res; 286 287 mutex_lock(&inode->i_mutex); 288 res = -EPIPE; 289 if (rpci->ops != NULL) 290 res = rpci->ops->downcall(filp, buf, len); 291 mutex_unlock(&inode->i_mutex); 292 return res; 293 } 294 295 static unsigned int 296 rpc_pipe_poll(struct file *filp, struct poll_table_struct *wait) 297 { 298 struct rpc_inode *rpci; 299 unsigned int mask = 0; 300 301 rpci = RPC_I(filp->f_path.dentry->d_inode); 302 poll_wait(filp, &rpci->waitq, wait); 303 304 mask = POLLOUT | POLLWRNORM; 305 if (rpci->ops == NULL) 306 mask |= POLLERR | POLLHUP; 307 if (filp->private_data || !list_empty(&rpci->pipe)) 308 mask |= POLLIN | POLLRDNORM; 309 return mask; 310 } 311 312 static int 313 rpc_pipe_ioctl_unlocked(struct file *filp, unsigned int cmd, unsigned long arg) 314 { 315 struct rpc_inode *rpci = RPC_I(filp->f_path.dentry->d_inode); 316 int len; 317 318 switch (cmd) { 319 case FIONREAD: 320 if (rpci->ops == NULL) 321 return -EPIPE; 322 len = rpci->pipelen; 323 if (filp->private_data) { 324 struct rpc_pipe_msg *msg; 325 msg = (struct rpc_pipe_msg *)filp->private_data; 326 len += msg->len - msg->copied; 327 } 328 return put_user(len, (int __user *)arg); 329 default: 330 return -EINVAL; 331 } 332 } 333 334 static long 335 rpc_pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 336 { 337 long ret; 338 339 lock_kernel(); 340 ret = rpc_pipe_ioctl_unlocked(filp, cmd, arg); 341 unlock_kernel(); 342 343 return ret; 344 } 345 346 static const struct file_operations rpc_pipe_fops = { 347 .owner = THIS_MODULE, 348 .llseek = no_llseek, 349 .read = rpc_pipe_read, 350 .write = rpc_pipe_write, 351 .poll = rpc_pipe_poll, 352 .unlocked_ioctl = rpc_pipe_ioctl, 353 .open = rpc_pipe_open, 354 .release = rpc_pipe_release, 355 }; 356 357 static int 358 rpc_show_info(struct seq_file *m, void *v) 359 { 360 struct rpc_clnt *clnt = m->private; 361 362 seq_printf(m, "RPC server: %s\n", clnt->cl_server); 363 seq_printf(m, "service: %s (%d) version %d\n", clnt->cl_protname, 364 clnt->cl_prog, clnt->cl_vers); 365 seq_printf(m, "address: %s\n", rpc_peeraddr2str(clnt, RPC_DISPLAY_ADDR)); 366 seq_printf(m, "protocol: %s\n", rpc_peeraddr2str(clnt, RPC_DISPLAY_PROTO)); 367 seq_printf(m, "port: %s\n", rpc_peeraddr2str(clnt, RPC_DISPLAY_PORT)); 368 return 0; 369 } 370 371 static int 372 rpc_info_open(struct inode *inode, struct file *file) 373 { 374 struct rpc_clnt *clnt = NULL; 375 int ret = single_open(file, rpc_show_info, NULL); 376 377 if (!ret) { 378 struct seq_file *m = file->private_data; 379 380 spin_lock(&file->f_path.dentry->d_lock); 381 if (!d_unhashed(file->f_path.dentry)) 382 clnt = RPC_I(inode)->private; 383 if (clnt != NULL && atomic_inc_not_zero(&clnt->cl_count)) { 384 spin_unlock(&file->f_path.dentry->d_lock); 385 m->private = clnt; 386 } else { 387 spin_unlock(&file->f_path.dentry->d_lock); 388 single_release(inode, file); 389 ret = -EINVAL; 390 } 391 } 392 return ret; 393 } 394 395 static int 396 rpc_info_release(struct inode *inode, struct file *file) 397 { 398 struct seq_file *m = file->private_data; 399 struct rpc_clnt *clnt = (struct rpc_clnt *)m->private; 400 401 if (clnt) 402 rpc_release_client(clnt); 403 return single_release(inode, file); 404 } 405 406 static const struct file_operations rpc_info_operations = { 407 .owner = THIS_MODULE, 408 .open = rpc_info_open, 409 .read = seq_read, 410 .llseek = seq_lseek, 411 .release = rpc_info_release, 412 }; 413 414 415 /* 416 * Description of fs contents. 417 */ 418 struct rpc_filelist { 419 const char *name; 420 const struct file_operations *i_fop; 421 umode_t mode; 422 }; 423 424 struct vfsmount *rpc_get_mount(void) 425 { 426 int err; 427 428 err = simple_pin_fs(&rpc_pipe_fs_type, &rpc_mount, &rpc_mount_count); 429 if (err != 0) 430 return ERR_PTR(err); 431 return rpc_mount; 432 } 433 EXPORT_SYMBOL_GPL(rpc_get_mount); 434 435 void rpc_put_mount(void) 436 { 437 simple_release_fs(&rpc_mount, &rpc_mount_count); 438 } 439 EXPORT_SYMBOL_GPL(rpc_put_mount); 440 441 static int rpc_delete_dentry(struct dentry *dentry) 442 { 443 return 1; 444 } 445 446 static const struct dentry_operations rpc_dentry_operations = { 447 .d_delete = rpc_delete_dentry, 448 }; 449 450 static struct inode * 451 rpc_get_inode(struct super_block *sb, umode_t mode) 452 { 453 struct inode *inode = new_inode(sb); 454 if (!inode) 455 return NULL; 456 inode->i_mode = mode; 457 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 458 switch(mode & S_IFMT) { 459 case S_IFDIR: 460 inode->i_fop = &simple_dir_operations; 461 inode->i_op = &simple_dir_inode_operations; 462 inc_nlink(inode); 463 default: 464 break; 465 } 466 return inode; 467 } 468 469 static int __rpc_create_common(struct inode *dir, struct dentry *dentry, 470 umode_t mode, 471 const struct file_operations *i_fop, 472 void *private) 473 { 474 struct inode *inode; 475 476 BUG_ON(!d_unhashed(dentry)); 477 inode = rpc_get_inode(dir->i_sb, mode); 478 if (!inode) 479 goto out_err; 480 inode->i_ino = iunique(dir->i_sb, 100); 481 if (i_fop) 482 inode->i_fop = i_fop; 483 if (private) 484 rpc_inode_setowner(inode, private); 485 d_add(dentry, inode); 486 return 0; 487 out_err: 488 printk(KERN_WARNING "%s: %s failed to allocate inode for dentry %s\n", 489 __FILE__, __func__, dentry->d_name.name); 490 dput(dentry); 491 return -ENOMEM; 492 } 493 494 static int __rpc_create(struct inode *dir, struct dentry *dentry, 495 umode_t mode, 496 const struct file_operations *i_fop, 497 void *private) 498 { 499 int err; 500 501 err = __rpc_create_common(dir, dentry, S_IFREG | mode, i_fop, private); 502 if (err) 503 return err; 504 fsnotify_create(dir, dentry); 505 return 0; 506 } 507 508 static int __rpc_mkdir(struct inode *dir, struct dentry *dentry, 509 umode_t mode, 510 const struct file_operations *i_fop, 511 void *private) 512 { 513 int err; 514 515 err = __rpc_create_common(dir, dentry, S_IFDIR | mode, i_fop, private); 516 if (err) 517 return err; 518 inc_nlink(dir); 519 fsnotify_mkdir(dir, dentry); 520 return 0; 521 } 522 523 static int __rpc_mkpipe(struct inode *dir, struct dentry *dentry, 524 umode_t mode, 525 const struct file_operations *i_fop, 526 void *private, 527 const struct rpc_pipe_ops *ops, 528 int flags) 529 { 530 struct rpc_inode *rpci; 531 int err; 532 533 err = __rpc_create_common(dir, dentry, S_IFIFO | mode, i_fop, private); 534 if (err) 535 return err; 536 rpci = RPC_I(dentry->d_inode); 537 rpci->nkern_readwriters = 1; 538 rpci->private = private; 539 rpci->flags = flags; 540 rpci->ops = ops; 541 fsnotify_create(dir, dentry); 542 return 0; 543 } 544 545 static int __rpc_rmdir(struct inode *dir, struct dentry *dentry) 546 { 547 int ret; 548 549 dget(dentry); 550 ret = simple_rmdir(dir, dentry); 551 d_delete(dentry); 552 dput(dentry); 553 return ret; 554 } 555 556 static int __rpc_unlink(struct inode *dir, struct dentry *dentry) 557 { 558 int ret; 559 560 dget(dentry); 561 ret = simple_unlink(dir, dentry); 562 d_delete(dentry); 563 dput(dentry); 564 return ret; 565 } 566 567 static int __rpc_rmpipe(struct inode *dir, struct dentry *dentry) 568 { 569 struct inode *inode = dentry->d_inode; 570 struct rpc_inode *rpci = RPC_I(inode); 571 572 rpci->nkern_readwriters--; 573 if (rpci->nkern_readwriters != 0) 574 return 0; 575 rpc_close_pipes(inode); 576 return __rpc_unlink(dir, dentry); 577 } 578 579 static struct dentry *__rpc_lookup_create(struct dentry *parent, 580 struct qstr *name) 581 { 582 struct dentry *dentry; 583 584 dentry = d_lookup(parent, name); 585 if (!dentry) { 586 dentry = d_alloc(parent, name); 587 if (!dentry) { 588 dentry = ERR_PTR(-ENOMEM); 589 goto out_err; 590 } 591 } 592 if (!dentry->d_inode) 593 dentry->d_op = &rpc_dentry_operations; 594 out_err: 595 return dentry; 596 } 597 598 static struct dentry *__rpc_lookup_create_exclusive(struct dentry *parent, 599 struct qstr *name) 600 { 601 struct dentry *dentry; 602 603 dentry = __rpc_lookup_create(parent, name); 604 if (IS_ERR(dentry)) 605 return dentry; 606 if (dentry->d_inode == NULL) 607 return dentry; 608 dput(dentry); 609 return ERR_PTR(-EEXIST); 610 } 611 612 /* 613 * FIXME: This probably has races. 614 */ 615 static void __rpc_depopulate(struct dentry *parent, 616 const struct rpc_filelist *files, 617 int start, int eof) 618 { 619 struct inode *dir = parent->d_inode; 620 struct dentry *dentry; 621 struct qstr name; 622 int i; 623 624 for (i = start; i < eof; i++) { 625 name.name = files[i].name; 626 name.len = strlen(files[i].name); 627 name.hash = full_name_hash(name.name, name.len); 628 dentry = d_lookup(parent, &name); 629 630 if (dentry == NULL) 631 continue; 632 if (dentry->d_inode == NULL) 633 goto next; 634 switch (dentry->d_inode->i_mode & S_IFMT) { 635 default: 636 BUG(); 637 case S_IFREG: 638 __rpc_unlink(dir, dentry); 639 break; 640 case S_IFDIR: 641 __rpc_rmdir(dir, dentry); 642 } 643 next: 644 dput(dentry); 645 } 646 } 647 648 static void rpc_depopulate(struct dentry *parent, 649 const struct rpc_filelist *files, 650 int start, int eof) 651 { 652 struct inode *dir = parent->d_inode; 653 654 mutex_lock_nested(&dir->i_mutex, I_MUTEX_CHILD); 655 __rpc_depopulate(parent, files, start, eof); 656 mutex_unlock(&dir->i_mutex); 657 } 658 659 static int rpc_populate(struct dentry *parent, 660 const struct rpc_filelist *files, 661 int start, int eof, 662 void *private) 663 { 664 struct inode *dir = parent->d_inode; 665 struct dentry *dentry; 666 int i, err; 667 668 mutex_lock(&dir->i_mutex); 669 for (i = start; i < eof; i++) { 670 struct qstr q; 671 672 q.name = files[i].name; 673 q.len = strlen(files[i].name); 674 q.hash = full_name_hash(q.name, q.len); 675 dentry = __rpc_lookup_create_exclusive(parent, &q); 676 err = PTR_ERR(dentry); 677 if (IS_ERR(dentry)) 678 goto out_bad; 679 switch (files[i].mode & S_IFMT) { 680 default: 681 BUG(); 682 case S_IFREG: 683 err = __rpc_create(dir, dentry, 684 files[i].mode, 685 files[i].i_fop, 686 private); 687 break; 688 case S_IFDIR: 689 err = __rpc_mkdir(dir, dentry, 690 files[i].mode, 691 NULL, 692 private); 693 } 694 if (err != 0) 695 goto out_bad; 696 } 697 mutex_unlock(&dir->i_mutex); 698 return 0; 699 out_bad: 700 __rpc_depopulate(parent, files, start, eof); 701 mutex_unlock(&dir->i_mutex); 702 printk(KERN_WARNING "%s: %s failed to populate directory %s\n", 703 __FILE__, __func__, parent->d_name.name); 704 return err; 705 } 706 707 static struct dentry *rpc_mkdir_populate(struct dentry *parent, 708 struct qstr *name, umode_t mode, void *private, 709 int (*populate)(struct dentry *, void *), void *args_populate) 710 { 711 struct dentry *dentry; 712 struct inode *dir = parent->d_inode; 713 int error; 714 715 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 716 dentry = __rpc_lookup_create_exclusive(parent, name); 717 if (IS_ERR(dentry)) 718 goto out; 719 error = __rpc_mkdir(dir, dentry, mode, NULL, private); 720 if (error != 0) 721 goto out_err; 722 if (populate != NULL) { 723 error = populate(dentry, args_populate); 724 if (error) 725 goto err_rmdir; 726 } 727 out: 728 mutex_unlock(&dir->i_mutex); 729 return dentry; 730 err_rmdir: 731 __rpc_rmdir(dir, dentry); 732 out_err: 733 dentry = ERR_PTR(error); 734 goto out; 735 } 736 737 static int rpc_rmdir_depopulate(struct dentry *dentry, 738 void (*depopulate)(struct dentry *)) 739 { 740 struct dentry *parent; 741 struct inode *dir; 742 int error; 743 744 parent = dget_parent(dentry); 745 dir = parent->d_inode; 746 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 747 if (depopulate != NULL) 748 depopulate(dentry); 749 error = __rpc_rmdir(dir, dentry); 750 mutex_unlock(&dir->i_mutex); 751 dput(parent); 752 return error; 753 } 754 755 /** 756 * rpc_mkpipe - make an rpc_pipefs file for kernel<->userspace communication 757 * @parent: dentry of directory to create new "pipe" in 758 * @name: name of pipe 759 * @private: private data to associate with the pipe, for the caller's use 760 * @ops: operations defining the behavior of the pipe: upcall, downcall, 761 * release_pipe, open_pipe, and destroy_msg. 762 * @flags: rpc_inode flags 763 * 764 * Data is made available for userspace to read by calls to 765 * rpc_queue_upcall(). The actual reads will result in calls to 766 * @ops->upcall, which will be called with the file pointer, 767 * message, and userspace buffer to copy to. 768 * 769 * Writes can come at any time, and do not necessarily have to be 770 * responses to upcalls. They will result in calls to @msg->downcall. 771 * 772 * The @private argument passed here will be available to all these methods 773 * from the file pointer, via RPC_I(file->f_dentry->d_inode)->private. 774 */ 775 struct dentry *rpc_mkpipe(struct dentry *parent, const char *name, 776 void *private, const struct rpc_pipe_ops *ops, 777 int flags) 778 { 779 struct dentry *dentry; 780 struct inode *dir = parent->d_inode; 781 umode_t umode = S_IFIFO | S_IRUSR | S_IWUSR; 782 struct qstr q; 783 int err; 784 785 if (ops->upcall == NULL) 786 umode &= ~S_IRUGO; 787 if (ops->downcall == NULL) 788 umode &= ~S_IWUGO; 789 790 q.name = name; 791 q.len = strlen(name); 792 q.hash = full_name_hash(q.name, q.len), 793 794 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 795 dentry = __rpc_lookup_create(parent, &q); 796 if (IS_ERR(dentry)) 797 goto out; 798 if (dentry->d_inode) { 799 struct rpc_inode *rpci = RPC_I(dentry->d_inode); 800 if (rpci->private != private || 801 rpci->ops != ops || 802 rpci->flags != flags) { 803 dput (dentry); 804 err = -EBUSY; 805 goto out_err; 806 } 807 rpci->nkern_readwriters++; 808 goto out; 809 } 810 811 err = __rpc_mkpipe(dir, dentry, umode, &rpc_pipe_fops, 812 private, ops, flags); 813 if (err) 814 goto out_err; 815 out: 816 mutex_unlock(&dir->i_mutex); 817 return dentry; 818 out_err: 819 dentry = ERR_PTR(err); 820 printk(KERN_WARNING "%s: %s() failed to create pipe %s/%s (errno = %d)\n", 821 __FILE__, __func__, parent->d_name.name, name, 822 err); 823 goto out; 824 } 825 EXPORT_SYMBOL_GPL(rpc_mkpipe); 826 827 /** 828 * rpc_unlink - remove a pipe 829 * @dentry: dentry for the pipe, as returned from rpc_mkpipe 830 * 831 * After this call, lookups will no longer find the pipe, and any 832 * attempts to read or write using preexisting opens of the pipe will 833 * return -EPIPE. 834 */ 835 int 836 rpc_unlink(struct dentry *dentry) 837 { 838 struct dentry *parent; 839 struct inode *dir; 840 int error = 0; 841 842 parent = dget_parent(dentry); 843 dir = parent->d_inode; 844 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 845 error = __rpc_rmpipe(dir, dentry); 846 mutex_unlock(&dir->i_mutex); 847 dput(parent); 848 return error; 849 } 850 EXPORT_SYMBOL_GPL(rpc_unlink); 851 852 enum { 853 RPCAUTH_info, 854 RPCAUTH_EOF 855 }; 856 857 static const struct rpc_filelist authfiles[] = { 858 [RPCAUTH_info] = { 859 .name = "info", 860 .i_fop = &rpc_info_operations, 861 .mode = S_IFREG | S_IRUSR, 862 }, 863 }; 864 865 static int rpc_clntdir_populate(struct dentry *dentry, void *private) 866 { 867 return rpc_populate(dentry, 868 authfiles, RPCAUTH_info, RPCAUTH_EOF, 869 private); 870 } 871 872 static void rpc_clntdir_depopulate(struct dentry *dentry) 873 { 874 rpc_depopulate(dentry, authfiles, RPCAUTH_info, RPCAUTH_EOF); 875 } 876 877 /** 878 * rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs 879 * @dentry: dentry from the rpc_pipefs root to the new directory 880 * @name: &struct qstr for the name 881 * @rpc_client: rpc client to associate with this directory 882 * 883 * This creates a directory at the given @path associated with 884 * @rpc_clnt, which will contain a file named "info" with some basic 885 * information about the client, together with any "pipes" that may 886 * later be created using rpc_mkpipe(). 887 */ 888 struct dentry *rpc_create_client_dir(struct dentry *dentry, 889 struct qstr *name, 890 struct rpc_clnt *rpc_client) 891 { 892 return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL, 893 rpc_clntdir_populate, rpc_client); 894 } 895 896 /** 897 * rpc_remove_client_dir - Remove a directory created with rpc_create_client_dir() 898 * @dentry: directory to remove 899 */ 900 int rpc_remove_client_dir(struct dentry *dentry) 901 { 902 return rpc_rmdir_depopulate(dentry, rpc_clntdir_depopulate); 903 } 904 905 static const struct rpc_filelist cache_pipefs_files[3] = { 906 [0] = { 907 .name = "channel", 908 .i_fop = &cache_file_operations_pipefs, 909 .mode = S_IFREG|S_IRUSR|S_IWUSR, 910 }, 911 [1] = { 912 .name = "content", 913 .i_fop = &content_file_operations_pipefs, 914 .mode = S_IFREG|S_IRUSR, 915 }, 916 [2] = { 917 .name = "flush", 918 .i_fop = &cache_flush_operations_pipefs, 919 .mode = S_IFREG|S_IRUSR|S_IWUSR, 920 }, 921 }; 922 923 static int rpc_cachedir_populate(struct dentry *dentry, void *private) 924 { 925 return rpc_populate(dentry, 926 cache_pipefs_files, 0, 3, 927 private); 928 } 929 930 static void rpc_cachedir_depopulate(struct dentry *dentry) 931 { 932 rpc_depopulate(dentry, cache_pipefs_files, 0, 3); 933 } 934 935 struct dentry *rpc_create_cache_dir(struct dentry *parent, struct qstr *name, 936 mode_t umode, struct cache_detail *cd) 937 { 938 return rpc_mkdir_populate(parent, name, umode, NULL, 939 rpc_cachedir_populate, cd); 940 } 941 942 void rpc_remove_cache_dir(struct dentry *dentry) 943 { 944 rpc_rmdir_depopulate(dentry, rpc_cachedir_depopulate); 945 } 946 947 /* 948 * populate the filesystem 949 */ 950 static const struct super_operations s_ops = { 951 .alloc_inode = rpc_alloc_inode, 952 .destroy_inode = rpc_destroy_inode, 953 .statfs = simple_statfs, 954 }; 955 956 #define RPCAUTH_GSSMAGIC 0x67596969 957 958 /* 959 * We have a single directory with 1 node in it. 960 */ 961 enum { 962 RPCAUTH_lockd, 963 RPCAUTH_mount, 964 RPCAUTH_nfs, 965 RPCAUTH_portmap, 966 RPCAUTH_statd, 967 RPCAUTH_nfsd4_cb, 968 RPCAUTH_cache, 969 RPCAUTH_RootEOF 970 }; 971 972 static const struct rpc_filelist files[] = { 973 [RPCAUTH_lockd] = { 974 .name = "lockd", 975 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 976 }, 977 [RPCAUTH_mount] = { 978 .name = "mount", 979 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 980 }, 981 [RPCAUTH_nfs] = { 982 .name = "nfs", 983 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 984 }, 985 [RPCAUTH_portmap] = { 986 .name = "portmap", 987 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 988 }, 989 [RPCAUTH_statd] = { 990 .name = "statd", 991 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 992 }, 993 [RPCAUTH_nfsd4_cb] = { 994 .name = "nfsd4_cb", 995 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 996 }, 997 [RPCAUTH_cache] = { 998 .name = "cache", 999 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 1000 }, 1001 }; 1002 1003 static int 1004 rpc_fill_super(struct super_block *sb, void *data, int silent) 1005 { 1006 struct inode *inode; 1007 struct dentry *root; 1008 1009 sb->s_blocksize = PAGE_CACHE_SIZE; 1010 sb->s_blocksize_bits = PAGE_CACHE_SHIFT; 1011 sb->s_magic = RPCAUTH_GSSMAGIC; 1012 sb->s_op = &s_ops; 1013 sb->s_time_gran = 1; 1014 1015 inode = rpc_get_inode(sb, S_IFDIR | 0755); 1016 if (!inode) 1017 return -ENOMEM; 1018 sb->s_root = root = d_alloc_root(inode); 1019 if (!root) { 1020 iput(inode); 1021 return -ENOMEM; 1022 } 1023 if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL)) 1024 return -ENOMEM; 1025 return 0; 1026 } 1027 1028 static int 1029 rpc_get_sb(struct file_system_type *fs_type, 1030 int flags, const char *dev_name, void *data, struct vfsmount *mnt) 1031 { 1032 return get_sb_single(fs_type, flags, data, rpc_fill_super, mnt); 1033 } 1034 1035 static struct file_system_type rpc_pipe_fs_type = { 1036 .owner = THIS_MODULE, 1037 .name = "rpc_pipefs", 1038 .get_sb = rpc_get_sb, 1039 .kill_sb = kill_litter_super, 1040 }; 1041 1042 static void 1043 init_once(void *foo) 1044 { 1045 struct rpc_inode *rpci = (struct rpc_inode *) foo; 1046 1047 inode_init_once(&rpci->vfs_inode); 1048 rpci->private = NULL; 1049 rpci->nreaders = 0; 1050 rpci->nwriters = 0; 1051 INIT_LIST_HEAD(&rpci->in_upcall); 1052 INIT_LIST_HEAD(&rpci->in_downcall); 1053 INIT_LIST_HEAD(&rpci->pipe); 1054 rpci->pipelen = 0; 1055 init_waitqueue_head(&rpci->waitq); 1056 INIT_DELAYED_WORK(&rpci->queue_timeout, 1057 rpc_timeout_upcall_queue); 1058 rpci->ops = NULL; 1059 } 1060 1061 int register_rpc_pipefs(void) 1062 { 1063 int err; 1064 1065 rpc_inode_cachep = kmem_cache_create("rpc_inode_cache", 1066 sizeof(struct rpc_inode), 1067 0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT| 1068 SLAB_MEM_SPREAD), 1069 init_once); 1070 if (!rpc_inode_cachep) 1071 return -ENOMEM; 1072 err = register_filesystem(&rpc_pipe_fs_type); 1073 if (err) { 1074 kmem_cache_destroy(rpc_inode_cachep); 1075 return err; 1076 } 1077 1078 return 0; 1079 } 1080 1081 void unregister_rpc_pipefs(void) 1082 { 1083 kmem_cache_destroy(rpc_inode_cachep); 1084 unregister_filesystem(&rpc_pipe_fs_type); 1085 } 1086