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(&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(&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(&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; 375 int ret = single_open(file, rpc_show_info, NULL); 376 377 if (!ret) { 378 struct seq_file *m = file->private_data; 379 mutex_lock(&inode->i_mutex); 380 clnt = RPC_I(inode)->private; 381 if (clnt) { 382 kref_get(&clnt->cl_kref); 383 m->private = clnt; 384 } else { 385 single_release(inode, file); 386 ret = -EINVAL; 387 } 388 mutex_unlock(&inode->i_mutex); 389 } 390 return ret; 391 } 392 393 static int 394 rpc_info_release(struct inode *inode, struct file *file) 395 { 396 struct seq_file *m = file->private_data; 397 struct rpc_clnt *clnt = (struct rpc_clnt *)m->private; 398 399 if (clnt) 400 rpc_release_client(clnt); 401 return single_release(inode, file); 402 } 403 404 static const struct file_operations rpc_info_operations = { 405 .owner = THIS_MODULE, 406 .open = rpc_info_open, 407 .read = seq_read, 408 .llseek = seq_lseek, 409 .release = rpc_info_release, 410 }; 411 412 413 /* 414 * Description of fs contents. 415 */ 416 struct rpc_filelist { 417 const char *name; 418 const struct file_operations *i_fop; 419 umode_t mode; 420 }; 421 422 struct vfsmount *rpc_get_mount(void) 423 { 424 int err; 425 426 err = simple_pin_fs(&rpc_pipe_fs_type, &rpc_mount, &rpc_mount_count); 427 if (err != 0) 428 return ERR_PTR(err); 429 return rpc_mount; 430 } 431 EXPORT_SYMBOL_GPL(rpc_get_mount); 432 433 void rpc_put_mount(void) 434 { 435 simple_release_fs(&rpc_mount, &rpc_mount_count); 436 } 437 EXPORT_SYMBOL_GPL(rpc_put_mount); 438 439 static int rpc_delete_dentry(struct dentry *dentry) 440 { 441 return 1; 442 } 443 444 static const struct dentry_operations rpc_dentry_operations = { 445 .d_delete = rpc_delete_dentry, 446 }; 447 448 static struct inode * 449 rpc_get_inode(struct super_block *sb, umode_t mode) 450 { 451 struct inode *inode = new_inode(sb); 452 if (!inode) 453 return NULL; 454 inode->i_mode = mode; 455 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 456 switch(mode & S_IFMT) { 457 case S_IFDIR: 458 inode->i_fop = &simple_dir_operations; 459 inode->i_op = &simple_dir_inode_operations; 460 inc_nlink(inode); 461 default: 462 break; 463 } 464 return inode; 465 } 466 467 static int __rpc_create_common(struct inode *dir, struct dentry *dentry, 468 umode_t mode, 469 const struct file_operations *i_fop, 470 void *private) 471 { 472 struct inode *inode; 473 474 BUG_ON(!d_unhashed(dentry)); 475 inode = rpc_get_inode(dir->i_sb, mode); 476 if (!inode) 477 goto out_err; 478 inode->i_ino = iunique(dir->i_sb, 100); 479 if (i_fop) 480 inode->i_fop = i_fop; 481 if (private) 482 rpc_inode_setowner(inode, private); 483 d_add(dentry, inode); 484 return 0; 485 out_err: 486 printk(KERN_WARNING "%s: %s failed to allocate inode for dentry %s\n", 487 __FILE__, __func__, dentry->d_name.name); 488 dput(dentry); 489 return -ENOMEM; 490 } 491 492 static int __rpc_create(struct inode *dir, struct dentry *dentry, 493 umode_t mode, 494 const struct file_operations *i_fop, 495 void *private) 496 { 497 int err; 498 499 err = __rpc_create_common(dir, dentry, S_IFREG | mode, i_fop, private); 500 if (err) 501 return err; 502 fsnotify_create(dir, dentry); 503 return 0; 504 } 505 506 static int __rpc_mkdir(struct inode *dir, struct dentry *dentry, 507 umode_t mode, 508 const struct file_operations *i_fop, 509 void *private) 510 { 511 int err; 512 513 err = __rpc_create_common(dir, dentry, S_IFDIR | mode, i_fop, private); 514 if (err) 515 return err; 516 inc_nlink(dir); 517 fsnotify_mkdir(dir, dentry); 518 return 0; 519 } 520 521 static int __rpc_mkpipe(struct inode *dir, struct dentry *dentry, 522 umode_t mode, 523 const struct file_operations *i_fop, 524 void *private, 525 const struct rpc_pipe_ops *ops, 526 int flags) 527 { 528 struct rpc_inode *rpci; 529 int err; 530 531 err = __rpc_create_common(dir, dentry, S_IFIFO | mode, i_fop, private); 532 if (err) 533 return err; 534 rpci = RPC_I(dentry->d_inode); 535 rpci->nkern_readwriters = 1; 536 rpci->private = private; 537 rpci->flags = flags; 538 rpci->ops = ops; 539 fsnotify_create(dir, dentry); 540 return 0; 541 } 542 543 static int __rpc_rmdir(struct inode *dir, struct dentry *dentry) 544 { 545 int ret; 546 547 dget(dentry); 548 ret = simple_rmdir(dir, dentry); 549 d_delete(dentry); 550 dput(dentry); 551 return ret; 552 } 553 554 static int __rpc_unlink(struct inode *dir, struct dentry *dentry) 555 { 556 int ret; 557 558 dget(dentry); 559 ret = simple_unlink(dir, dentry); 560 d_delete(dentry); 561 dput(dentry); 562 return ret; 563 } 564 565 static int __rpc_rmpipe(struct inode *dir, struct dentry *dentry) 566 { 567 struct inode *inode = dentry->d_inode; 568 struct rpc_inode *rpci = RPC_I(inode); 569 570 rpci->nkern_readwriters--; 571 if (rpci->nkern_readwriters != 0) 572 return 0; 573 rpc_close_pipes(inode); 574 return __rpc_unlink(dir, dentry); 575 } 576 577 static struct dentry *__rpc_lookup_create(struct dentry *parent, 578 struct qstr *name) 579 { 580 struct dentry *dentry; 581 582 dentry = d_lookup(parent, name); 583 if (!dentry) { 584 dentry = d_alloc(parent, name); 585 if (!dentry) { 586 dentry = ERR_PTR(-ENOMEM); 587 goto out_err; 588 } 589 } 590 if (!dentry->d_inode) 591 dentry->d_op = &rpc_dentry_operations; 592 out_err: 593 return dentry; 594 } 595 596 static struct dentry *__rpc_lookup_create_exclusive(struct dentry *parent, 597 struct qstr *name) 598 { 599 struct dentry *dentry; 600 601 dentry = __rpc_lookup_create(parent, name); 602 if (IS_ERR(dentry)) 603 return dentry; 604 if (dentry->d_inode == NULL) 605 return dentry; 606 dput(dentry); 607 return ERR_PTR(-EEXIST); 608 } 609 610 /* 611 * FIXME: This probably has races. 612 */ 613 static void __rpc_depopulate(struct dentry *parent, 614 const struct rpc_filelist *files, 615 int start, int eof) 616 { 617 struct inode *dir = parent->d_inode; 618 struct dentry *dentry; 619 struct qstr name; 620 int i; 621 622 for (i = start; i < eof; i++) { 623 name.name = files[i].name; 624 name.len = strlen(files[i].name); 625 name.hash = full_name_hash(name.name, name.len); 626 dentry = d_lookup(parent, &name); 627 628 if (dentry == NULL) 629 continue; 630 if (dentry->d_inode == NULL) 631 goto next; 632 switch (dentry->d_inode->i_mode & S_IFMT) { 633 default: 634 BUG(); 635 case S_IFREG: 636 __rpc_unlink(dir, dentry); 637 break; 638 case S_IFDIR: 639 __rpc_rmdir(dir, dentry); 640 } 641 next: 642 dput(dentry); 643 } 644 } 645 646 static void rpc_depopulate(struct dentry *parent, 647 const struct rpc_filelist *files, 648 int start, int eof) 649 { 650 struct inode *dir = parent->d_inode; 651 652 mutex_lock_nested(&dir->i_mutex, I_MUTEX_CHILD); 653 __rpc_depopulate(parent, files, start, eof); 654 mutex_unlock(&dir->i_mutex); 655 } 656 657 static int rpc_populate(struct dentry *parent, 658 const struct rpc_filelist *files, 659 int start, int eof, 660 void *private) 661 { 662 struct inode *dir = parent->d_inode; 663 struct dentry *dentry; 664 int i, err; 665 666 mutex_lock(&dir->i_mutex); 667 for (i = start; i < eof; i++) { 668 struct qstr q; 669 670 q.name = files[i].name; 671 q.len = strlen(files[i].name); 672 q.hash = full_name_hash(q.name, q.len); 673 dentry = __rpc_lookup_create_exclusive(parent, &q); 674 err = PTR_ERR(dentry); 675 if (IS_ERR(dentry)) 676 goto out_bad; 677 switch (files[i].mode & S_IFMT) { 678 default: 679 BUG(); 680 case S_IFREG: 681 err = __rpc_create(dir, dentry, 682 files[i].mode, 683 files[i].i_fop, 684 private); 685 break; 686 case S_IFDIR: 687 err = __rpc_mkdir(dir, dentry, 688 files[i].mode, 689 NULL, 690 private); 691 } 692 if (err != 0) 693 goto out_bad; 694 } 695 mutex_unlock(&dir->i_mutex); 696 return 0; 697 out_bad: 698 __rpc_depopulate(parent, files, start, eof); 699 mutex_unlock(&dir->i_mutex); 700 printk(KERN_WARNING "%s: %s failed to populate directory %s\n", 701 __FILE__, __func__, parent->d_name.name); 702 return err; 703 } 704 705 static struct dentry *rpc_mkdir_populate(struct dentry *parent, 706 struct qstr *name, umode_t mode, void *private, 707 int (*populate)(struct dentry *, void *), void *args_populate) 708 { 709 struct dentry *dentry; 710 struct inode *dir = parent->d_inode; 711 int error; 712 713 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 714 dentry = __rpc_lookup_create_exclusive(parent, name); 715 if (IS_ERR(dentry)) 716 goto out; 717 error = __rpc_mkdir(dir, dentry, mode, NULL, private); 718 if (error != 0) 719 goto out_err; 720 if (populate != NULL) { 721 error = populate(dentry, args_populate); 722 if (error) 723 goto err_rmdir; 724 } 725 out: 726 mutex_unlock(&dir->i_mutex); 727 return dentry; 728 err_rmdir: 729 __rpc_rmdir(dir, dentry); 730 out_err: 731 dentry = ERR_PTR(error); 732 goto out; 733 } 734 735 static int rpc_rmdir_depopulate(struct dentry *dentry, 736 void (*depopulate)(struct dentry *)) 737 { 738 struct dentry *parent; 739 struct inode *dir; 740 int error; 741 742 parent = dget_parent(dentry); 743 dir = parent->d_inode; 744 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 745 if (depopulate != NULL) 746 depopulate(dentry); 747 error = __rpc_rmdir(dir, dentry); 748 mutex_unlock(&dir->i_mutex); 749 dput(parent); 750 return error; 751 } 752 753 /** 754 * rpc_mkpipe - make an rpc_pipefs file for kernel<->userspace communication 755 * @parent: dentry of directory to create new "pipe" in 756 * @name: name of pipe 757 * @private: private data to associate with the pipe, for the caller's use 758 * @ops: operations defining the behavior of the pipe: upcall, downcall, 759 * release_pipe, open_pipe, and destroy_msg. 760 * @flags: rpc_inode flags 761 * 762 * Data is made available for userspace to read by calls to 763 * rpc_queue_upcall(). The actual reads will result in calls to 764 * @ops->upcall, which will be called with the file pointer, 765 * message, and userspace buffer to copy to. 766 * 767 * Writes can come at any time, and do not necessarily have to be 768 * responses to upcalls. They will result in calls to @msg->downcall. 769 * 770 * The @private argument passed here will be available to all these methods 771 * from the file pointer, via RPC_I(file->f_dentry->d_inode)->private. 772 */ 773 struct dentry *rpc_mkpipe(struct dentry *parent, const char *name, 774 void *private, const struct rpc_pipe_ops *ops, 775 int flags) 776 { 777 struct dentry *dentry; 778 struct inode *dir = parent->d_inode; 779 umode_t umode = S_IFIFO | S_IRUSR | S_IWUSR; 780 struct qstr q; 781 int err; 782 783 if (ops->upcall == NULL) 784 umode &= ~S_IRUGO; 785 if (ops->downcall == NULL) 786 umode &= ~S_IWUGO; 787 788 q.name = name; 789 q.len = strlen(name); 790 q.hash = full_name_hash(q.name, q.len), 791 792 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 793 dentry = __rpc_lookup_create(parent, &q); 794 if (IS_ERR(dentry)) 795 goto out; 796 if (dentry->d_inode) { 797 struct rpc_inode *rpci = RPC_I(dentry->d_inode); 798 if (rpci->private != private || 799 rpci->ops != ops || 800 rpci->flags != flags) { 801 dput (dentry); 802 err = -EBUSY; 803 goto out_err; 804 } 805 rpci->nkern_readwriters++; 806 goto out; 807 } 808 809 err = __rpc_mkpipe(dir, dentry, umode, &rpc_pipe_fops, 810 private, ops, flags); 811 if (err) 812 goto out_err; 813 out: 814 mutex_unlock(&dir->i_mutex); 815 return dentry; 816 out_err: 817 dentry = ERR_PTR(err); 818 printk(KERN_WARNING "%s: %s() failed to create pipe %s/%s (errno = %d)\n", 819 __FILE__, __func__, parent->d_name.name, name, 820 err); 821 goto out; 822 } 823 EXPORT_SYMBOL_GPL(rpc_mkpipe); 824 825 /** 826 * rpc_unlink - remove a pipe 827 * @dentry: dentry for the pipe, as returned from rpc_mkpipe 828 * 829 * After this call, lookups will no longer find the pipe, and any 830 * attempts to read or write using preexisting opens of the pipe will 831 * return -EPIPE. 832 */ 833 int 834 rpc_unlink(struct dentry *dentry) 835 { 836 struct dentry *parent; 837 struct inode *dir; 838 int error = 0; 839 840 parent = dget_parent(dentry); 841 dir = parent->d_inode; 842 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 843 error = __rpc_rmpipe(dir, dentry); 844 mutex_unlock(&dir->i_mutex); 845 dput(parent); 846 return error; 847 } 848 EXPORT_SYMBOL_GPL(rpc_unlink); 849 850 enum { 851 RPCAUTH_info, 852 RPCAUTH_EOF 853 }; 854 855 static const struct rpc_filelist authfiles[] = { 856 [RPCAUTH_info] = { 857 .name = "info", 858 .i_fop = &rpc_info_operations, 859 .mode = S_IFREG | S_IRUSR, 860 }, 861 }; 862 863 static int rpc_clntdir_populate(struct dentry *dentry, void *private) 864 { 865 return rpc_populate(dentry, 866 authfiles, RPCAUTH_info, RPCAUTH_EOF, 867 private); 868 } 869 870 static void rpc_clntdir_depopulate(struct dentry *dentry) 871 { 872 rpc_depopulate(dentry, authfiles, RPCAUTH_info, RPCAUTH_EOF); 873 } 874 875 /** 876 * rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs 877 * @dentry: dentry from the rpc_pipefs root to the new directory 878 * @name: &struct qstr for the name 879 * @rpc_client: rpc client to associate with this directory 880 * 881 * This creates a directory at the given @path associated with 882 * @rpc_clnt, which will contain a file named "info" with some basic 883 * information about the client, together with any "pipes" that may 884 * later be created using rpc_mkpipe(). 885 */ 886 struct dentry *rpc_create_client_dir(struct dentry *dentry, 887 struct qstr *name, 888 struct rpc_clnt *rpc_client) 889 { 890 return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL, 891 rpc_clntdir_populate, rpc_client); 892 } 893 894 /** 895 * rpc_remove_client_dir - Remove a directory created with rpc_create_client_dir() 896 * @dentry: directory to remove 897 */ 898 int rpc_remove_client_dir(struct dentry *dentry) 899 { 900 return rpc_rmdir_depopulate(dentry, rpc_clntdir_depopulate); 901 } 902 903 static const struct rpc_filelist cache_pipefs_files[3] = { 904 [0] = { 905 .name = "channel", 906 .i_fop = &cache_file_operations_pipefs, 907 .mode = S_IFREG|S_IRUSR|S_IWUSR, 908 }, 909 [1] = { 910 .name = "content", 911 .i_fop = &content_file_operations_pipefs, 912 .mode = S_IFREG|S_IRUSR, 913 }, 914 [2] = { 915 .name = "flush", 916 .i_fop = &cache_flush_operations_pipefs, 917 .mode = S_IFREG|S_IRUSR|S_IWUSR, 918 }, 919 }; 920 921 static int rpc_cachedir_populate(struct dentry *dentry, void *private) 922 { 923 return rpc_populate(dentry, 924 cache_pipefs_files, 0, 3, 925 private); 926 } 927 928 static void rpc_cachedir_depopulate(struct dentry *dentry) 929 { 930 rpc_depopulate(dentry, cache_pipefs_files, 0, 3); 931 } 932 933 struct dentry *rpc_create_cache_dir(struct dentry *parent, struct qstr *name, 934 mode_t umode, struct cache_detail *cd) 935 { 936 return rpc_mkdir_populate(parent, name, umode, NULL, 937 rpc_cachedir_populate, cd); 938 } 939 940 void rpc_remove_cache_dir(struct dentry *dentry) 941 { 942 rpc_rmdir_depopulate(dentry, rpc_cachedir_depopulate); 943 } 944 945 /* 946 * populate the filesystem 947 */ 948 static const struct super_operations s_ops = { 949 .alloc_inode = rpc_alloc_inode, 950 .destroy_inode = rpc_destroy_inode, 951 .statfs = simple_statfs, 952 }; 953 954 #define RPCAUTH_GSSMAGIC 0x67596969 955 956 /* 957 * We have a single directory with 1 node in it. 958 */ 959 enum { 960 RPCAUTH_lockd, 961 RPCAUTH_mount, 962 RPCAUTH_nfs, 963 RPCAUTH_portmap, 964 RPCAUTH_statd, 965 RPCAUTH_nfsd4_cb, 966 RPCAUTH_cache, 967 RPCAUTH_RootEOF 968 }; 969 970 static const struct rpc_filelist files[] = { 971 [RPCAUTH_lockd] = { 972 .name = "lockd", 973 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 974 }, 975 [RPCAUTH_mount] = { 976 .name = "mount", 977 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 978 }, 979 [RPCAUTH_nfs] = { 980 .name = "nfs", 981 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 982 }, 983 [RPCAUTH_portmap] = { 984 .name = "portmap", 985 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 986 }, 987 [RPCAUTH_statd] = { 988 .name = "statd", 989 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 990 }, 991 [RPCAUTH_nfsd4_cb] = { 992 .name = "nfsd4_cb", 993 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 994 }, 995 [RPCAUTH_cache] = { 996 .name = "cache", 997 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 998 }, 999 }; 1000 1001 static int 1002 rpc_fill_super(struct super_block *sb, void *data, int silent) 1003 { 1004 struct inode *inode; 1005 struct dentry *root; 1006 1007 sb->s_blocksize = PAGE_CACHE_SIZE; 1008 sb->s_blocksize_bits = PAGE_CACHE_SHIFT; 1009 sb->s_magic = RPCAUTH_GSSMAGIC; 1010 sb->s_op = &s_ops; 1011 sb->s_time_gran = 1; 1012 1013 inode = rpc_get_inode(sb, S_IFDIR | 0755); 1014 if (!inode) 1015 return -ENOMEM; 1016 sb->s_root = root = d_alloc_root(inode); 1017 if (!root) { 1018 iput(inode); 1019 return -ENOMEM; 1020 } 1021 if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL)) 1022 return -ENOMEM; 1023 return 0; 1024 } 1025 1026 static int 1027 rpc_get_sb(struct file_system_type *fs_type, 1028 int flags, const char *dev_name, void *data, struct vfsmount *mnt) 1029 { 1030 return get_sb_single(fs_type, flags, data, rpc_fill_super, mnt); 1031 } 1032 1033 static struct file_system_type rpc_pipe_fs_type = { 1034 .owner = THIS_MODULE, 1035 .name = "rpc_pipefs", 1036 .get_sb = rpc_get_sb, 1037 .kill_sb = kill_litter_super, 1038 }; 1039 1040 static void 1041 init_once(void *foo) 1042 { 1043 struct rpc_inode *rpci = (struct rpc_inode *) foo; 1044 1045 inode_init_once(&rpci->vfs_inode); 1046 rpci->private = NULL; 1047 rpci->nreaders = 0; 1048 rpci->nwriters = 0; 1049 INIT_LIST_HEAD(&rpci->in_upcall); 1050 INIT_LIST_HEAD(&rpci->in_downcall); 1051 INIT_LIST_HEAD(&rpci->pipe); 1052 rpci->pipelen = 0; 1053 init_waitqueue_head(&rpci->waitq); 1054 INIT_DELAYED_WORK(&rpci->queue_timeout, 1055 rpc_timeout_upcall_queue); 1056 rpci->ops = NULL; 1057 } 1058 1059 int register_rpc_pipefs(void) 1060 { 1061 int err; 1062 1063 rpc_inode_cachep = kmem_cache_create("rpc_inode_cache", 1064 sizeof(struct rpc_inode), 1065 0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT| 1066 SLAB_MEM_SPREAD), 1067 init_once); 1068 if (!rpc_inode_cachep) 1069 return -ENOMEM; 1070 err = register_filesystem(&rpc_pipe_fs_type); 1071 if (err) { 1072 kmem_cache_destroy(rpc_inode_cachep); 1073 return err; 1074 } 1075 1076 return 0; 1077 } 1078 1079 void unregister_rpc_pipefs(void) 1080 { 1081 kmem_cache_destroy(rpc_inode_cachep); 1082 unregister_filesystem(&rpc_pipe_fs_type); 1083 } 1084