1 2 #include <linux/wait.h> 3 #include <linux/backing-dev.h> 4 #include <linux/kthread.h> 5 #include <linux/freezer.h> 6 #include <linux/fs.h> 7 #include <linux/pagemap.h> 8 #include <linux/mm.h> 9 #include <linux/sched.h> 10 #include <linux/module.h> 11 #include <linux/writeback.h> 12 #include <linux/device.h> 13 #include <trace/events/writeback.h> 14 15 static atomic_long_t bdi_seq = ATOMIC_LONG_INIT(0); 16 17 void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page) 18 { 19 } 20 EXPORT_SYMBOL(default_unplug_io_fn); 21 22 struct backing_dev_info default_backing_dev_info = { 23 .name = "default", 24 .ra_pages = VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE, 25 .state = 0, 26 .capabilities = BDI_CAP_MAP_COPY, 27 .unplug_io_fn = default_unplug_io_fn, 28 }; 29 EXPORT_SYMBOL_GPL(default_backing_dev_info); 30 31 struct backing_dev_info noop_backing_dev_info = { 32 .name = "noop", 33 }; 34 EXPORT_SYMBOL_GPL(noop_backing_dev_info); 35 36 static struct class *bdi_class; 37 38 /* 39 * bdi_lock protects updates to bdi_list and bdi_pending_list, as well as 40 * reader side protection for bdi_pending_list. bdi_list has RCU reader side 41 * locking. 42 */ 43 DEFINE_SPINLOCK(bdi_lock); 44 LIST_HEAD(bdi_list); 45 LIST_HEAD(bdi_pending_list); 46 47 static struct task_struct *sync_supers_tsk; 48 static struct timer_list sync_supers_timer; 49 50 static int bdi_sync_supers(void *); 51 static void sync_supers_timer_fn(unsigned long); 52 53 static void bdi_add_default_flusher_task(struct backing_dev_info *bdi); 54 55 #ifdef CONFIG_DEBUG_FS 56 #include <linux/debugfs.h> 57 #include <linux/seq_file.h> 58 59 static struct dentry *bdi_debug_root; 60 61 static void bdi_debug_init(void) 62 { 63 bdi_debug_root = debugfs_create_dir("bdi", NULL); 64 } 65 66 static int bdi_debug_stats_show(struct seq_file *m, void *v) 67 { 68 struct backing_dev_info *bdi = m->private; 69 struct bdi_writeback *wb = &bdi->wb; 70 unsigned long background_thresh; 71 unsigned long dirty_thresh; 72 unsigned long bdi_thresh; 73 unsigned long nr_dirty, nr_io, nr_more_io, nr_wb; 74 struct inode *inode; 75 76 nr_wb = nr_dirty = nr_io = nr_more_io = 0; 77 spin_lock(&inode_lock); 78 list_for_each_entry(inode, &wb->b_dirty, i_list) 79 nr_dirty++; 80 list_for_each_entry(inode, &wb->b_io, i_list) 81 nr_io++; 82 list_for_each_entry(inode, &wb->b_more_io, i_list) 83 nr_more_io++; 84 spin_unlock(&inode_lock); 85 86 get_dirty_limits(&background_thresh, &dirty_thresh, &bdi_thresh, bdi); 87 88 #define K(x) ((x) << (PAGE_SHIFT - 10)) 89 seq_printf(m, 90 "BdiWriteback: %8lu kB\n" 91 "BdiReclaimable: %8lu kB\n" 92 "BdiDirtyThresh: %8lu kB\n" 93 "DirtyThresh: %8lu kB\n" 94 "BackgroundThresh: %8lu kB\n" 95 "b_dirty: %8lu\n" 96 "b_io: %8lu\n" 97 "b_more_io: %8lu\n" 98 "bdi_list: %8u\n" 99 "state: %8lx\n", 100 (unsigned long) K(bdi_stat(bdi, BDI_WRITEBACK)), 101 (unsigned long) K(bdi_stat(bdi, BDI_RECLAIMABLE)), 102 K(bdi_thresh), K(dirty_thresh), 103 K(background_thresh), nr_dirty, nr_io, nr_more_io, 104 !list_empty(&bdi->bdi_list), bdi->state); 105 #undef K 106 107 return 0; 108 } 109 110 static int bdi_debug_stats_open(struct inode *inode, struct file *file) 111 { 112 return single_open(file, bdi_debug_stats_show, inode->i_private); 113 } 114 115 static const struct file_operations bdi_debug_stats_fops = { 116 .open = bdi_debug_stats_open, 117 .read = seq_read, 118 .llseek = seq_lseek, 119 .release = single_release, 120 }; 121 122 static void bdi_debug_register(struct backing_dev_info *bdi, const char *name) 123 { 124 bdi->debug_dir = debugfs_create_dir(name, bdi_debug_root); 125 bdi->debug_stats = debugfs_create_file("stats", 0444, bdi->debug_dir, 126 bdi, &bdi_debug_stats_fops); 127 } 128 129 static void bdi_debug_unregister(struct backing_dev_info *bdi) 130 { 131 debugfs_remove(bdi->debug_stats); 132 debugfs_remove(bdi->debug_dir); 133 } 134 #else 135 static inline void bdi_debug_init(void) 136 { 137 } 138 static inline void bdi_debug_register(struct backing_dev_info *bdi, 139 const char *name) 140 { 141 } 142 static inline void bdi_debug_unregister(struct backing_dev_info *bdi) 143 { 144 } 145 #endif 146 147 static ssize_t read_ahead_kb_store(struct device *dev, 148 struct device_attribute *attr, 149 const char *buf, size_t count) 150 { 151 struct backing_dev_info *bdi = dev_get_drvdata(dev); 152 char *end; 153 unsigned long read_ahead_kb; 154 ssize_t ret = -EINVAL; 155 156 read_ahead_kb = simple_strtoul(buf, &end, 10); 157 if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { 158 bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); 159 ret = count; 160 } 161 return ret; 162 } 163 164 #define K(pages) ((pages) << (PAGE_SHIFT - 10)) 165 166 #define BDI_SHOW(name, expr) \ 167 static ssize_t name##_show(struct device *dev, \ 168 struct device_attribute *attr, char *page) \ 169 { \ 170 struct backing_dev_info *bdi = dev_get_drvdata(dev); \ 171 \ 172 return snprintf(page, PAGE_SIZE-1, "%lld\n", (long long)expr); \ 173 } 174 175 BDI_SHOW(read_ahead_kb, K(bdi->ra_pages)) 176 177 static ssize_t min_ratio_store(struct device *dev, 178 struct device_attribute *attr, const char *buf, size_t count) 179 { 180 struct backing_dev_info *bdi = dev_get_drvdata(dev); 181 char *end; 182 unsigned int ratio; 183 ssize_t ret = -EINVAL; 184 185 ratio = simple_strtoul(buf, &end, 10); 186 if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { 187 ret = bdi_set_min_ratio(bdi, ratio); 188 if (!ret) 189 ret = count; 190 } 191 return ret; 192 } 193 BDI_SHOW(min_ratio, bdi->min_ratio) 194 195 static ssize_t max_ratio_store(struct device *dev, 196 struct device_attribute *attr, const char *buf, size_t count) 197 { 198 struct backing_dev_info *bdi = dev_get_drvdata(dev); 199 char *end; 200 unsigned int ratio; 201 ssize_t ret = -EINVAL; 202 203 ratio = simple_strtoul(buf, &end, 10); 204 if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { 205 ret = bdi_set_max_ratio(bdi, ratio); 206 if (!ret) 207 ret = count; 208 } 209 return ret; 210 } 211 BDI_SHOW(max_ratio, bdi->max_ratio) 212 213 #define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store) 214 215 static struct device_attribute bdi_dev_attrs[] = { 216 __ATTR_RW(read_ahead_kb), 217 __ATTR_RW(min_ratio), 218 __ATTR_RW(max_ratio), 219 __ATTR_NULL, 220 }; 221 222 static __init int bdi_class_init(void) 223 { 224 bdi_class = class_create(THIS_MODULE, "bdi"); 225 if (IS_ERR(bdi_class)) 226 return PTR_ERR(bdi_class); 227 228 bdi_class->dev_attrs = bdi_dev_attrs; 229 bdi_debug_init(); 230 return 0; 231 } 232 postcore_initcall(bdi_class_init); 233 234 static int __init default_bdi_init(void) 235 { 236 int err; 237 238 sync_supers_tsk = kthread_run(bdi_sync_supers, NULL, "sync_supers"); 239 BUG_ON(IS_ERR(sync_supers_tsk)); 240 241 init_timer(&sync_supers_timer); 242 setup_timer(&sync_supers_timer, sync_supers_timer_fn, 0); 243 bdi_arm_supers_timer(); 244 245 err = bdi_init(&default_backing_dev_info); 246 if (!err) 247 bdi_register(&default_backing_dev_info, NULL, "default"); 248 249 return err; 250 } 251 subsys_initcall(default_bdi_init); 252 253 static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi) 254 { 255 memset(wb, 0, sizeof(*wb)); 256 257 wb->bdi = bdi; 258 wb->last_old_flush = jiffies; 259 INIT_LIST_HEAD(&wb->b_dirty); 260 INIT_LIST_HEAD(&wb->b_io); 261 INIT_LIST_HEAD(&wb->b_more_io); 262 } 263 264 int bdi_has_dirty_io(struct backing_dev_info *bdi) 265 { 266 return wb_has_dirty_io(&bdi->wb); 267 } 268 269 static void bdi_flush_io(struct backing_dev_info *bdi) 270 { 271 struct writeback_control wbc = { 272 .sync_mode = WB_SYNC_NONE, 273 .older_than_this = NULL, 274 .range_cyclic = 1, 275 .nr_to_write = 1024, 276 }; 277 278 writeback_inodes_wb(&bdi->wb, &wbc); 279 } 280 281 /* 282 * kupdated() used to do this. We cannot do it from the bdi_forker_task() 283 * or we risk deadlocking on ->s_umount. The longer term solution would be 284 * to implement sync_supers_bdi() or similar and simply do it from the 285 * bdi writeback tasks individually. 286 */ 287 static int bdi_sync_supers(void *unused) 288 { 289 set_user_nice(current, 0); 290 291 while (!kthread_should_stop()) { 292 set_current_state(TASK_INTERRUPTIBLE); 293 schedule(); 294 295 /* 296 * Do this periodically, like kupdated() did before. 297 */ 298 sync_supers(); 299 } 300 301 return 0; 302 } 303 304 void bdi_arm_supers_timer(void) 305 { 306 unsigned long next; 307 308 if (!dirty_writeback_interval) 309 return; 310 311 next = msecs_to_jiffies(dirty_writeback_interval * 10) + jiffies; 312 mod_timer(&sync_supers_timer, round_jiffies_up(next)); 313 } 314 315 static void sync_supers_timer_fn(unsigned long unused) 316 { 317 wake_up_process(sync_supers_tsk); 318 bdi_arm_supers_timer(); 319 } 320 321 static int bdi_forker_task(void *ptr) 322 { 323 struct bdi_writeback *me = ptr; 324 325 current->flags |= PF_FLUSHER | PF_SWAPWRITE; 326 set_freezable(); 327 328 /* 329 * Our parent may run at a different priority, just set us to normal 330 */ 331 set_user_nice(current, 0); 332 333 for (;;) { 334 struct backing_dev_info *bdi, *tmp; 335 struct bdi_writeback *wb; 336 337 /* 338 * Temporary measure, we want to make sure we don't see 339 * dirty data on the default backing_dev_info 340 */ 341 if (wb_has_dirty_io(me) || !list_empty(&me->bdi->work_list)) 342 wb_do_writeback(me, 0); 343 344 spin_lock_bh(&bdi_lock); 345 346 /* 347 * Check if any existing bdi's have dirty data without 348 * a thread registered. If so, set that up. 349 */ 350 list_for_each_entry_safe(bdi, tmp, &bdi_list, bdi_list) { 351 if (bdi->wb.task) 352 continue; 353 if (list_empty(&bdi->work_list) && 354 !bdi_has_dirty_io(bdi)) 355 continue; 356 357 bdi_add_default_flusher_task(bdi); 358 } 359 360 set_current_state(TASK_INTERRUPTIBLE); 361 362 if (list_empty(&bdi_pending_list)) { 363 unsigned long wait; 364 365 spin_unlock_bh(&bdi_lock); 366 wait = msecs_to_jiffies(dirty_writeback_interval * 10); 367 if (wait) 368 schedule_timeout(wait); 369 else 370 schedule(); 371 try_to_freeze(); 372 continue; 373 } 374 375 __set_current_state(TASK_RUNNING); 376 377 /* 378 * This is our real job - check for pending entries in 379 * bdi_pending_list, and create the tasks that got added 380 */ 381 bdi = list_entry(bdi_pending_list.next, struct backing_dev_info, 382 bdi_list); 383 list_del_init(&bdi->bdi_list); 384 spin_unlock_bh(&bdi_lock); 385 386 wb = &bdi->wb; 387 wb->task = kthread_run(bdi_writeback_thread, wb, "flush-%s", 388 dev_name(bdi->dev)); 389 /* 390 * If task creation fails, then readd the bdi to 391 * the pending list and force writeout of the bdi 392 * from this forker thread. That will free some memory 393 * and we can try again. 394 */ 395 if (IS_ERR(wb->task)) { 396 wb->task = NULL; 397 398 /* 399 * Add this 'bdi' to the back, so we get 400 * a chance to flush other bdi's to free 401 * memory. 402 */ 403 spin_lock_bh(&bdi_lock); 404 list_add_tail(&bdi->bdi_list, &bdi_pending_list); 405 spin_unlock_bh(&bdi_lock); 406 407 bdi_flush_io(bdi); 408 } 409 } 410 411 return 0; 412 } 413 414 static void bdi_add_to_pending(struct rcu_head *head) 415 { 416 struct backing_dev_info *bdi; 417 418 bdi = container_of(head, struct backing_dev_info, rcu_head); 419 INIT_LIST_HEAD(&bdi->bdi_list); 420 421 spin_lock(&bdi_lock); 422 list_add_tail(&bdi->bdi_list, &bdi_pending_list); 423 spin_unlock(&bdi_lock); 424 425 /* 426 * We are now on the pending list, wake up bdi_forker_task() 427 * to finish the job and add us back to the active bdi_list 428 */ 429 wake_up_process(default_backing_dev_info.wb.task); 430 } 431 432 /* 433 * Add the default flusher task that gets created for any bdi 434 * that has dirty data pending writeout 435 */ 436 void static bdi_add_default_flusher_task(struct backing_dev_info *bdi) 437 { 438 if (!bdi_cap_writeback_dirty(bdi)) 439 return; 440 441 if (WARN_ON(!test_bit(BDI_registered, &bdi->state))) { 442 printk(KERN_ERR "bdi %p/%s is not registered!\n", 443 bdi, bdi->name); 444 return; 445 } 446 447 /* 448 * Check with the helper whether to proceed adding a task. Will only 449 * abort if we two or more simultanous calls to 450 * bdi_add_default_flusher_task() occured, further additions will block 451 * waiting for previous additions to finish. 452 */ 453 if (!test_and_set_bit(BDI_pending, &bdi->state)) { 454 list_del_rcu(&bdi->bdi_list); 455 456 /* 457 * We must wait for the current RCU period to end before 458 * moving to the pending list. So schedule that operation 459 * from an RCU callback. 460 */ 461 call_rcu(&bdi->rcu_head, bdi_add_to_pending); 462 } 463 } 464 465 /* 466 * Remove bdi from bdi_list, and ensure that it is no longer visible 467 */ 468 static void bdi_remove_from_list(struct backing_dev_info *bdi) 469 { 470 spin_lock_bh(&bdi_lock); 471 list_del_rcu(&bdi->bdi_list); 472 spin_unlock_bh(&bdi_lock); 473 474 synchronize_rcu(); 475 } 476 477 int bdi_register(struct backing_dev_info *bdi, struct device *parent, 478 const char *fmt, ...) 479 { 480 va_list args; 481 int ret = 0; 482 struct device *dev; 483 484 if (bdi->dev) /* The driver needs to use separate queues per device */ 485 goto exit; 486 487 va_start(args, fmt); 488 dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args); 489 va_end(args); 490 if (IS_ERR(dev)) { 491 ret = PTR_ERR(dev); 492 goto exit; 493 } 494 495 spin_lock_bh(&bdi_lock); 496 list_add_tail_rcu(&bdi->bdi_list, &bdi_list); 497 spin_unlock_bh(&bdi_lock); 498 499 bdi->dev = dev; 500 501 /* 502 * Just start the forker thread for our default backing_dev_info, 503 * and add other bdi's to the list. They will get a thread created 504 * on-demand when they need it. 505 */ 506 if (bdi_cap_flush_forker(bdi)) { 507 struct bdi_writeback *wb = &bdi->wb; 508 509 wb->task = kthread_run(bdi_forker_task, wb, "bdi-%s", 510 dev_name(dev)); 511 if (IS_ERR(wb->task)) { 512 wb->task = NULL; 513 ret = -ENOMEM; 514 515 bdi_remove_from_list(bdi); 516 goto exit; 517 } 518 } 519 520 bdi_debug_register(bdi, dev_name(dev)); 521 set_bit(BDI_registered, &bdi->state); 522 trace_writeback_bdi_register(bdi); 523 exit: 524 return ret; 525 } 526 EXPORT_SYMBOL(bdi_register); 527 528 int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev) 529 { 530 return bdi_register(bdi, NULL, "%u:%u", MAJOR(dev), MINOR(dev)); 531 } 532 EXPORT_SYMBOL(bdi_register_dev); 533 534 /* 535 * Remove bdi from the global list and shutdown any threads we have running 536 */ 537 static void bdi_wb_shutdown(struct backing_dev_info *bdi) 538 { 539 if (!bdi_cap_writeback_dirty(bdi)) 540 return; 541 542 /* 543 * If setup is pending, wait for that to complete first 544 */ 545 wait_on_bit(&bdi->state, BDI_pending, bdi_sched_wait, 546 TASK_UNINTERRUPTIBLE); 547 548 /* 549 * Make sure nobody finds us on the bdi_list anymore 550 */ 551 bdi_remove_from_list(bdi); 552 553 /* 554 * Finally, kill the kernel thread. We don't need to be RCU 555 * safe anymore, since the bdi is gone from visibility. Force 556 * unfreeze of the thread before calling kthread_stop(), otherwise 557 * it would never exet if it is currently stuck in the refrigerator. 558 */ 559 if (bdi->wb.task) { 560 thaw_process(bdi->wb.task); 561 kthread_stop(bdi->wb.task); 562 } 563 } 564 565 /* 566 * This bdi is going away now, make sure that no super_blocks point to it 567 */ 568 static void bdi_prune_sb(struct backing_dev_info *bdi) 569 { 570 struct super_block *sb; 571 572 spin_lock(&sb_lock); 573 list_for_each_entry(sb, &super_blocks, s_list) { 574 if (sb->s_bdi == bdi) 575 sb->s_bdi = NULL; 576 } 577 spin_unlock(&sb_lock); 578 } 579 580 void bdi_unregister(struct backing_dev_info *bdi) 581 { 582 if (bdi->dev) { 583 trace_writeback_bdi_unregister(bdi); 584 bdi_prune_sb(bdi); 585 586 if (!bdi_cap_flush_forker(bdi)) 587 bdi_wb_shutdown(bdi); 588 bdi_debug_unregister(bdi); 589 device_unregister(bdi->dev); 590 bdi->dev = NULL; 591 } 592 } 593 EXPORT_SYMBOL(bdi_unregister); 594 595 int bdi_init(struct backing_dev_info *bdi) 596 { 597 int i, err; 598 599 bdi->dev = NULL; 600 601 bdi->min_ratio = 0; 602 bdi->max_ratio = 100; 603 bdi->max_prop_frac = PROP_FRAC_BASE; 604 spin_lock_init(&bdi->wb_lock); 605 INIT_RCU_HEAD(&bdi->rcu_head); 606 INIT_LIST_HEAD(&bdi->bdi_list); 607 INIT_LIST_HEAD(&bdi->work_list); 608 609 bdi_wb_init(&bdi->wb, bdi); 610 611 for (i = 0; i < NR_BDI_STAT_ITEMS; i++) { 612 err = percpu_counter_init(&bdi->bdi_stat[i], 0); 613 if (err) 614 goto err; 615 } 616 617 bdi->dirty_exceeded = 0; 618 err = prop_local_init_percpu(&bdi->completions); 619 620 if (err) { 621 err: 622 while (i--) 623 percpu_counter_destroy(&bdi->bdi_stat[i]); 624 } 625 626 return err; 627 } 628 EXPORT_SYMBOL(bdi_init); 629 630 void bdi_destroy(struct backing_dev_info *bdi) 631 { 632 int i; 633 634 /* 635 * Splice our entries to the default_backing_dev_info, if this 636 * bdi disappears 637 */ 638 if (bdi_has_dirty_io(bdi)) { 639 struct bdi_writeback *dst = &default_backing_dev_info.wb; 640 641 spin_lock(&inode_lock); 642 list_splice(&bdi->wb.b_dirty, &dst->b_dirty); 643 list_splice(&bdi->wb.b_io, &dst->b_io); 644 list_splice(&bdi->wb.b_more_io, &dst->b_more_io); 645 spin_unlock(&inode_lock); 646 } 647 648 bdi_unregister(bdi); 649 650 for (i = 0; i < NR_BDI_STAT_ITEMS; i++) 651 percpu_counter_destroy(&bdi->bdi_stat[i]); 652 653 prop_local_destroy_percpu(&bdi->completions); 654 } 655 EXPORT_SYMBOL(bdi_destroy); 656 657 /* 658 * For use from filesystems to quickly init and register a bdi associated 659 * with dirty writeback 660 */ 661 int bdi_setup_and_register(struct backing_dev_info *bdi, char *name, 662 unsigned int cap) 663 { 664 char tmp[32]; 665 int err; 666 667 bdi->name = name; 668 bdi->capabilities = cap; 669 err = bdi_init(bdi); 670 if (err) 671 return err; 672 673 sprintf(tmp, "%.28s%s", name, "-%d"); 674 err = bdi_register(bdi, NULL, tmp, atomic_long_inc_return(&bdi_seq)); 675 if (err) { 676 bdi_destroy(bdi); 677 return err; 678 } 679 680 return 0; 681 } 682 EXPORT_SYMBOL(bdi_setup_and_register); 683 684 static wait_queue_head_t congestion_wqh[2] = { 685 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]), 686 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1]) 687 }; 688 689 void clear_bdi_congested(struct backing_dev_info *bdi, int sync) 690 { 691 enum bdi_state bit; 692 wait_queue_head_t *wqh = &congestion_wqh[sync]; 693 694 bit = sync ? BDI_sync_congested : BDI_async_congested; 695 clear_bit(bit, &bdi->state); 696 smp_mb__after_clear_bit(); 697 if (waitqueue_active(wqh)) 698 wake_up(wqh); 699 } 700 EXPORT_SYMBOL(clear_bdi_congested); 701 702 void set_bdi_congested(struct backing_dev_info *bdi, int sync) 703 { 704 enum bdi_state bit; 705 706 bit = sync ? BDI_sync_congested : BDI_async_congested; 707 set_bit(bit, &bdi->state); 708 } 709 EXPORT_SYMBOL(set_bdi_congested); 710 711 /** 712 * congestion_wait - wait for a backing_dev to become uncongested 713 * @sync: SYNC or ASYNC IO 714 * @timeout: timeout in jiffies 715 * 716 * Waits for up to @timeout jiffies for a backing_dev (any backing_dev) to exit 717 * write congestion. If no backing_devs are congested then just wait for the 718 * next write to be completed. 719 */ 720 long congestion_wait(int sync, long timeout) 721 { 722 long ret; 723 DEFINE_WAIT(wait); 724 wait_queue_head_t *wqh = &congestion_wqh[sync]; 725 726 prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE); 727 ret = io_schedule_timeout(timeout); 728 finish_wait(wqh, &wait); 729 return ret; 730 } 731 EXPORT_SYMBOL(congestion_wait); 732 733