linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / mm / fadvise.c
index 57264d7..d257c89 100644 (file)
@@ -37,12 +37,21 @@ asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice)
        if (!file)
                return -EBADF;
 
+       if (S_ISFIFO(file->f_dentry->d_inode->i_mode)) {
+               ret = -ESPIPE;
+               goto out;
+       }
+
        mapping = file->f_mapping;
        if (!mapping || len < 0) {
                ret = -EINVAL;
                goto out;
        }
 
+       if (mapping->a_ops->get_xip_page)
+               /* no bad return value, but ignore advice */
+               goto out;
+
        /* Careful about overflows. Len == 0 means "as much as possible" */
        endbyte = offset + len;
        if (!len || endbyte < len)