• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/make_ext4fs/wipe.c

  1 /*
  2  * Copyright (C) 2011 The Android Open Source Project
  3  *
  4  * Licensed under the Apache License, Version 2.0 (the "License");
  5  * you may not use this file except in compliance with the License.
  6  * You may obtain a copy of the License at
  7  *
  8  *      http://www.apache.org/licenses/LICENSE-2.0
  9  *
 10  * Unless required by applicable law or agreed to in writing, software
 11  * distributed under the License is distributed on an "AS IS" BASIS,
 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  * See the License for the specific language governing permissions and
 14  * limitations under the License.
 15  */
 16 
 17 #include "ext4_utils.h"
 18 #include "wipe.h"
 19 
 20 #if WIPE_IS_SUPPORTED
 21 
 22 #if defined(__linux__)
 23 
 24 #include <linux/fs.h>
 25 #include <sys/ioctl.h>
 26 
 27 #ifndef BLKDISCARD
 28 #define BLKDISCARD _IO(0x12,119)
 29 #endif
 30 
 31 #ifndef BLKSECDISCARD
 32 #define BLKSECDISCARD _IO(0x12,125)
 33 #endif
 34 
 35 int wipe_block_device(int fd, s64 len)
 36 {
 37         u64 range[2];
 38         int ret;
 39 
 40         if (!is_block_device_fd(fd)) {
 41                 // Wiping only makes sense on a block device.
 42                 return 0;
 43         }
 44 
 45         range[0] = 0;
 46         range[1] = len;
 47         ret = ioctl(fd, BLKSECDISCARD, &range);
 48         if (ret < 0) {
 49                 range[0] = 0;
 50                 range[1] = len;
 51                 ret = ioctl(fd, BLKDISCARD, &range);
 52                 if (ret < 0) {
 53                         warn("Discard failed\n");
 54                         return 1;
 55                 } else {
 56                         warn("Wipe via secure discard failed, used discard instead\n");
 57                         return 0;
 58                 }
 59         }
 60 
 61         return 0;
 62 }
 63 
 64 #else  /* __linux__ */
 65 #error "Missing block device wiping implementation for this platform!"
 66 #endif
 67 
 68 #else  /* WIPE_IS_SUPPORTED */
 69 
 70 int wipe_block_device(int fd, s64 len)
 71 {
 72         /* Wiping is not supported on this platform. */
 73         return 1;
 74 }
 75 
 76 #endif  /* WIPE_IS_SUPPORTED */
 77 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt