Merge tag 'sound-3.16-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[cascardo/linux.git] / fs / ext4 / extents_status.c
index 98c90f5..0b7e28e 100644 (file)
@@ -344,8 +344,14 @@ static int ext4_es_can_be_merged(struct extent_status *es1,
        if (ext4_es_status(es1) != ext4_es_status(es2))
                return 0;
 
-       if (((__u64) es1->es_len) + es2->es_len > 0xFFFFFFFFULL)
+       if (((__u64) es1->es_len) + es2->es_len > EXT_MAX_BLOCKS) {
+               pr_warn("ES assertion failed when merging extents. "
+                       "The sum of lengths of es1 (%d) and es2 (%d) "
+                       "is bigger than allowed file size (%d)\n",
+                       es1->es_len, es2->es_len, EXT_MAX_BLOCKS);
+               WARN_ON(1);
                return 0;
+       }
 
        if (((__u64) es1->es_lblk) + es1->es_len != es2->es_lblk)
                return 0;
@@ -960,10 +966,10 @@ retry:
                        continue;
                }
 
-               if (ei->i_es_lru_nr == 0 || ei == locked_ei)
+               if (ei->i_es_lru_nr == 0 || ei == locked_ei ||
+                   !write_trylock(&ei->i_es_lock))
                        continue;
 
-               write_lock(&ei->i_es_lock);
                shrunk = __es_try_to_reclaim_extents(ei, nr_to_scan);
                if (ei->i_es_lru_nr == 0)
                        list_del_init(&ei->i_es_lru);