Showing error 1608

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: mm/filemap_xip.c
Line in file: 266
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-05-29 20:11:37 UTC


Source:

236
237        error = mapping->a_ops->get_xip_mem(mapping, vmf->pgoff, 0,
238                                                &xip_mem, &xip_pfn);
239        if (likely(!error))
240                goto found;
241        if (error != -ENODATA)
242                return VM_FAULT_OOM;
243
244        /* sparse block */
245        if ((vma->vm_flags & (VM_WRITE | VM_MAYWRITE)) &&
246            (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) &&
247            (!(mapping->host->i_sb->s_flags & MS_RDONLY))) {
248                int err;
249
250                /* maybe shared writable, allocate new block */
251                mutex_lock(&xip_sparse_mutex);
252                error = mapping->a_ops->get_xip_mem(mapping, vmf->pgoff, 1,
253                                                        &xip_mem, &xip_pfn);
254                mutex_unlock(&xip_sparse_mutex);
255                if (error)
256                        return VM_FAULT_SIGBUS;
257                /* unmap sparse mappings at pgoff from all other vmas */
258                __xip_unmap(mapping, vmf->pgoff);
259
260found:
261                err = vm_insert_mixed(vma, (unsigned long)vmf->virtual_address,
262                                                        xip_pfn);
263                if (err == -ENOMEM)
264                        return VM_FAULT_OOM;
265                BUG_ON(err);
266                return VM_FAULT_NOPAGE;
267        } else {
268                int err, ret = VM_FAULT_OOM;
269
270                mutex_lock(&xip_sparse_mutex);
271                write_seqcount_begin(&xip_sparse_seq);
272                error = mapping->a_ops->get_xip_mem(mapping, vmf->pgoff, 0,
273                                                        &xip_mem, &xip_pfn);
274                if (unlikely(!error)) {
275                        write_seqcount_end(&xip_sparse_seq);
276                        mutex_unlock(&xip_sparse_mutex);
Show full sources