1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)/** 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * f2fs_format_utils.c 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * Copyright (c) 2014 Samsung Electronics Co., Ltd. 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * http://www.samsung.com/ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * Dual licensed under the GPL or LGPL version 2 licenses. 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define _LARGEFILE64_SOURCE 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <stdio.h> 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <unistd.h> 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <sys/ioctl.h> 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <sys/stat.h> 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "f2fs_fs.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifdef HAVE_LINUX_FS_H 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <linux/fs.h> 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 21 22int f2fs_trim_device() 23{ 24 unsigned long long range[2]; 25 struct stat stat_buf; 26 27 if (!config.trim) 28 return 0; 29 30 range[0] = 0; 31 range[1] = config.total_sectors * DEFAULT_SECTOR_SIZE; 32 33 if (fstat(config.fd, &stat_buf) < 0 ) { 34 MSG(1, "\tError: Failed to get the device stat!!!\n"); 35 return -1; 36 } 37 38#if defined(WITH_BLKDISCARD) && defined(BLKDISCARD) 39 MSG(0, "Info: Discarding device\n"); 40 if (S_ISREG(stat_buf.st_mode)) 41 return 0; 42 else if (S_ISBLK(stat_buf.st_mode)) { 43 if (ioctl(config.fd, BLKDISCARD, &range) < 0) { 44 MSG(0, "Info: This device doesn't support TRIM\n"); 45 } else { 46 MSG(0, "Info: Discarded %lu sectors\n", 47 config.total_sectors); 48 } 49 } else 50 return -1; 51#endif 52 return 0; 53} 54 55