X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Ffilemap.c;h=7c8643630023d239f099335f4a80480d5bde0a02;hb=cbf67812b2f1431c5e432ddecd202984c6882f2a;hp=c6049e947cd9968a2870ed0805f5aae5ed4355ff;hpb=5cae826e9e54a31f06b4c11b73f4af29e2ea4932;p=linux-2.6 diff --git a/mm/filemap.c b/mm/filemap.c index c6049e947c..7c86436300 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -25,8 +25,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -63,6 +65,7 @@ generic_file_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, * ->private_lock (__free_pte->__set_page_dirty_buffers) * ->swap_lock (exclusive_swap_page, others) * ->mapping->tree_lock + * ->zone.lock * * ->i_mutex * ->i_mmap_lock (truncate->unmap_mapping_range) @@ -839,7 +842,7 @@ static void shrink_readahead_size_eio(struct file *filp, /** * do_generic_mapping_read - generic file read routine * @mapping: address_space to be read - * @_ra: file's readahead state + * @ra: file's readahead state * @filp: the file to read * @ppos: current file position * @desc: read_descriptor @@ -1626,12 +1629,18 @@ int __remove_suid(struct dentry *dentry, int kill) int remove_suid(struct dentry *dentry) { - int kill = should_remove_suid(dentry); + int killsuid = should_remove_suid(dentry); + int killpriv = security_inode_need_killpriv(dentry); + int error = 0; - if (unlikely(kill)) - return __remove_suid(dentry, kill); + if (killpriv < 0) + return killpriv; + if (killpriv) + error = security_inode_killpriv(dentry); + if (!error && killsuid) + error = __remove_suid(dentry, killsuid); - return 0; + return error; } EXPORT_SYMBOL(remove_suid);