ASoC: rt5651: add alc5651 ASRC switch for HDMIIn
[firefly-linux-kernel-4.4.55.git] / fs / ext4 / ioctl.c
index 5e872fd40e5e38655435fbcf91802244c9ce8959..7e974878d9a9ca1774acf59059bf9cd88ebf890e 100644 (file)
@@ -587,11 +587,13 @@ resizefs_out:
                return err;
        }
 
+       case FIDTRIM:
        case FITRIM:
        {
                struct request_queue *q = bdev_get_queue(sb->s_bdev);
                struct fstrim_range range;
                int ret = 0;
+               int flags  = cmd == FIDTRIM ? BLKDEV_DISCARD_SECURE : 0;
 
                if (!capable(CAP_SYS_ADMIN))
                        return -EPERM;
@@ -599,13 +601,15 @@ resizefs_out:
                if (!blk_queue_discard(q))
                        return -EOPNOTSUPP;
 
+               if ((flags & BLKDEV_DISCARD_SECURE) && !blk_queue_secdiscard(q))
+                       return -EOPNOTSUPP;
                if (copy_from_user(&range, (struct fstrim_range __user *)arg,
                    sizeof(range)))
                        return -EFAULT;
 
                range.minlen = max((unsigned int)range.minlen,
                                   q->limits.discard_granularity);
-               ret = ext4_trim_fs(sb, &range);
+               ret = ext4_trim_fs(sb, &range, flags);
                if (ret < 0)
                        return ret;
 
@@ -629,7 +633,13 @@ resizefs_out:
                        goto encryption_policy_out;
                }
 
+               err = mnt_want_write_file(filp);
+               if (err)
+                       goto encryption_policy_out;
+
                err = ext4_process_policy(&policy, inode);
+
+               mnt_drop_write_file(filp);
 encryption_policy_out:
                return err;
 #else