pipe.c 21 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015
  1. /*
  2. * linux/fs/pipe.c
  3. *
  4. * Copyright (C) 1991, 1992, 1999 Linus Torvalds
  5. */
  6. #include <linux/mm.h>
  7. #include <linux/file.h>
  8. #include <linux/poll.h>
  9. #include <linux/slab.h>
  10. #include <linux/module.h>
  11. #include <linux/init.h>
  12. #include <linux/fs.h>
  13. #include <linux/mount.h>
  14. #include <linux/pipe_fs_i.h>
  15. #include <linux/uio.h>
  16. #include <linux/highmem.h>
  17. #include <linux/pagemap.h>
  18. #include <asm/uaccess.h>
  19. #include <asm/ioctls.h>
  20. /*
  21. * We use a start+len construction, which provides full use of the
  22. * allocated memory.
  23. * -- Florian Coosmann (FGC)
  24. *
  25. * Reads with count = 0 should always return 0.
  26. * -- Julian Bradfield 1999-06-07.
  27. *
  28. * FIFOs and Pipes now generate SIGIO for both readers and writers.
  29. * -- Jeremy Elson <jelson@circlemud.org> 2001-08-16
  30. *
  31. * pipe_read & write cleanup
  32. * -- Manfred Spraul <manfred@colorfullife.com> 2002-05-09
  33. */
  34. /* Drop the inode semaphore and wait for a pipe event, atomically */
  35. void pipe_wait(struct pipe_inode_info *pipe)
  36. {
  37. DEFINE_WAIT(wait);
  38. /*
  39. * Pipes are system-local resources, so sleeping on them
  40. * is considered a noninteractive wait:
  41. */
  42. prepare_to_wait(&pipe->wait, &wait,
  43. TASK_INTERRUPTIBLE | TASK_NONINTERACTIVE);
  44. if (pipe->inode)
  45. mutex_unlock(&pipe->inode->i_mutex);
  46. schedule();
  47. finish_wait(&pipe->wait, &wait);
  48. if (pipe->inode)
  49. mutex_lock(&pipe->inode->i_mutex);
  50. }
  51. static int
  52. pipe_iov_copy_from_user(void *to, struct iovec *iov, unsigned long len,
  53. int atomic)
  54. {
  55. unsigned long copy;
  56. while (len > 0) {
  57. while (!iov->iov_len)
  58. iov++;
  59. copy = min_t(unsigned long, len, iov->iov_len);
  60. if (atomic) {
  61. if (__copy_from_user_inatomic(to, iov->iov_base, copy))
  62. return -EFAULT;
  63. } else {
  64. if (copy_from_user(to, iov->iov_base, copy))
  65. return -EFAULT;
  66. }
  67. to += copy;
  68. len -= copy;
  69. iov->iov_base += copy;
  70. iov->iov_len -= copy;
  71. }
  72. return 0;
  73. }
  74. static int
  75. pipe_iov_copy_to_user(struct iovec *iov, const void *from, unsigned long len,
  76. int atomic)
  77. {
  78. unsigned long copy;
  79. while (len > 0) {
  80. while (!iov->iov_len)
  81. iov++;
  82. copy = min_t(unsigned long, len, iov->iov_len);
  83. if (atomic) {
  84. if (__copy_to_user_inatomic(iov->iov_base, from, copy))
  85. return -EFAULT;
  86. } else {
  87. if (copy_to_user(iov->iov_base, from, copy))
  88. return -EFAULT;
  89. }
  90. from += copy;
  91. len -= copy;
  92. iov->iov_base += copy;
  93. iov->iov_len -= copy;
  94. }
  95. return 0;
  96. }
  97. /*
  98. * Attempt to pre-fault in the user memory, so we can use atomic copies.
  99. * Returns the number of bytes not faulted in.
  100. */
  101. static int iov_fault_in_pages_write(struct iovec *iov, unsigned long len)
  102. {
  103. while (!iov->iov_len)
  104. iov++;
  105. while (len > 0) {
  106. unsigned long this_len;
  107. this_len = min_t(unsigned long, len, iov->iov_len);
  108. if (fault_in_pages_writeable(iov->iov_base, this_len))
  109. break;
  110. len -= this_len;
  111. iov++;
  112. }
  113. return len;
  114. }
  115. /*
  116. * Pre-fault in the user memory, so we can use atomic copies.
  117. */
  118. static void iov_fault_in_pages_read(struct iovec *iov, unsigned long len)
  119. {
  120. while (!iov->iov_len)
  121. iov++;
  122. while (len > 0) {
  123. unsigned long this_len;
  124. this_len = min_t(unsigned long, len, iov->iov_len);
  125. fault_in_pages_readable(iov->iov_base, this_len);
  126. len -= this_len;
  127. iov++;
  128. }
  129. }
  130. static void anon_pipe_buf_release(struct pipe_inode_info *pipe,
  131. struct pipe_buffer *buf)
  132. {
  133. struct page *page = buf->page;
  134. /*
  135. * If nobody else uses this page, and we don't already have a
  136. * temporary page, let's keep track of it as a one-deep
  137. * allocation cache. (Otherwise just release our reference to it)
  138. */
  139. if (page_count(page) == 1 && !pipe->tmp_page)
  140. pipe->tmp_page = page;
  141. else
  142. page_cache_release(page);
  143. }
  144. void *generic_pipe_buf_map(struct pipe_inode_info *pipe,
  145. struct pipe_buffer *buf, int atomic)
  146. {
  147. if (atomic) {
  148. buf->flags |= PIPE_BUF_FLAG_ATOMIC;
  149. return kmap_atomic(buf->page, KM_USER0);
  150. }
  151. return kmap(buf->page);
  152. }
  153. void generic_pipe_buf_unmap(struct pipe_inode_info *pipe,
  154. struct pipe_buffer *buf, void *map_data)
  155. {
  156. if (buf->flags & PIPE_BUF_FLAG_ATOMIC) {
  157. buf->flags &= ~PIPE_BUF_FLAG_ATOMIC;
  158. kunmap_atomic(map_data, KM_USER0);
  159. } else
  160. kunmap(buf->page);
  161. }
  162. int generic_pipe_buf_steal(struct pipe_inode_info *pipe,
  163. struct pipe_buffer *buf)
  164. {
  165. struct page *page = buf->page;
  166. if (page_count(page) == 1) {
  167. lock_page(page);
  168. return 0;
  169. }
  170. return 1;
  171. }
  172. void generic_pipe_buf_get(struct pipe_inode_info *info, struct pipe_buffer *buf)
  173. {
  174. page_cache_get(buf->page);
  175. }
  176. int generic_pipe_buf_pin(struct pipe_inode_info *info, struct pipe_buffer *buf)
  177. {
  178. return 0;
  179. }
  180. static struct pipe_buf_operations anon_pipe_buf_ops = {
  181. .can_merge = 1,
  182. .map = generic_pipe_buf_map,
  183. .unmap = generic_pipe_buf_unmap,
  184. .pin = generic_pipe_buf_pin,
  185. .release = anon_pipe_buf_release,
  186. .steal = generic_pipe_buf_steal,
  187. .get = generic_pipe_buf_get,
  188. };
  189. static ssize_t
  190. pipe_readv(struct file *filp, const struct iovec *_iov,
  191. unsigned long nr_segs, loff_t *ppos)
  192. {
  193. struct inode *inode = filp->f_dentry->d_inode;
  194. struct pipe_inode_info *pipe;
  195. int do_wakeup;
  196. ssize_t ret;
  197. struct iovec *iov = (struct iovec *)_iov;
  198. size_t total_len;
  199. total_len = iov_length(iov, nr_segs);
  200. /* Null read succeeds. */
  201. if (unlikely(total_len == 0))
  202. return 0;
  203. do_wakeup = 0;
  204. ret = 0;
  205. mutex_lock(&inode->i_mutex);
  206. pipe = inode->i_pipe;
  207. for (;;) {
  208. int bufs = pipe->nrbufs;
  209. if (bufs) {
  210. int curbuf = pipe->curbuf;
  211. struct pipe_buffer *buf = pipe->bufs + curbuf;
  212. struct pipe_buf_operations *ops = buf->ops;
  213. void *addr;
  214. size_t chars = buf->len;
  215. int error, atomic;
  216. if (chars > total_len)
  217. chars = total_len;
  218. error = ops->pin(pipe, buf);
  219. if (error) {
  220. if (!ret)
  221. error = ret;
  222. break;
  223. }
  224. atomic = !iov_fault_in_pages_write(iov, chars);
  225. redo:
  226. addr = ops->map(pipe, buf, atomic);
  227. error = pipe_iov_copy_to_user(iov, addr + buf->offset, chars, atomic);
  228. ops->unmap(pipe, buf, addr);
  229. if (unlikely(error)) {
  230. /*
  231. * Just retry with the slow path if we failed.
  232. */
  233. if (atomic) {
  234. atomic = 0;
  235. goto redo;
  236. }
  237. if (!ret)
  238. ret = error;
  239. break;
  240. }
  241. ret += chars;
  242. buf->offset += chars;
  243. buf->len -= chars;
  244. if (!buf->len) {
  245. buf->ops = NULL;
  246. ops->release(pipe, buf);
  247. curbuf = (curbuf + 1) & (PIPE_BUFFERS-1);
  248. pipe->curbuf = curbuf;
  249. pipe->nrbufs = --bufs;
  250. do_wakeup = 1;
  251. }
  252. total_len -= chars;
  253. if (!total_len)
  254. break; /* common path: read succeeded */
  255. }
  256. if (bufs) /* More to do? */
  257. continue;
  258. if (!pipe->writers)
  259. break;
  260. if (!pipe->waiting_writers) {
  261. /* syscall merging: Usually we must not sleep
  262. * if O_NONBLOCK is set, or if we got some data.
  263. * But if a writer sleeps in kernel space, then
  264. * we can wait for that data without violating POSIX.
  265. */
  266. if (ret)
  267. break;
  268. if (filp->f_flags & O_NONBLOCK) {
  269. ret = -EAGAIN;
  270. break;
  271. }
  272. }
  273. if (signal_pending(current)) {
  274. if (!ret)
  275. ret = -ERESTARTSYS;
  276. break;
  277. }
  278. if (do_wakeup) {
  279. wake_up_interruptible_sync(&pipe->wait);
  280. kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
  281. }
  282. pipe_wait(pipe);
  283. }
  284. mutex_unlock(&inode->i_mutex);
  285. /* Signal writers asynchronously that there is more room. */
  286. if (do_wakeup) {
  287. wake_up_interruptible(&pipe->wait);
  288. kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
  289. }
  290. if (ret > 0)
  291. file_accessed(filp);
  292. return ret;
  293. }
  294. static ssize_t
  295. pipe_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos)
  296. {
  297. struct iovec iov = { .iov_base = buf, .iov_len = count };
  298. return pipe_readv(filp, &iov, 1, ppos);
  299. }
  300. static ssize_t
  301. pipe_writev(struct file *filp, const struct iovec *_iov,
  302. unsigned long nr_segs, loff_t *ppos)
  303. {
  304. struct inode *inode = filp->f_dentry->d_inode;
  305. struct pipe_inode_info *pipe;
  306. ssize_t ret;
  307. int do_wakeup;
  308. struct iovec *iov = (struct iovec *)_iov;
  309. size_t total_len;
  310. ssize_t chars;
  311. total_len = iov_length(iov, nr_segs);
  312. /* Null write succeeds. */
  313. if (unlikely(total_len == 0))
  314. return 0;
  315. do_wakeup = 0;
  316. ret = 0;
  317. mutex_lock(&inode->i_mutex);
  318. pipe = inode->i_pipe;
  319. if (!pipe->readers) {
  320. send_sig(SIGPIPE, current, 0);
  321. ret = -EPIPE;
  322. goto out;
  323. }
  324. /* We try to merge small writes */
  325. chars = total_len & (PAGE_SIZE-1); /* size of the last buffer */
  326. if (pipe->nrbufs && chars != 0) {
  327. int lastbuf = (pipe->curbuf + pipe->nrbufs - 1) &
  328. (PIPE_BUFFERS-1);
  329. struct pipe_buffer *buf = pipe->bufs + lastbuf;
  330. struct pipe_buf_operations *ops = buf->ops;
  331. int offset = buf->offset + buf->len;
  332. if (ops->can_merge && offset + chars <= PAGE_SIZE) {
  333. int error, atomic = 1;
  334. void *addr;
  335. error = ops->pin(pipe, buf);
  336. if (error)
  337. goto out;
  338. iov_fault_in_pages_read(iov, chars);
  339. redo1:
  340. addr = ops->map(pipe, buf, atomic);
  341. error = pipe_iov_copy_from_user(offset + addr, iov,
  342. chars, atomic);
  343. ops->unmap(pipe, buf, addr);
  344. ret = error;
  345. do_wakeup = 1;
  346. if (error) {
  347. if (atomic) {
  348. atomic = 0;
  349. goto redo1;
  350. }
  351. goto out;
  352. }
  353. buf->len += chars;
  354. total_len -= chars;
  355. ret = chars;
  356. if (!total_len)
  357. goto out;
  358. }
  359. }
  360. for (;;) {
  361. int bufs;
  362. if (!pipe->readers) {
  363. send_sig(SIGPIPE, current, 0);
  364. if (!ret)
  365. ret = -EPIPE;
  366. break;
  367. }
  368. bufs = pipe->nrbufs;
  369. if (bufs < PIPE_BUFFERS) {
  370. int newbuf = (pipe->curbuf + bufs) & (PIPE_BUFFERS-1);
  371. struct pipe_buffer *buf = pipe->bufs + newbuf;
  372. struct page *page = pipe->tmp_page;
  373. char *src;
  374. int error, atomic = 1;
  375. if (!page) {
  376. page = alloc_page(GFP_HIGHUSER);
  377. if (unlikely(!page)) {
  378. ret = ret ? : -ENOMEM;
  379. break;
  380. }
  381. pipe->tmp_page = page;
  382. }
  383. /* Always wake up, even if the copy fails. Otherwise
  384. * we lock up (O_NONBLOCK-)readers that sleep due to
  385. * syscall merging.
  386. * FIXME! Is this really true?
  387. */
  388. do_wakeup = 1;
  389. chars = PAGE_SIZE;
  390. if (chars > total_len)
  391. chars = total_len;
  392. iov_fault_in_pages_read(iov, chars);
  393. redo2:
  394. if (atomic)
  395. src = kmap_atomic(page, KM_USER0);
  396. else
  397. src = kmap(page);
  398. error = pipe_iov_copy_from_user(src, iov, chars,
  399. atomic);
  400. if (atomic)
  401. kunmap_atomic(src, KM_USER0);
  402. else
  403. kunmap(page);
  404. if (unlikely(error)) {
  405. if (atomic) {
  406. atomic = 0;
  407. goto redo2;
  408. }
  409. if (!ret)
  410. ret = error;
  411. break;
  412. }
  413. ret += chars;
  414. /* Insert it into the buffer array */
  415. buf->page = page;
  416. buf->ops = &anon_pipe_buf_ops;
  417. buf->offset = 0;
  418. buf->len = chars;
  419. pipe->nrbufs = ++bufs;
  420. pipe->tmp_page = NULL;
  421. total_len -= chars;
  422. if (!total_len)
  423. break;
  424. }
  425. if (bufs < PIPE_BUFFERS)
  426. continue;
  427. if (filp->f_flags & O_NONBLOCK) {
  428. if (!ret)
  429. ret = -EAGAIN;
  430. break;
  431. }
  432. if (signal_pending(current)) {
  433. if (!ret)
  434. ret = -ERESTARTSYS;
  435. break;
  436. }
  437. if (do_wakeup) {
  438. wake_up_interruptible_sync(&pipe->wait);
  439. kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
  440. do_wakeup = 0;
  441. }
  442. pipe->waiting_writers++;
  443. pipe_wait(pipe);
  444. pipe->waiting_writers--;
  445. }
  446. out:
  447. mutex_unlock(&inode->i_mutex);
  448. if (do_wakeup) {
  449. wake_up_interruptible(&pipe->wait);
  450. kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
  451. }
  452. if (ret > 0)
  453. file_update_time(filp);
  454. return ret;
  455. }
  456. static ssize_t
  457. pipe_write(struct file *filp, const char __user *buf,
  458. size_t count, loff_t *ppos)
  459. {
  460. struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = count };
  461. return pipe_writev(filp, &iov, 1, ppos);
  462. }
  463. static ssize_t
  464. bad_pipe_r(struct file *filp, char __user *buf, size_t count, loff_t *ppos)
  465. {
  466. return -EBADF;
  467. }
  468. static ssize_t
  469. bad_pipe_w(struct file *filp, const char __user *buf, size_t count,
  470. loff_t *ppos)
  471. {
  472. return -EBADF;
  473. }
  474. static int
  475. pipe_ioctl(struct inode *pino, struct file *filp,
  476. unsigned int cmd, unsigned long arg)
  477. {
  478. struct inode *inode = filp->f_dentry->d_inode;
  479. struct pipe_inode_info *pipe;
  480. int count, buf, nrbufs;
  481. switch (cmd) {
  482. case FIONREAD:
  483. mutex_lock(&inode->i_mutex);
  484. pipe = inode->i_pipe;
  485. count = 0;
  486. buf = pipe->curbuf;
  487. nrbufs = pipe->nrbufs;
  488. while (--nrbufs >= 0) {
  489. count += pipe->bufs[buf].len;
  490. buf = (buf+1) & (PIPE_BUFFERS-1);
  491. }
  492. mutex_unlock(&inode->i_mutex);
  493. return put_user(count, (int __user *)arg);
  494. default:
  495. return -EINVAL;
  496. }
  497. }
  498. /* No kernel lock held - fine */
  499. static unsigned int
  500. pipe_poll(struct file *filp, poll_table *wait)
  501. {
  502. unsigned int mask;
  503. struct inode *inode = filp->f_dentry->d_inode;
  504. struct pipe_inode_info *pipe = inode->i_pipe;
  505. int nrbufs;
  506. poll_wait(filp, &pipe->wait, wait);
  507. /* Reading only -- no need for acquiring the semaphore. */
  508. nrbufs = pipe->nrbufs;
  509. mask = 0;
  510. if (filp->f_mode & FMODE_READ) {
  511. mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
  512. if (!pipe->writers && filp->f_version != pipe->w_counter)
  513. mask |= POLLHUP;
  514. }
  515. if (filp->f_mode & FMODE_WRITE) {
  516. mask |= (nrbufs < PIPE_BUFFERS) ? POLLOUT | POLLWRNORM : 0;
  517. /*
  518. * Most Unices do not set POLLERR for FIFOs but on Linux they
  519. * behave exactly like pipes for poll().
  520. */
  521. if (!pipe->readers)
  522. mask |= POLLERR;
  523. }
  524. return mask;
  525. }
  526. static int
  527. pipe_release(struct inode *inode, int decr, int decw)
  528. {
  529. struct pipe_inode_info *pipe;
  530. mutex_lock(&inode->i_mutex);
  531. pipe = inode->i_pipe;
  532. pipe->readers -= decr;
  533. pipe->writers -= decw;
  534. if (!pipe->readers && !pipe->writers) {
  535. free_pipe_info(inode);
  536. } else {
  537. wake_up_interruptible(&pipe->wait);
  538. kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
  539. kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
  540. }
  541. mutex_unlock(&inode->i_mutex);
  542. return 0;
  543. }
  544. static int
  545. pipe_read_fasync(int fd, struct file *filp, int on)
  546. {
  547. struct inode *inode = filp->f_dentry->d_inode;
  548. int retval;
  549. mutex_lock(&inode->i_mutex);
  550. retval = fasync_helper(fd, filp, on, &inode->i_pipe->fasync_readers);
  551. mutex_unlock(&inode->i_mutex);
  552. if (retval < 0)
  553. return retval;
  554. return 0;
  555. }
  556. static int
  557. pipe_write_fasync(int fd, struct file *filp, int on)
  558. {
  559. struct inode *inode = filp->f_dentry->d_inode;
  560. int retval;
  561. mutex_lock(&inode->i_mutex);
  562. retval = fasync_helper(fd, filp, on, &inode->i_pipe->fasync_writers);
  563. mutex_unlock(&inode->i_mutex);
  564. if (retval < 0)
  565. return retval;
  566. return 0;
  567. }
  568. static int
  569. pipe_rdwr_fasync(int fd, struct file *filp, int on)
  570. {
  571. struct inode *inode = filp->f_dentry->d_inode;
  572. struct pipe_inode_info *pipe = inode->i_pipe;
  573. int retval;
  574. mutex_lock(&inode->i_mutex);
  575. retval = fasync_helper(fd, filp, on, &pipe->fasync_readers);
  576. if (retval >= 0)
  577. retval = fasync_helper(fd, filp, on, &pipe->fasync_writers);
  578. mutex_unlock(&inode->i_mutex);
  579. if (retval < 0)
  580. return retval;
  581. return 0;
  582. }
  583. static int
  584. pipe_read_release(struct inode *inode, struct file *filp)
  585. {
  586. pipe_read_fasync(-1, filp, 0);
  587. return pipe_release(inode, 1, 0);
  588. }
  589. static int
  590. pipe_write_release(struct inode *inode, struct file *filp)
  591. {
  592. pipe_write_fasync(-1, filp, 0);
  593. return pipe_release(inode, 0, 1);
  594. }
  595. static int
  596. pipe_rdwr_release(struct inode *inode, struct file *filp)
  597. {
  598. int decr, decw;
  599. pipe_rdwr_fasync(-1, filp, 0);
  600. decr = (filp->f_mode & FMODE_READ) != 0;
  601. decw = (filp->f_mode & FMODE_WRITE) != 0;
  602. return pipe_release(inode, decr, decw);
  603. }
  604. static int
  605. pipe_read_open(struct inode *inode, struct file *filp)
  606. {
  607. /* We could have perhaps used atomic_t, but this and friends
  608. below are the only places. So it doesn't seem worthwhile. */
  609. mutex_lock(&inode->i_mutex);
  610. inode->i_pipe->readers++;
  611. mutex_unlock(&inode->i_mutex);
  612. return 0;
  613. }
  614. static int
  615. pipe_write_open(struct inode *inode, struct file *filp)
  616. {
  617. mutex_lock(&inode->i_mutex);
  618. inode->i_pipe->writers++;
  619. mutex_unlock(&inode->i_mutex);
  620. return 0;
  621. }
  622. static int
  623. pipe_rdwr_open(struct inode *inode, struct file *filp)
  624. {
  625. mutex_lock(&inode->i_mutex);
  626. if (filp->f_mode & FMODE_READ)
  627. inode->i_pipe->readers++;
  628. if (filp->f_mode & FMODE_WRITE)
  629. inode->i_pipe->writers++;
  630. mutex_unlock(&inode->i_mutex);
  631. return 0;
  632. }
  633. /*
  634. * The file_operations structs are not static because they
  635. * are also used in linux/fs/fifo.c to do operations on FIFOs.
  636. */
  637. const struct file_operations read_fifo_fops = {
  638. .llseek = no_llseek,
  639. .read = pipe_read,
  640. .readv = pipe_readv,
  641. .write = bad_pipe_w,
  642. .poll = pipe_poll,
  643. .ioctl = pipe_ioctl,
  644. .open = pipe_read_open,
  645. .release = pipe_read_release,
  646. .fasync = pipe_read_fasync,
  647. };
  648. const struct file_operations write_fifo_fops = {
  649. .llseek = no_llseek,
  650. .read = bad_pipe_r,
  651. .write = pipe_write,
  652. .writev = pipe_writev,
  653. .poll = pipe_poll,
  654. .ioctl = pipe_ioctl,
  655. .open = pipe_write_open,
  656. .release = pipe_write_release,
  657. .fasync = pipe_write_fasync,
  658. };
  659. const struct file_operations rdwr_fifo_fops = {
  660. .llseek = no_llseek,
  661. .read = pipe_read,
  662. .readv = pipe_readv,
  663. .write = pipe_write,
  664. .writev = pipe_writev,
  665. .poll = pipe_poll,
  666. .ioctl = pipe_ioctl,
  667. .open = pipe_rdwr_open,
  668. .release = pipe_rdwr_release,
  669. .fasync = pipe_rdwr_fasync,
  670. };
  671. static struct file_operations read_pipe_fops = {
  672. .llseek = no_llseek,
  673. .read = pipe_read,
  674. .readv = pipe_readv,
  675. .write = bad_pipe_w,
  676. .poll = pipe_poll,
  677. .ioctl = pipe_ioctl,
  678. .open = pipe_read_open,
  679. .release = pipe_read_release,
  680. .fasync = pipe_read_fasync,
  681. };
  682. static struct file_operations write_pipe_fops = {
  683. .llseek = no_llseek,
  684. .read = bad_pipe_r,
  685. .write = pipe_write,
  686. .writev = pipe_writev,
  687. .poll = pipe_poll,
  688. .ioctl = pipe_ioctl,
  689. .open = pipe_write_open,
  690. .release = pipe_write_release,
  691. .fasync = pipe_write_fasync,
  692. };
  693. static struct file_operations rdwr_pipe_fops = {
  694. .llseek = no_llseek,
  695. .read = pipe_read,
  696. .readv = pipe_readv,
  697. .write = pipe_write,
  698. .writev = pipe_writev,
  699. .poll = pipe_poll,
  700. .ioctl = pipe_ioctl,
  701. .open = pipe_rdwr_open,
  702. .release = pipe_rdwr_release,
  703. .fasync = pipe_rdwr_fasync,
  704. };
  705. struct pipe_inode_info * alloc_pipe_info(struct inode *inode)
  706. {
  707. struct pipe_inode_info *pipe;
  708. pipe = kzalloc(sizeof(struct pipe_inode_info), GFP_KERNEL);
  709. if (pipe) {
  710. init_waitqueue_head(&pipe->wait);
  711. pipe->r_counter = pipe->w_counter = 1;
  712. pipe->inode = inode;
  713. }
  714. return pipe;
  715. }
  716. void __free_pipe_info(struct pipe_inode_info *pipe)
  717. {
  718. int i;
  719. for (i = 0; i < PIPE_BUFFERS; i++) {
  720. struct pipe_buffer *buf = pipe->bufs + i;
  721. if (buf->ops)
  722. buf->ops->release(pipe, buf);
  723. }
  724. if (pipe->tmp_page)
  725. __free_page(pipe->tmp_page);
  726. kfree(pipe);
  727. }
  728. void free_pipe_info(struct inode *inode)
  729. {
  730. __free_pipe_info(inode->i_pipe);
  731. inode->i_pipe = NULL;
  732. }
  733. static struct vfsmount *pipe_mnt __read_mostly;
  734. static int pipefs_delete_dentry(struct dentry *dentry)
  735. {
  736. return 1;
  737. }
  738. static struct dentry_operations pipefs_dentry_operations = {
  739. .d_delete = pipefs_delete_dentry,
  740. };
  741. static struct inode * get_pipe_inode(void)
  742. {
  743. struct inode *inode = new_inode(pipe_mnt->mnt_sb);
  744. struct pipe_inode_info *pipe;
  745. if (!inode)
  746. goto fail_inode;
  747. pipe = alloc_pipe_info(inode);
  748. if (!pipe)
  749. goto fail_iput;
  750. inode->i_pipe = pipe;
  751. pipe->readers = pipe->writers = 1;
  752. inode->i_fop = &rdwr_pipe_fops;
  753. /*
  754. * Mark the inode dirty from the very beginning,
  755. * that way it will never be moved to the dirty
  756. * list because "mark_inode_dirty()" will think
  757. * that it already _is_ on the dirty list.
  758. */
  759. inode->i_state = I_DIRTY;
  760. inode->i_mode = S_IFIFO | S_IRUSR | S_IWUSR;
  761. inode->i_uid = current->fsuid;
  762. inode->i_gid = current->fsgid;
  763. inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
  764. return inode;
  765. fail_iput:
  766. iput(inode);
  767. fail_inode:
  768. return NULL;
  769. }
  770. int do_pipe(int *fd)
  771. {
  772. struct qstr this;
  773. char name[32];
  774. struct dentry *dentry;
  775. struct inode * inode;
  776. struct file *f1, *f2;
  777. int error;
  778. int i, j;
  779. error = -ENFILE;
  780. f1 = get_empty_filp();
  781. if (!f1)
  782. goto no_files;
  783. f2 = get_empty_filp();
  784. if (!f2)
  785. goto close_f1;
  786. inode = get_pipe_inode();
  787. if (!inode)
  788. goto close_f12;
  789. error = get_unused_fd();
  790. if (error < 0)
  791. goto close_f12_inode;
  792. i = error;
  793. error = get_unused_fd();
  794. if (error < 0)
  795. goto close_f12_inode_i;
  796. j = error;
  797. error = -ENOMEM;
  798. sprintf(name, "[%lu]", inode->i_ino);
  799. this.name = name;
  800. this.len = strlen(name);
  801. this.hash = inode->i_ino; /* will go */
  802. dentry = d_alloc(pipe_mnt->mnt_sb->s_root, &this);
  803. if (!dentry)
  804. goto close_f12_inode_i_j;
  805. dentry->d_op = &pipefs_dentry_operations;
  806. d_add(dentry, inode);
  807. f1->f_vfsmnt = f2->f_vfsmnt = mntget(mntget(pipe_mnt));
  808. f1->f_dentry = f2->f_dentry = dget(dentry);
  809. f1->f_mapping = f2->f_mapping = inode->i_mapping;
  810. /* read file */
  811. f1->f_pos = f2->f_pos = 0;
  812. f1->f_flags = O_RDONLY;
  813. f1->f_op = &read_pipe_fops;
  814. f1->f_mode = FMODE_READ;
  815. f1->f_version = 0;
  816. /* write file */
  817. f2->f_flags = O_WRONLY;
  818. f2->f_op = &write_pipe_fops;
  819. f2->f_mode = FMODE_WRITE;
  820. f2->f_version = 0;
  821. fd_install(i, f1);
  822. fd_install(j, f2);
  823. fd[0] = i;
  824. fd[1] = j;
  825. return 0;
  826. close_f12_inode_i_j:
  827. put_unused_fd(j);
  828. close_f12_inode_i:
  829. put_unused_fd(i);
  830. close_f12_inode:
  831. free_pipe_info(inode);
  832. iput(inode);
  833. close_f12:
  834. put_filp(f2);
  835. close_f1:
  836. put_filp(f1);
  837. no_files:
  838. return error;
  839. }
  840. /*
  841. * pipefs should _never_ be mounted by userland - too much of security hassle,
  842. * no real gain from having the whole whorehouse mounted. So we don't need
  843. * any operations on the root directory. However, we need a non-trivial
  844. * d_name - pipe: will go nicely and kill the special-casing in procfs.
  845. */
  846. static int pipefs_get_sb(struct file_system_type *fs_type,
  847. int flags, const char *dev_name, void *data,
  848. struct vfsmount *mnt)
  849. {
  850. return get_sb_pseudo(fs_type, "pipe:", NULL, PIPEFS_MAGIC, mnt);
  851. }
  852. static struct file_system_type pipe_fs_type = {
  853. .name = "pipefs",
  854. .get_sb = pipefs_get_sb,
  855. .kill_sb = kill_anon_super,
  856. };
  857. static int __init init_pipe_fs(void)
  858. {
  859. int err = register_filesystem(&pipe_fs_type);
  860. if (!err) {
  861. pipe_mnt = kern_mount(&pipe_fs_type);
  862. if (IS_ERR(pipe_mnt)) {
  863. err = PTR_ERR(pipe_mnt);
  864. unregister_filesystem(&pipe_fs_type);
  865. }
  866. }
  867. return err;
  868. }
  869. static void __exit exit_pipe_fs(void)
  870. {
  871. unregister_filesystem(&pipe_fs_type);
  872. mntput(pipe_mnt);
  873. }
  874. fs_initcall(init_pipe_fs);
  875. module_exit(exit_pipe_fs);