Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[cascardo/linux.git] / mm / shmem.c
index 1acfdbc..9428c51 100644 (file)
@@ -376,28 +376,23 @@ unsigned long shmem_partial_swap_usage(struct address_space *mapping,
 
        rcu_read_lock();
 
-restart:
        radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
                if (iter.index >= end)
                        break;
 
                page = radix_tree_deref_slot(slot);
 
-               /*
-                * This should only be possible to happen at index 0, so we
-                * don't need to reset the counter, nor do we risk infinite
-                * restarts.
-                */
-               if (radix_tree_deref_retry(page))
-                       goto restart;
+               if (radix_tree_deref_retry(page)) {
+                       slot = radix_tree_iter_retry(&iter);
+                       continue;
+               }
 
                if (radix_tree_exceptional_entry(page))
                        swapped++;
 
                if (need_resched()) {
                        cond_resched_rcu();
-                       start = iter.index + 1;
-                       goto restart;
+                       slot = radix_tree_iter_next(&iter);
                }
        }
 
@@ -1947,12 +1942,13 @@ static void shmem_tag_pins(struct address_space *mapping)
        start = 0;
        rcu_read_lock();
 
-restart:
        radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
                page = radix_tree_deref_slot(slot);
                if (!page || radix_tree_exception(page)) {
-                       if (radix_tree_deref_retry(page))
-                               goto restart;
+                       if (radix_tree_deref_retry(page)) {
+                               slot = radix_tree_iter_retry(&iter);
+                               continue;
+                       }
                } else if (page_count(page) - page_mapcount(page) > 1) {
                        spin_lock_irq(&mapping->tree_lock);
                        radix_tree_tag_set(&mapping->page_tree, iter.index,
@@ -1962,8 +1958,7 @@ restart:
 
                if (need_resched()) {
                        cond_resched_rcu();
-                       start = iter.index + 1;
-                       goto restart;
+                       slot = radix_tree_iter_next(&iter);
                }
        }
        rcu_read_unlock();
@@ -2000,14 +1995,15 @@ static int shmem_wait_for_pins(struct address_space *mapping)
 
                start = 0;
                rcu_read_lock();
-restart:
                radix_tree_for_each_tagged(slot, &mapping->page_tree, &iter,
                                           start, SHMEM_TAG_PINNED) {
 
                        page = radix_tree_deref_slot(slot);
                        if (radix_tree_exception(page)) {
-                               if (radix_tree_deref_retry(page))
-                                       goto restart;
+                               if (radix_tree_deref_retry(page)) {
+                                       slot = radix_tree_iter_retry(&iter);
+                                       continue;
+                               }
 
                                page = NULL;
                        }
@@ -2032,8 +2028,7 @@ restart:
 continue_resched:
                        if (need_resched()) {
                                cond_resched_rcu();
-                               start = iter.index + 1;
-                               goto restart;
+                               slot = radix_tree_iter_next(&iter);
                        }
                }
                rcu_read_unlock();
@@ -2823,9 +2818,8 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
                if ((value = strchr(this_char,'=')) != NULL) {
                        *value++ = 0;
                } else {
-                       printk(KERN_ERR
-                           "tmpfs: No value for mount option '%s'\n",
-                           this_char);
+                       pr_err("tmpfs: No value for mount option '%s'\n",
+                              this_char);
                        goto error;
                }
 
@@ -2880,8 +2874,7 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
                        if (mpol_parse_str(value, &mpol))
                                goto bad_val;
                } else {
-                       printk(KERN_ERR "tmpfs: Bad mount option %s\n",
-                              this_char);
+                       pr_err("tmpfs: Bad mount option %s\n", this_char);
                        goto error;
                }
        }
@@ -2889,7 +2882,7 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
        return 0;
 
 bad_val:
-       printk(KERN_ERR "tmpfs: Bad value '%s' for mount option '%s'\n",
+       pr_err("tmpfs: Bad value '%s' for mount option '%s'\n",
               value, this_char);
 error:
        mpol_put(mpol);
@@ -3286,14 +3279,14 @@ int __init shmem_init(void)
 
        error = register_filesystem(&shmem_fs_type);
        if (error) {
-               printk(KERN_ERR "Could not register tmpfs\n");
+               pr_err("Could not register tmpfs\n");
                goto out2;
        }
 
        shm_mnt = kern_mount(&shmem_fs_type);
        if (IS_ERR(shm_mnt)) {
                error = PTR_ERR(shm_mnt);
-               printk(KERN_ERR "Could not kern_mount tmpfs\n");
+               pr_err("Could not kern_mount tmpfs\n");
                goto out1;
        }
        return 0;