Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 77b2555b52a894a2e39a42e43d993df875c46a6a 115 lines 4.2 kB view raw
1/* 2 * lcnalloc.h - Exports for NTFS kernel cluster (de)allocation. Part of the 3 * Linux-NTFS project. 4 * 5 * Copyright (c) 2004 Anton Altaparmakov 6 * 7 * This program/include file is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as published 9 * by the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program/include file is distributed in the hope that it will be 13 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program (in the main directory of the Linux-NTFS 19 * distribution in the file COPYING); if not, write to the Free Software 20 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23#ifndef _LINUX_NTFS_LCNALLOC_H 24#define _LINUX_NTFS_LCNALLOC_H 25 26#ifdef NTFS_RW 27 28#include <linux/fs.h> 29 30#include "types.h" 31#include "runlist.h" 32#include "volume.h" 33 34typedef enum { 35 FIRST_ZONE = 0, /* For sanity checking. */ 36 MFT_ZONE = 0, /* Allocate from $MFT zone. */ 37 DATA_ZONE = 1, /* Allocate from $DATA zone. */ 38 LAST_ZONE = 1, /* For sanity checking. */ 39} NTFS_CLUSTER_ALLOCATION_ZONES; 40 41extern runlist_element *ntfs_cluster_alloc(ntfs_volume *vol, 42 const VCN start_vcn, const s64 count, const LCN start_lcn, 43 const NTFS_CLUSTER_ALLOCATION_ZONES zone); 44 45extern s64 __ntfs_cluster_free(struct inode *vi, const VCN start_vcn, 46 s64 count, const BOOL write_locked, const BOOL is_rollback); 47 48/** 49 * ntfs_cluster_free - free clusters on an ntfs volume 50 * @vi: vfs inode whose runlist describes the clusters to free 51 * @start_vcn: vcn in the runlist of @vi at which to start freeing clusters 52 * @count: number of clusters to free or -1 for all clusters 53 * @write_locked: true if the runlist is locked for writing 54 * 55 * Free @count clusters starting at the cluster @start_vcn in the runlist 56 * described by the vfs inode @vi. 57 * 58 * If @count is -1, all clusters from @start_vcn to the end of the runlist are 59 * deallocated. Thus, to completely free all clusters in a runlist, use 60 * @start_vcn = 0 and @count = -1. 61 * 62 * Note, ntfs_cluster_free() does not modify the runlist at all, so the caller 63 * has to deal with it later. 64 * 65 * Return the number of deallocated clusters (not counting sparse ones) on 66 * success and -errno on error. 67 * 68 * Locking: - The runlist described by @vi must be locked on entry and is 69 * locked on return. Note if the runlist is locked for reading the 70 * lock may be dropped and reacquired. Note the runlist may be 71 * modified when needed runlist fragments need to be mapped. 72 * - The volume lcn bitmap must be unlocked on entry and is unlocked 73 * on return. 74 * - This function takes the volume lcn bitmap lock for writing and 75 * modifies the bitmap contents. 76 */ 77static inline s64 ntfs_cluster_free(struct inode *vi, const VCN start_vcn, 78 s64 count, const BOOL write_locked) 79{ 80 return __ntfs_cluster_free(vi, start_vcn, count, write_locked, FALSE); 81} 82 83extern int ntfs_cluster_free_from_rl_nolock(ntfs_volume *vol, 84 const runlist_element *rl); 85 86/** 87 * ntfs_cluster_free_from_rl - free clusters from runlist 88 * @vol: mounted ntfs volume on which to free the clusters 89 * @rl: runlist describing the clusters to free 90 * 91 * Free all the clusters described by the runlist @rl on the volume @vol. In 92 * the case of an error being returned, at least some of the clusters were not 93 * freed. 94 * 95 * Return 0 on success and -errno on error. 96 * 97 * Locking: - This function takes the volume lcn bitmap lock for writing and 98 * modifies the bitmap contents. 99 * - The caller must have locked the runlist @rl for reading or 100 * writing. 101 */ 102static inline int ntfs_cluster_free_from_rl(ntfs_volume *vol, 103 const runlist_element *rl) 104{ 105 int ret; 106 107 down_write(&vol->lcnbmp_lock); 108 ret = ntfs_cluster_free_from_rl_nolock(vol, rl); 109 up_write(&vol->lcnbmp_lock); 110 return ret; 111} 112 113#endif /* NTFS_RW */ 114 115#endif /* defined _LINUX_NTFS_LCNALLOC_H */