在4.1内核中开发时遇到个奇怪的问题:

  用户空间的ioctl无法调用到内核空间的unlock_ioctl

排查源码发现

 546 int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
547 unsigned long arg)
548 {
549 int error = 0;
550 int __user *argp = (int __user *)arg;
551 struct inode *inode = filp->f_path.dentry->d_inode;
552
553 switch (cmd) {
554 case FIOCLEX:
555 set_close_on_exec(fd, 1);
556 break;
557
558 case FIONCLEX:
559 set_close_on_exec(fd, 0);
560 break;
561
562 case FIONBIO:
563 error = ioctl_fionbio(filp, argp);
564 break;
565
566 case FIOASYNC:
567 error = ioctl_fioasync(fd, filp, argp);
568 break;
569
570 case FIOQSIZE:
571 if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode) ||
572 S_ISLNK(inode->i_mode)) {
573 loff_t res = inode_get_bytes(inode);
574 error = copy_to_user(argp, &res, sizeof(res)) ?
575 -EFAULT : 0;
576 } else
577 error = -ENOTTY;
578 break;
579
580 case FIFREEZE:
581 error = ioctl_fsfreeze(filp);
582 break;
583
584 case FITHAW:
585 error = ioctl_fsthaw(filp);
586 break;
587
588 case FS_IOC_FIEMAP:
589 return ioctl_fiemap(filp, arg);
590
591 case FIGETBSZ:
592 return put_user(inode->i_sb->s_blocksize, argp);
593
594 default:
595 if (S_ISREG(inode->i_mode))
596 error = file_ioctl(filp, cmd, arg);
597 else
598 error = vfs_ioctl(filp, cmd, arg);
599 break;
600 }
601 return error;

就是说对于某些cmd参数值,是不会去调用内核的ioctl的,我程序里的cmd是2,上述case中FIGETBSZ的值就是2

记录下。

最新文章

  1. cacti汇总流量图-将数据合并后作图
  2. python 时间转换
  3. js对文本框特殊字符串过滤
  4. 【Oracle】ora-28001 ora-28002提示用户密码即将过期的解决办法
  5. Appium环境搭建
  6. STM32与FreeRTOS实现低功耗
  7. js 轮播图代码
  8. avalon---qunar ued
  9. Oracle Report : REP-1219
  10. Stamps and Envelope Size
  11. SQLSERVER 更改默认端口号
  12. js获取当前浏览器页面高度及宽度信息的方法
  13. HTML表单元素中disabled的元素的值不会提交到服务器
  14. SQL Server 中使用参数化Top语句
  15. WireShark抓包时TCP数据包出现may be caused by ip checksum offload
  16. 凝视条件推断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>
  17. LINUX 软件管理
  18. [Swift]LeetCode857. 雇佣 K 名工人的最低成本 | Minimum Cost to Hire K Workers
  19. it入门之:学会使用Git 分布式版本控制工具
  20. 实验六 MapReduce实验:二次排序

热门文章

  1. CentOS 6.9开启iptables的日志实现调试
  2. iOS开发 跳转场景的三种方式
  3. Get buck-boost performance from a boost regulator
  4. Spark调研笔记第4篇 - PySpark Internals
  5. EntityFramework:再谈 “如何映射聚合?”
  6. Sql2008 r2 使用ftp 公布和订阅方式同步数据
  7. UIButton 设置圆角 边框颜色 点击回调方法
  8. PTC点击网赚入门
  9. Sqlmap Tamper大全
  10. Servlet学习笔记(三):HTTP请求与响应