inode.c 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397
  1. /*
  2. * Copyright (C) 2007 Oracle. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public
  6. * License v2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. * General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public
  14. * License along with this program; if not, write to the
  15. * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16. * Boston, MA 021110-1307, USA.
  17. */
  18. #include <linux/buffer_head.h>
  19. #include <linux/fs.h>
  20. #include <linux/pagemap.h>
  21. #include <linux/highmem.h>
  22. #include <linux/time.h>
  23. #include <linux/init.h>
  24. #include <linux/string.h>
  25. #include <linux/smp_lock.h>
  26. #include <linux/backing-dev.h>
  27. #include <linux/mpage.h>
  28. #include <linux/swap.h>
  29. #include <linux/writeback.h>
  30. #include <linux/statfs.h>
  31. #include <linux/compat.h>
  32. #include <linux/bit_spinlock.h>
  33. #include <linux/version.h>
  34. #include "ctree.h"
  35. #include "disk-io.h"
  36. #include "transaction.h"
  37. #include "btrfs_inode.h"
  38. #include "ioctl.h"
  39. #include "print-tree.h"
  40. struct btrfs_iget_args {
  41. u64 ino;
  42. struct btrfs_root *root;
  43. };
  44. static struct inode_operations btrfs_dir_inode_operations;
  45. static struct inode_operations btrfs_symlink_inode_operations;
  46. static struct inode_operations btrfs_dir_ro_inode_operations;
  47. static struct inode_operations btrfs_special_inode_operations;
  48. static struct inode_operations btrfs_file_inode_operations;
  49. static struct address_space_operations btrfs_aops;
  50. static struct address_space_operations btrfs_symlink_aops;
  51. static struct file_operations btrfs_dir_file_operations;
  52. static struct kmem_cache *btrfs_inode_cachep;
  53. struct kmem_cache *btrfs_trans_handle_cachep;
  54. struct kmem_cache *btrfs_transaction_cachep;
  55. struct kmem_cache *btrfs_bit_radix_cachep;
  56. struct kmem_cache *btrfs_path_cachep;
  57. #define S_SHIFT 12
  58. static unsigned char btrfs_type_by_mode[S_IFMT >> S_SHIFT] = {
  59. [S_IFREG >> S_SHIFT] = BTRFS_FT_REG_FILE,
  60. [S_IFDIR >> S_SHIFT] = BTRFS_FT_DIR,
  61. [S_IFCHR >> S_SHIFT] = BTRFS_FT_CHRDEV,
  62. [S_IFBLK >> S_SHIFT] = BTRFS_FT_BLKDEV,
  63. [S_IFIFO >> S_SHIFT] = BTRFS_FT_FIFO,
  64. [S_IFSOCK >> S_SHIFT] = BTRFS_FT_SOCK,
  65. [S_IFLNK >> S_SHIFT] = BTRFS_FT_SYMLINK,
  66. };
  67. static int run_delalloc_range(struct inode *inode, u64 start, u64 end)
  68. {
  69. struct btrfs_root *root = BTRFS_I(inode)->root;
  70. struct btrfs_trans_handle *trans;
  71. struct btrfs_key ins;
  72. u64 alloc_hint = 0;
  73. u64 num_blocks;
  74. int ret;
  75. u64 blocksize = 1 << inode->i_blkbits;
  76. mutex_lock(&root->fs_info->fs_mutex);
  77. trans = btrfs_start_transaction(root, 1);
  78. btrfs_set_trans_block_group(trans, inode);
  79. BUG_ON(!trans);
  80. num_blocks = (end - start + blocksize) & ~(blocksize - 1);
  81. ret = btrfs_drop_extents(trans, root, inode,
  82. start, start + num_blocks, &alloc_hint);
  83. num_blocks = num_blocks >> inode->i_blkbits;
  84. ret = btrfs_alloc_extent(trans, root, inode->i_ino, num_blocks, 0,
  85. alloc_hint, (u64)-1, &ins, 1);
  86. if (ret) {
  87. WARN_ON(1);
  88. goto out;
  89. }
  90. ret = btrfs_insert_file_extent(trans, root, inode->i_ino,
  91. start, ins.objectid, ins.offset,
  92. ins.offset);
  93. out:
  94. btrfs_end_transaction(trans, root);
  95. mutex_unlock(&root->fs_info->fs_mutex);
  96. return ret;
  97. }
  98. void btrfs_read_locked_inode(struct inode *inode)
  99. {
  100. struct btrfs_path *path;
  101. struct btrfs_inode_item *inode_item;
  102. struct btrfs_root *root = BTRFS_I(inode)->root;
  103. struct btrfs_key location;
  104. u64 alloc_group_block;
  105. u32 rdev;
  106. int ret;
  107. path = btrfs_alloc_path();
  108. BUG_ON(!path);
  109. mutex_lock(&root->fs_info->fs_mutex);
  110. memcpy(&location, &BTRFS_I(inode)->location, sizeof(location));
  111. ret = btrfs_lookup_inode(NULL, root, path, &location, 0);
  112. if (ret) {
  113. btrfs_free_path(path);
  114. goto make_bad;
  115. }
  116. inode_item = btrfs_item_ptr(btrfs_buffer_leaf(path->nodes[0]),
  117. path->slots[0],
  118. struct btrfs_inode_item);
  119. inode->i_mode = btrfs_inode_mode(inode_item);
  120. inode->i_nlink = btrfs_inode_nlink(inode_item);
  121. inode->i_uid = btrfs_inode_uid(inode_item);
  122. inode->i_gid = btrfs_inode_gid(inode_item);
  123. inode->i_size = btrfs_inode_size(inode_item);
  124. inode->i_atime.tv_sec = btrfs_timespec_sec(&inode_item->atime);
  125. inode->i_atime.tv_nsec = btrfs_timespec_nsec(&inode_item->atime);
  126. inode->i_mtime.tv_sec = btrfs_timespec_sec(&inode_item->mtime);
  127. inode->i_mtime.tv_nsec = btrfs_timespec_nsec(&inode_item->mtime);
  128. inode->i_ctime.tv_sec = btrfs_timespec_sec(&inode_item->ctime);
  129. inode->i_ctime.tv_nsec = btrfs_timespec_nsec(&inode_item->ctime);
  130. inode->i_blocks = btrfs_inode_nblocks(inode_item);
  131. inode->i_generation = btrfs_inode_generation(inode_item);
  132. inode->i_rdev = 0;
  133. rdev = btrfs_inode_rdev(inode_item);
  134. alloc_group_block = btrfs_inode_block_group(inode_item);
  135. BTRFS_I(inode)->block_group = btrfs_lookup_block_group(root->fs_info,
  136. alloc_group_block);
  137. btrfs_free_path(path);
  138. inode_item = NULL;
  139. mutex_unlock(&root->fs_info->fs_mutex);
  140. switch (inode->i_mode & S_IFMT) {
  141. case S_IFREG:
  142. inode->i_mapping->a_ops = &btrfs_aops;
  143. BTRFS_I(inode)->extent_tree.fill_delalloc = run_delalloc_range;
  144. inode->i_fop = &btrfs_file_operations;
  145. inode->i_op = &btrfs_file_inode_operations;
  146. break;
  147. case S_IFDIR:
  148. inode->i_fop = &btrfs_dir_file_operations;
  149. if (root == root->fs_info->tree_root)
  150. inode->i_op = &btrfs_dir_ro_inode_operations;
  151. else
  152. inode->i_op = &btrfs_dir_inode_operations;
  153. break;
  154. case S_IFLNK:
  155. inode->i_op = &btrfs_symlink_inode_operations;
  156. inode->i_mapping->a_ops = &btrfs_symlink_aops;
  157. break;
  158. default:
  159. init_special_inode(inode, inode->i_mode, rdev);
  160. break;
  161. }
  162. return;
  163. make_bad:
  164. btrfs_release_path(root, path);
  165. btrfs_free_path(path);
  166. mutex_unlock(&root->fs_info->fs_mutex);
  167. make_bad_inode(inode);
  168. }
  169. static void fill_inode_item(struct btrfs_inode_item *item,
  170. struct inode *inode)
  171. {
  172. btrfs_set_inode_uid(item, inode->i_uid);
  173. btrfs_set_inode_gid(item, inode->i_gid);
  174. btrfs_set_inode_size(item, inode->i_size);
  175. btrfs_set_inode_mode(item, inode->i_mode);
  176. btrfs_set_inode_nlink(item, inode->i_nlink);
  177. btrfs_set_timespec_sec(&item->atime, inode->i_atime.tv_sec);
  178. btrfs_set_timespec_nsec(&item->atime, inode->i_atime.tv_nsec);
  179. btrfs_set_timespec_sec(&item->mtime, inode->i_mtime.tv_sec);
  180. btrfs_set_timespec_nsec(&item->mtime, inode->i_mtime.tv_nsec);
  181. btrfs_set_timespec_sec(&item->ctime, inode->i_ctime.tv_sec);
  182. btrfs_set_timespec_nsec(&item->ctime, inode->i_ctime.tv_nsec);
  183. btrfs_set_inode_nblocks(item, inode->i_blocks);
  184. btrfs_set_inode_generation(item, inode->i_generation);
  185. btrfs_set_inode_rdev(item, inode->i_rdev);
  186. btrfs_set_inode_block_group(item,
  187. BTRFS_I(inode)->block_group->key.objectid);
  188. }
  189. int btrfs_update_inode(struct btrfs_trans_handle *trans,
  190. struct btrfs_root *root,
  191. struct inode *inode)
  192. {
  193. struct btrfs_inode_item *inode_item;
  194. struct btrfs_path *path;
  195. int ret;
  196. path = btrfs_alloc_path();
  197. BUG_ON(!path);
  198. ret = btrfs_lookup_inode(trans, root, path,
  199. &BTRFS_I(inode)->location, 1);
  200. if (ret) {
  201. if (ret > 0)
  202. ret = -ENOENT;
  203. goto failed;
  204. }
  205. inode_item = btrfs_item_ptr(btrfs_buffer_leaf(path->nodes[0]),
  206. path->slots[0],
  207. struct btrfs_inode_item);
  208. fill_inode_item(inode_item, inode);
  209. btrfs_mark_buffer_dirty(path->nodes[0]);
  210. btrfs_set_inode_last_trans(trans, inode);
  211. ret = 0;
  212. failed:
  213. btrfs_release_path(root, path);
  214. btrfs_free_path(path);
  215. return ret;
  216. }
  217. static int btrfs_unlink_trans(struct btrfs_trans_handle *trans,
  218. struct btrfs_root *root,
  219. struct inode *dir,
  220. struct dentry *dentry)
  221. {
  222. struct btrfs_path *path;
  223. const char *name = dentry->d_name.name;
  224. int name_len = dentry->d_name.len;
  225. int ret = 0;
  226. u64 objectid;
  227. struct btrfs_dir_item *di;
  228. path = btrfs_alloc_path();
  229. if (!path) {
  230. ret = -ENOMEM;
  231. goto err;
  232. }
  233. di = btrfs_lookup_dir_item(trans, root, path, dir->i_ino,
  234. name, name_len, -1);
  235. if (IS_ERR(di)) {
  236. ret = PTR_ERR(di);
  237. goto err;
  238. }
  239. if (!di) {
  240. ret = -ENOENT;
  241. goto err;
  242. }
  243. objectid = btrfs_disk_key_objectid(&di->location);
  244. ret = btrfs_delete_one_dir_name(trans, root, path, di);
  245. if (ret)
  246. goto err;
  247. btrfs_release_path(root, path);
  248. di = btrfs_lookup_dir_index_item(trans, root, path, dir->i_ino,
  249. objectid, name, name_len, -1);
  250. if (IS_ERR(di)) {
  251. ret = PTR_ERR(di);
  252. goto err;
  253. }
  254. if (!di) {
  255. ret = -ENOENT;
  256. goto err;
  257. }
  258. ret = btrfs_delete_one_dir_name(trans, root, path, di);
  259. dentry->d_inode->i_ctime = dir->i_ctime;
  260. err:
  261. btrfs_free_path(path);
  262. if (!ret) {
  263. dir->i_size -= name_len * 2;
  264. dir->i_mtime = dir->i_ctime = CURRENT_TIME;
  265. btrfs_update_inode(trans, root, dir);
  266. drop_nlink(dentry->d_inode);
  267. ret = btrfs_update_inode(trans, root, dentry->d_inode);
  268. dir->i_sb->s_dirt = 1;
  269. }
  270. return ret;
  271. }
  272. static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
  273. {
  274. struct btrfs_root *root;
  275. struct btrfs_trans_handle *trans;
  276. int ret;
  277. root = BTRFS_I(dir)->root;
  278. mutex_lock(&root->fs_info->fs_mutex);
  279. trans = btrfs_start_transaction(root, 1);
  280. btrfs_set_trans_block_group(trans, dir);
  281. ret = btrfs_unlink_trans(trans, root, dir, dentry);
  282. btrfs_end_transaction(trans, root);
  283. mutex_unlock(&root->fs_info->fs_mutex);
  284. btrfs_btree_balance_dirty(root);
  285. return ret;
  286. }
  287. static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
  288. {
  289. struct inode *inode = dentry->d_inode;
  290. int err;
  291. int ret;
  292. struct btrfs_root *root = BTRFS_I(dir)->root;
  293. struct btrfs_path *path;
  294. struct btrfs_key key;
  295. struct btrfs_trans_handle *trans;
  296. struct btrfs_key found_key;
  297. int found_type;
  298. struct btrfs_leaf *leaf;
  299. char *goodnames = "..";
  300. path = btrfs_alloc_path();
  301. BUG_ON(!path);
  302. mutex_lock(&root->fs_info->fs_mutex);
  303. trans = btrfs_start_transaction(root, 1);
  304. btrfs_set_trans_block_group(trans, dir);
  305. key.objectid = inode->i_ino;
  306. key.offset = (u64)-1;
  307. key.flags = (u32)-1;
  308. while(1) {
  309. ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
  310. if (ret < 0) {
  311. err = ret;
  312. goto out;
  313. }
  314. BUG_ON(ret == 0);
  315. if (path->slots[0] == 0) {
  316. err = -ENOENT;
  317. goto out;
  318. }
  319. path->slots[0]--;
  320. leaf = btrfs_buffer_leaf(path->nodes[0]);
  321. btrfs_disk_key_to_cpu(&found_key,
  322. &leaf->items[path->slots[0]].key);
  323. found_type = btrfs_key_type(&found_key);
  324. if (found_key.objectid != inode->i_ino) {
  325. err = -ENOENT;
  326. goto out;
  327. }
  328. if ((found_type != BTRFS_DIR_ITEM_KEY &&
  329. found_type != BTRFS_DIR_INDEX_KEY) ||
  330. (!btrfs_match_dir_item_name(root, path, goodnames, 2) &&
  331. !btrfs_match_dir_item_name(root, path, goodnames, 1))) {
  332. err = -ENOTEMPTY;
  333. goto out;
  334. }
  335. ret = btrfs_del_item(trans, root, path);
  336. BUG_ON(ret);
  337. if (found_type == BTRFS_DIR_ITEM_KEY && found_key.offset == 1)
  338. break;
  339. btrfs_release_path(root, path);
  340. }
  341. ret = 0;
  342. btrfs_release_path(root, path);
  343. /* now the directory is empty */
  344. err = btrfs_unlink_trans(trans, root, dir, dentry);
  345. if (!err) {
  346. inode->i_size = 0;
  347. }
  348. out:
  349. btrfs_release_path(root, path);
  350. btrfs_free_path(path);
  351. mutex_unlock(&root->fs_info->fs_mutex);
  352. ret = btrfs_end_transaction(trans, root);
  353. btrfs_btree_balance_dirty(root);
  354. if (ret && !err)
  355. err = ret;
  356. return err;
  357. }
  358. static int btrfs_free_inode(struct btrfs_trans_handle *trans,
  359. struct btrfs_root *root,
  360. struct inode *inode)
  361. {
  362. struct btrfs_path *path;
  363. int ret;
  364. clear_inode(inode);
  365. path = btrfs_alloc_path();
  366. BUG_ON(!path);
  367. ret = btrfs_lookup_inode(trans, root, path,
  368. &BTRFS_I(inode)->location, -1);
  369. if (ret > 0)
  370. ret = -ENOENT;
  371. if (!ret)
  372. ret = btrfs_del_item(trans, root, path);
  373. btrfs_free_path(path);
  374. return ret;
  375. }
  376. /*
  377. * this can truncate away extent items, csum items and directory items.
  378. * It starts at a high offset and removes keys until it can't find
  379. * any higher than i_size.
  380. *
  381. * csum items that cross the new i_size are truncated to the new size
  382. * as well.
  383. */
  384. static int btrfs_truncate_in_trans(struct btrfs_trans_handle *trans,
  385. struct btrfs_root *root,
  386. struct inode *inode)
  387. {
  388. int ret;
  389. struct btrfs_path *path;
  390. struct btrfs_key key;
  391. struct btrfs_disk_key *found_key;
  392. u32 found_type;
  393. struct btrfs_leaf *leaf;
  394. struct btrfs_file_extent_item *fi;
  395. u64 extent_start = 0;
  396. u64 extent_num_blocks = 0;
  397. u64 item_end = 0;
  398. int found_extent;
  399. int del_item;
  400. btrfs_drop_extent_cache(inode, inode->i_size, (u64)-1);
  401. path = btrfs_alloc_path();
  402. path->reada = -1;
  403. BUG_ON(!path);
  404. /* FIXME, add redo link to tree so we don't leak on crash */
  405. key.objectid = inode->i_ino;
  406. key.offset = (u64)-1;
  407. key.flags = (u32)-1;
  408. while(1) {
  409. btrfs_init_path(path);
  410. fi = NULL;
  411. ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
  412. if (ret < 0) {
  413. goto error;
  414. }
  415. if (ret > 0) {
  416. BUG_ON(path->slots[0] == 0);
  417. path->slots[0]--;
  418. }
  419. leaf = btrfs_buffer_leaf(path->nodes[0]);
  420. found_key = &leaf->items[path->slots[0]].key;
  421. found_type = btrfs_disk_key_type(found_key);
  422. if (btrfs_disk_key_objectid(found_key) != inode->i_ino)
  423. break;
  424. if (found_type != BTRFS_CSUM_ITEM_KEY &&
  425. found_type != BTRFS_DIR_ITEM_KEY &&
  426. found_type != BTRFS_DIR_INDEX_KEY &&
  427. found_type != BTRFS_EXTENT_DATA_KEY)
  428. break;
  429. item_end = btrfs_disk_key_offset(found_key);
  430. if (found_type == BTRFS_EXTENT_DATA_KEY) {
  431. fi = btrfs_item_ptr(btrfs_buffer_leaf(path->nodes[0]),
  432. path->slots[0],
  433. struct btrfs_file_extent_item);
  434. if (btrfs_file_extent_type(fi) !=
  435. BTRFS_FILE_EXTENT_INLINE) {
  436. item_end += btrfs_file_extent_num_blocks(fi) <<
  437. inode->i_blkbits;
  438. }
  439. }
  440. if (found_type == BTRFS_CSUM_ITEM_KEY) {
  441. ret = btrfs_csum_truncate(trans, root, path,
  442. inode->i_size);
  443. BUG_ON(ret);
  444. }
  445. if (item_end < inode->i_size) {
  446. if (found_type == BTRFS_DIR_ITEM_KEY) {
  447. found_type = BTRFS_INODE_ITEM_KEY;
  448. } else if (found_type == BTRFS_EXTENT_ITEM_KEY) {
  449. found_type = BTRFS_CSUM_ITEM_KEY;
  450. } else if (found_type) {
  451. found_type--;
  452. } else {
  453. break;
  454. }
  455. btrfs_set_key_type(&key, found_type - 1);
  456. continue;
  457. }
  458. if (btrfs_disk_key_offset(found_key) >= inode->i_size)
  459. del_item = 1;
  460. else
  461. del_item = 0;
  462. found_extent = 0;
  463. /* FIXME, shrink the extent if the ref count is only 1 */
  464. if (found_type == BTRFS_EXTENT_DATA_KEY &&
  465. btrfs_file_extent_type(fi) !=
  466. BTRFS_FILE_EXTENT_INLINE) {
  467. u64 num_dec;
  468. if (!del_item) {
  469. u64 orig_num_blocks =
  470. btrfs_file_extent_num_blocks(fi);
  471. extent_num_blocks = inode->i_size -
  472. btrfs_disk_key_offset(found_key) +
  473. root->blocksize - 1;
  474. extent_num_blocks >>= inode->i_blkbits;
  475. btrfs_set_file_extent_num_blocks(fi,
  476. extent_num_blocks);
  477. inode->i_blocks -= (orig_num_blocks -
  478. extent_num_blocks) << 3;
  479. btrfs_mark_buffer_dirty(path->nodes[0]);
  480. } else {
  481. extent_start =
  482. btrfs_file_extent_disk_blocknr(fi);
  483. extent_num_blocks =
  484. btrfs_file_extent_disk_num_blocks(fi);
  485. /* FIXME blocksize != 4096 */
  486. num_dec = btrfs_file_extent_num_blocks(fi) << 3;
  487. if (extent_start != 0) {
  488. found_extent = 1;
  489. inode->i_blocks -= num_dec;
  490. }
  491. }
  492. }
  493. if (del_item) {
  494. ret = btrfs_del_item(trans, root, path);
  495. if (ret)
  496. goto error;
  497. } else {
  498. break;
  499. }
  500. btrfs_release_path(root, path);
  501. if (found_extent) {
  502. ret = btrfs_free_extent(trans, root, extent_start,
  503. extent_num_blocks, 0);
  504. BUG_ON(ret);
  505. }
  506. }
  507. ret = 0;
  508. error:
  509. btrfs_release_path(root, path);
  510. btrfs_free_path(path);
  511. inode->i_sb->s_dirt = 1;
  512. return ret;
  513. }
  514. static int btrfs_cow_one_page(struct inode *inode, struct page *page,
  515. size_t zero_start)
  516. {
  517. char *kaddr;
  518. int ret = 0;
  519. struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
  520. u64 page_start = page->index << PAGE_CACHE_SHIFT;
  521. u64 page_end = page_start + PAGE_CACHE_SIZE - 1;
  522. if (!PagePrivate(page)) {
  523. SetPagePrivate(page);
  524. set_page_private(page, 1);
  525. WARN_ON(!page->mapping->a_ops->invalidatepage);
  526. page_cache_get(page);
  527. }
  528. lock_extent(em_tree, page_start, page_end, GFP_NOFS);
  529. set_extent_delalloc(&BTRFS_I(inode)->extent_tree, page_start,
  530. page_end, GFP_NOFS);
  531. if (zero_start != PAGE_CACHE_SIZE) {
  532. kaddr = kmap(page);
  533. memset(kaddr + zero_start, 0, PAGE_CACHE_SIZE - zero_start);
  534. flush_dcache_page(page);
  535. kunmap(page);
  536. }
  537. set_page_dirty(page);
  538. unlock_extent(em_tree, page_start, page_end, GFP_NOFS);
  539. return ret;
  540. }
  541. /*
  542. * taken from block_truncate_page, but does cow as it zeros out
  543. * any bytes left in the last page in the file.
  544. */
  545. static int btrfs_truncate_page(struct address_space *mapping, loff_t from)
  546. {
  547. struct inode *inode = mapping->host;
  548. unsigned blocksize = 1 << inode->i_blkbits;
  549. pgoff_t index = from >> PAGE_CACHE_SHIFT;
  550. unsigned offset = from & (PAGE_CACHE_SIZE-1);
  551. struct page *page;
  552. int ret = 0;
  553. u64 page_start;
  554. if ((offset & (blocksize - 1)) == 0)
  555. goto out;
  556. ret = -ENOMEM;
  557. page = grab_cache_page(mapping, index);
  558. if (!page)
  559. goto out;
  560. if (!PageUptodate(page)) {
  561. ret = btrfs_readpage(NULL, page);
  562. lock_page(page);
  563. if (!PageUptodate(page)) {
  564. ret = -EIO;
  565. goto out;
  566. }
  567. }
  568. page_start = page->index << PAGE_CACHE_SHIFT;
  569. ret = btrfs_cow_one_page(inode, page, offset);
  570. unlock_page(page);
  571. page_cache_release(page);
  572. out:
  573. return ret;
  574. }
  575. static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
  576. {
  577. struct inode *inode = dentry->d_inode;
  578. int err;
  579. err = inode_change_ok(inode, attr);
  580. if (err)
  581. return err;
  582. if (S_ISREG(inode->i_mode) &&
  583. attr->ia_valid & ATTR_SIZE && attr->ia_size > inode->i_size) {
  584. struct btrfs_trans_handle *trans;
  585. struct btrfs_root *root = BTRFS_I(inode)->root;
  586. u64 mask = root->blocksize - 1;
  587. u64 pos = (inode->i_size + mask) & ~mask;
  588. u64 hole_size;
  589. if (attr->ia_size <= pos)
  590. goto out;
  591. btrfs_truncate_page(inode->i_mapping, inode->i_size);
  592. hole_size = (attr->ia_size - pos + mask) & ~mask;
  593. hole_size >>= inode->i_blkbits;
  594. mutex_lock(&root->fs_info->fs_mutex);
  595. trans = btrfs_start_transaction(root, 1);
  596. btrfs_set_trans_block_group(trans, inode);
  597. err = btrfs_insert_file_extent(trans, root, inode->i_ino,
  598. pos, 0, 0, hole_size);
  599. btrfs_end_transaction(trans, root);
  600. mutex_unlock(&root->fs_info->fs_mutex);
  601. if (err)
  602. return err;
  603. }
  604. out:
  605. err = inode_setattr(inode, attr);
  606. return err;
  607. }
  608. void btrfs_delete_inode(struct inode *inode)
  609. {
  610. struct btrfs_trans_handle *trans;
  611. struct btrfs_root *root = BTRFS_I(inode)->root;
  612. int ret;
  613. truncate_inode_pages(&inode->i_data, 0);
  614. if (is_bad_inode(inode)) {
  615. goto no_delete;
  616. }
  617. inode->i_size = 0;
  618. mutex_lock(&root->fs_info->fs_mutex);
  619. trans = btrfs_start_transaction(root, 1);
  620. btrfs_set_trans_block_group(trans, inode);
  621. ret = btrfs_truncate_in_trans(trans, root, inode);
  622. if (ret)
  623. goto no_delete_lock;
  624. ret = btrfs_free_inode(trans, root, inode);
  625. if (ret)
  626. goto no_delete_lock;
  627. btrfs_end_transaction(trans, root);
  628. mutex_unlock(&root->fs_info->fs_mutex);
  629. btrfs_btree_balance_dirty(root);
  630. return;
  631. no_delete_lock:
  632. btrfs_end_transaction(trans, root);
  633. mutex_unlock(&root->fs_info->fs_mutex);
  634. btrfs_btree_balance_dirty(root);
  635. no_delete:
  636. clear_inode(inode);
  637. }
  638. /*
  639. * this returns the key found in the dir entry in the location pointer.
  640. * If no dir entries were found, location->objectid is 0.
  641. */
  642. static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
  643. struct btrfs_key *location)
  644. {
  645. const char *name = dentry->d_name.name;
  646. int namelen = dentry->d_name.len;
  647. struct btrfs_dir_item *di;
  648. struct btrfs_path *path;
  649. struct btrfs_root *root = BTRFS_I(dir)->root;
  650. int ret;
  651. path = btrfs_alloc_path();
  652. BUG_ON(!path);
  653. di = btrfs_lookup_dir_item(NULL, root, path, dir->i_ino, name,
  654. namelen, 0);
  655. if (!di || IS_ERR(di)) {
  656. location->objectid = 0;
  657. ret = 0;
  658. goto out;
  659. }
  660. btrfs_disk_key_to_cpu(location, &di->location);
  661. out:
  662. btrfs_release_path(root, path);
  663. btrfs_free_path(path);
  664. return ret;
  665. }
  666. /*
  667. * when we hit a tree root in a directory, the btrfs part of the inode
  668. * needs to be changed to reflect the root directory of the tree root. This
  669. * is kind of like crossing a mount point.
  670. */
  671. static int fixup_tree_root_location(struct btrfs_root *root,
  672. struct btrfs_key *location,
  673. struct btrfs_root **sub_root,
  674. struct dentry *dentry)
  675. {
  676. struct btrfs_path *path;
  677. struct btrfs_root_item *ri;
  678. if (btrfs_key_type(location) != BTRFS_ROOT_ITEM_KEY)
  679. return 0;
  680. if (location->objectid == BTRFS_ROOT_TREE_OBJECTID)
  681. return 0;
  682. path = btrfs_alloc_path();
  683. BUG_ON(!path);
  684. mutex_lock(&root->fs_info->fs_mutex);
  685. *sub_root = btrfs_read_fs_root(root->fs_info, location,
  686. dentry->d_name.name,
  687. dentry->d_name.len);
  688. if (IS_ERR(*sub_root))
  689. return PTR_ERR(*sub_root);
  690. ri = &(*sub_root)->root_item;
  691. location->objectid = btrfs_root_dirid(ri);
  692. location->flags = 0;
  693. btrfs_set_key_type(location, BTRFS_INODE_ITEM_KEY);
  694. location->offset = 0;
  695. btrfs_free_path(path);
  696. mutex_unlock(&root->fs_info->fs_mutex);
  697. return 0;
  698. }
  699. static int btrfs_init_locked_inode(struct inode *inode, void *p)
  700. {
  701. struct btrfs_iget_args *args = p;
  702. inode->i_ino = args->ino;
  703. BTRFS_I(inode)->root = args->root;
  704. extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
  705. inode->i_mapping, GFP_NOFS);
  706. return 0;
  707. }
  708. static int btrfs_find_actor(struct inode *inode, void *opaque)
  709. {
  710. struct btrfs_iget_args *args = opaque;
  711. return (args->ino == inode->i_ino &&
  712. args->root == BTRFS_I(inode)->root);
  713. }
  714. struct inode *btrfs_iget_locked(struct super_block *s, u64 objectid,
  715. struct btrfs_root *root)
  716. {
  717. struct inode *inode;
  718. struct btrfs_iget_args args;
  719. args.ino = objectid;
  720. args.root = root;
  721. inode = iget5_locked(s, objectid, btrfs_find_actor,
  722. btrfs_init_locked_inode,
  723. (void *)&args);
  724. return inode;
  725. }
  726. static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
  727. struct nameidata *nd)
  728. {
  729. struct inode * inode;
  730. struct btrfs_inode *bi = BTRFS_I(dir);
  731. struct btrfs_root *root = bi->root;
  732. struct btrfs_root *sub_root = root;
  733. struct btrfs_key location;
  734. int ret;
  735. if (dentry->d_name.len > BTRFS_NAME_LEN)
  736. return ERR_PTR(-ENAMETOOLONG);
  737. mutex_lock(&root->fs_info->fs_mutex);
  738. ret = btrfs_inode_by_name(dir, dentry, &location);
  739. mutex_unlock(&root->fs_info->fs_mutex);
  740. if (ret < 0)
  741. return ERR_PTR(ret);
  742. inode = NULL;
  743. if (location.objectid) {
  744. ret = fixup_tree_root_location(root, &location, &sub_root,
  745. dentry);
  746. if (ret < 0)
  747. return ERR_PTR(ret);
  748. if (ret > 0)
  749. return ERR_PTR(-ENOENT);
  750. inode = btrfs_iget_locked(dir->i_sb, location.objectid,
  751. sub_root);
  752. if (!inode)
  753. return ERR_PTR(-EACCES);
  754. if (inode->i_state & I_NEW) {
  755. /* the inode and parent dir are two different roots */
  756. if (sub_root != root) {
  757. igrab(inode);
  758. sub_root->inode = inode;
  759. }
  760. BTRFS_I(inode)->root = sub_root;
  761. memcpy(&BTRFS_I(inode)->location, &location,
  762. sizeof(location));
  763. btrfs_read_locked_inode(inode);
  764. unlock_new_inode(inode);
  765. }
  766. }
  767. return d_splice_alias(inode, dentry);
  768. }
  769. static unsigned char btrfs_filetype_table[] = {
  770. DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
  771. };
  772. static int btrfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
  773. {
  774. struct inode *inode = filp->f_path.dentry->d_inode;
  775. struct btrfs_root *root = BTRFS_I(inode)->root;
  776. struct btrfs_item *item;
  777. struct btrfs_dir_item *di;
  778. struct btrfs_key key;
  779. struct btrfs_path *path;
  780. int ret;
  781. u32 nritems;
  782. struct btrfs_leaf *leaf;
  783. int slot;
  784. int advance;
  785. unsigned char d_type;
  786. int over = 0;
  787. u32 di_cur;
  788. u32 di_total;
  789. u32 di_len;
  790. int key_type = BTRFS_DIR_INDEX_KEY;
  791. /* FIXME, use a real flag for deciding about the key type */
  792. if (root->fs_info->tree_root == root)
  793. key_type = BTRFS_DIR_ITEM_KEY;
  794. mutex_lock(&root->fs_info->fs_mutex);
  795. key.objectid = inode->i_ino;
  796. key.flags = 0;
  797. btrfs_set_key_type(&key, key_type);
  798. key.offset = filp->f_pos;
  799. path = btrfs_alloc_path();
  800. path->reada = 2;
  801. ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
  802. if (ret < 0)
  803. goto err;
  804. advance = 0;
  805. while(1) {
  806. leaf = btrfs_buffer_leaf(path->nodes[0]);
  807. nritems = btrfs_header_nritems(&leaf->header);
  808. slot = path->slots[0];
  809. if (advance || slot >= nritems) {
  810. if (slot >= nritems -1) {
  811. ret = btrfs_next_leaf(root, path);
  812. if (ret)
  813. break;
  814. leaf = btrfs_buffer_leaf(path->nodes[0]);
  815. nritems = btrfs_header_nritems(&leaf->header);
  816. slot = path->slots[0];
  817. } else {
  818. slot++;
  819. path->slots[0]++;
  820. }
  821. }
  822. advance = 1;
  823. item = leaf->items + slot;
  824. if (btrfs_disk_key_objectid(&item->key) != key.objectid)
  825. break;
  826. if (btrfs_disk_key_type(&item->key) != key_type)
  827. break;
  828. if (btrfs_disk_key_offset(&item->key) < filp->f_pos)
  829. continue;
  830. filp->f_pos = btrfs_disk_key_offset(&item->key);
  831. advance = 1;
  832. di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item);
  833. di_cur = 0;
  834. di_total = btrfs_item_size(leaf->items + slot);
  835. while(di_cur < di_total) {
  836. d_type = btrfs_filetype_table[btrfs_dir_type(di)];
  837. over = filldir(dirent, (const char *)(di + 1),
  838. btrfs_dir_name_len(di),
  839. btrfs_disk_key_offset(&item->key),
  840. btrfs_disk_key_objectid(&di->location),
  841. d_type);
  842. if (over)
  843. goto nopos;
  844. di_len = btrfs_dir_name_len(di) + sizeof(*di);
  845. di_cur += di_len;
  846. di = (struct btrfs_dir_item *)((char *)di + di_len);
  847. }
  848. }
  849. filp->f_pos++;
  850. nopos:
  851. ret = 0;
  852. err:
  853. btrfs_release_path(root, path);
  854. btrfs_free_path(path);
  855. mutex_unlock(&root->fs_info->fs_mutex);
  856. return ret;
  857. }
  858. int btrfs_write_inode(struct inode *inode, int wait)
  859. {
  860. struct btrfs_root *root = BTRFS_I(inode)->root;
  861. struct btrfs_trans_handle *trans;
  862. int ret = 0;
  863. if (wait) {
  864. mutex_lock(&root->fs_info->fs_mutex);
  865. trans = btrfs_start_transaction(root, 1);
  866. btrfs_set_trans_block_group(trans, inode);
  867. ret = btrfs_commit_transaction(trans, root);
  868. mutex_unlock(&root->fs_info->fs_mutex);
  869. }
  870. return ret;
  871. }
  872. /*
  873. * This is somewhat expensive, updating the tree every time the
  874. * inode changes. But, it is most likely to find the inode in cache.
  875. * FIXME, needs more benchmarking...there are no reasons other than performance
  876. * to keep or drop this code.
  877. */
  878. void btrfs_dirty_inode(struct inode *inode)
  879. {
  880. struct btrfs_root *root = BTRFS_I(inode)->root;
  881. struct btrfs_trans_handle *trans;
  882. mutex_lock(&root->fs_info->fs_mutex);
  883. trans = btrfs_start_transaction(root, 1);
  884. btrfs_set_trans_block_group(trans, inode);
  885. btrfs_update_inode(trans, root, inode);
  886. btrfs_end_transaction(trans, root);
  887. mutex_unlock(&root->fs_info->fs_mutex);
  888. }
  889. static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
  890. struct btrfs_root *root,
  891. u64 objectid,
  892. struct btrfs_block_group_cache *group,
  893. int mode)
  894. {
  895. struct inode *inode;
  896. struct btrfs_inode_item inode_item;
  897. struct btrfs_key *location;
  898. int ret;
  899. int owner;
  900. inode = new_inode(root->fs_info->sb);
  901. if (!inode)
  902. return ERR_PTR(-ENOMEM);
  903. extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
  904. inode->i_mapping, GFP_NOFS);
  905. BTRFS_I(inode)->root = root;
  906. if (mode & S_IFDIR)
  907. owner = 0;
  908. else
  909. owner = 1;
  910. group = btrfs_find_block_group(root, group, 0, 0, owner);
  911. BTRFS_I(inode)->block_group = group;
  912. inode->i_uid = current->fsuid;
  913. inode->i_gid = current->fsgid;
  914. inode->i_mode = mode;
  915. inode->i_ino = objectid;
  916. inode->i_blocks = 0;
  917. inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
  918. fill_inode_item(&inode_item, inode);
  919. location = &BTRFS_I(inode)->location;
  920. location->objectid = objectid;
  921. location->flags = 0;
  922. location->offset = 0;
  923. btrfs_set_key_type(location, BTRFS_INODE_ITEM_KEY);
  924. ret = btrfs_insert_inode(trans, root, objectid, &inode_item);
  925. if (ret)
  926. return ERR_PTR(ret);
  927. insert_inode_hash(inode);
  928. return inode;
  929. }
  930. static inline u8 btrfs_inode_type(struct inode *inode)
  931. {
  932. return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT];
  933. }
  934. static int btrfs_add_link(struct btrfs_trans_handle *trans,
  935. struct dentry *dentry, struct inode *inode)
  936. {
  937. int ret;
  938. struct btrfs_key key;
  939. struct btrfs_root *root = BTRFS_I(dentry->d_parent->d_inode)->root;
  940. struct inode *parent_inode;
  941. key.objectid = inode->i_ino;
  942. key.flags = 0;
  943. btrfs_set_key_type(&key, BTRFS_INODE_ITEM_KEY);
  944. key.offset = 0;
  945. ret = btrfs_insert_dir_item(trans, root,
  946. dentry->d_name.name, dentry->d_name.len,
  947. dentry->d_parent->d_inode->i_ino,
  948. &key, btrfs_inode_type(inode));
  949. if (ret == 0) {
  950. parent_inode = dentry->d_parent->d_inode;
  951. parent_inode->i_size += dentry->d_name.len * 2;
  952. parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
  953. ret = btrfs_update_inode(trans, root,
  954. dentry->d_parent->d_inode);
  955. }
  956. return ret;
  957. }
  958. static int btrfs_add_nondir(struct btrfs_trans_handle *trans,
  959. struct dentry *dentry, struct inode *inode)
  960. {
  961. int err = btrfs_add_link(trans, dentry, inode);
  962. if (!err) {
  963. d_instantiate(dentry, inode);
  964. return 0;
  965. }
  966. if (err > 0)
  967. err = -EEXIST;
  968. return err;
  969. }
  970. static int btrfs_mknod(struct inode *dir, struct dentry *dentry,
  971. int mode, dev_t rdev)
  972. {
  973. struct btrfs_trans_handle *trans;
  974. struct btrfs_root *root = BTRFS_I(dir)->root;
  975. struct inode *inode;
  976. int err;
  977. int drop_inode = 0;
  978. u64 objectid;
  979. if (!new_valid_dev(rdev))
  980. return -EINVAL;
  981. mutex_lock(&root->fs_info->fs_mutex);
  982. trans = btrfs_start_transaction(root, 1);
  983. btrfs_set_trans_block_group(trans, dir);
  984. err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
  985. if (err) {
  986. err = -ENOSPC;
  987. goto out_unlock;
  988. }
  989. inode = btrfs_new_inode(trans, root, objectid,
  990. BTRFS_I(dir)->block_group, mode);
  991. err = PTR_ERR(inode);
  992. if (IS_ERR(inode))
  993. goto out_unlock;
  994. btrfs_set_trans_block_group(trans, inode);
  995. err = btrfs_add_nondir(trans, dentry, inode);
  996. if (err)
  997. drop_inode = 1;
  998. else {
  999. inode->i_op = &btrfs_special_inode_operations;
  1000. init_special_inode(inode, inode->i_mode, rdev);
  1001. btrfs_update_inode(trans, root, inode);
  1002. }
  1003. dir->i_sb->s_dirt = 1;
  1004. btrfs_update_inode_block_group(trans, inode);
  1005. btrfs_update_inode_block_group(trans, dir);
  1006. out_unlock:
  1007. btrfs_end_transaction(trans, root);
  1008. mutex_unlock(&root->fs_info->fs_mutex);
  1009. if (drop_inode) {
  1010. inode_dec_link_count(inode);
  1011. iput(inode);
  1012. }
  1013. btrfs_btree_balance_dirty(root);
  1014. return err;
  1015. }
  1016. static int btrfs_create(struct inode *dir, struct dentry *dentry,
  1017. int mode, struct nameidata *nd)
  1018. {
  1019. struct btrfs_trans_handle *trans;
  1020. struct btrfs_root *root = BTRFS_I(dir)->root;
  1021. struct inode *inode;
  1022. int err;
  1023. int drop_inode = 0;
  1024. u64 objectid;
  1025. mutex_lock(&root->fs_info->fs_mutex);
  1026. trans = btrfs_start_transaction(root, 1);
  1027. btrfs_set_trans_block_group(trans, dir);
  1028. err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
  1029. if (err) {
  1030. err = -ENOSPC;
  1031. goto out_unlock;
  1032. }
  1033. inode = btrfs_new_inode(trans, root, objectid,
  1034. BTRFS_I(dir)->block_group, mode);
  1035. err = PTR_ERR(inode);
  1036. if (IS_ERR(inode))
  1037. goto out_unlock;
  1038. btrfs_set_trans_block_group(trans, inode);
  1039. err = btrfs_add_nondir(trans, dentry, inode);
  1040. if (err)
  1041. drop_inode = 1;
  1042. else {
  1043. inode->i_mapping->a_ops = &btrfs_aops;
  1044. inode->i_fop = &btrfs_file_operations;
  1045. inode->i_op = &btrfs_file_inode_operations;
  1046. extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
  1047. inode->i_mapping, GFP_NOFS);
  1048. BTRFS_I(inode)->extent_tree.fill_delalloc = run_delalloc_range;
  1049. }
  1050. dir->i_sb->s_dirt = 1;
  1051. btrfs_update_inode_block_group(trans, inode);
  1052. btrfs_update_inode_block_group(trans, dir);
  1053. out_unlock:
  1054. btrfs_end_transaction(trans, root);
  1055. mutex_unlock(&root->fs_info->fs_mutex);
  1056. if (drop_inode) {
  1057. inode_dec_link_count(inode);
  1058. iput(inode);
  1059. }
  1060. btrfs_btree_balance_dirty(root);
  1061. return err;
  1062. }
  1063. static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
  1064. struct dentry *dentry)
  1065. {
  1066. struct btrfs_trans_handle *trans;
  1067. struct btrfs_root *root = BTRFS_I(dir)->root;
  1068. struct inode *inode = old_dentry->d_inode;
  1069. int err;
  1070. int drop_inode = 0;
  1071. if (inode->i_nlink == 0)
  1072. return -ENOENT;
  1073. inc_nlink(inode);
  1074. mutex_lock(&root->fs_info->fs_mutex);
  1075. trans = btrfs_start_transaction(root, 1);
  1076. btrfs_set_trans_block_group(trans, dir);
  1077. atomic_inc(&inode->i_count);
  1078. err = btrfs_add_nondir(trans, dentry, inode);
  1079. if (err)
  1080. drop_inode = 1;
  1081. dir->i_sb->s_dirt = 1;
  1082. btrfs_update_inode_block_group(trans, dir);
  1083. err = btrfs_update_inode(trans, root, inode);
  1084. if (err)
  1085. drop_inode = 1;
  1086. btrfs_end_transaction(trans, root);
  1087. mutex_unlock(&root->fs_info->fs_mutex);
  1088. if (drop_inode) {
  1089. inode_dec_link_count(inode);
  1090. iput(inode);
  1091. }
  1092. btrfs_btree_balance_dirty(root);
  1093. return err;
  1094. }
  1095. static int btrfs_make_empty_dir(struct btrfs_trans_handle *trans,
  1096. struct btrfs_root *root,
  1097. u64 objectid, u64 dirid)
  1098. {
  1099. int ret;
  1100. char buf[2];
  1101. struct btrfs_key key;
  1102. buf[0] = '.';
  1103. buf[1] = '.';
  1104. key.objectid = objectid;
  1105. key.offset = 0;
  1106. key.flags = 0;
  1107. btrfs_set_key_type(&key, BTRFS_INODE_ITEM_KEY);
  1108. ret = btrfs_insert_dir_item(trans, root, buf, 1, objectid,
  1109. &key, BTRFS_FT_DIR);
  1110. if (ret)
  1111. goto error;
  1112. key.objectid = dirid;
  1113. ret = btrfs_insert_dir_item(trans, root, buf, 2, objectid,
  1114. &key, BTRFS_FT_DIR);
  1115. if (ret)
  1116. goto error;
  1117. error:
  1118. return ret;
  1119. }
  1120. static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
  1121. {
  1122. struct inode *inode;
  1123. struct btrfs_trans_handle *trans;
  1124. struct btrfs_root *root = BTRFS_I(dir)->root;
  1125. int err = 0;
  1126. int drop_on_err = 0;
  1127. u64 objectid;
  1128. mutex_lock(&root->fs_info->fs_mutex);
  1129. trans = btrfs_start_transaction(root, 1);
  1130. btrfs_set_trans_block_group(trans, dir);
  1131. if (IS_ERR(trans)) {
  1132. err = PTR_ERR(trans);
  1133. goto out_unlock;
  1134. }
  1135. err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
  1136. if (err) {
  1137. err = -ENOSPC;
  1138. goto out_unlock;
  1139. }
  1140. inode = btrfs_new_inode(trans, root, objectid,
  1141. BTRFS_I(dir)->block_group, S_IFDIR | mode);
  1142. if (IS_ERR(inode)) {
  1143. err = PTR_ERR(inode);
  1144. goto out_fail;
  1145. }
  1146. drop_on_err = 1;
  1147. inode->i_op = &btrfs_dir_inode_operations;
  1148. inode->i_fop = &btrfs_dir_file_operations;
  1149. btrfs_set_trans_block_group(trans, inode);
  1150. err = btrfs_make_empty_dir(trans, root, inode->i_ino, dir->i_ino);
  1151. if (err)
  1152. goto out_fail;
  1153. inode->i_size = 6;
  1154. err = btrfs_update_inode(trans, root, inode);
  1155. if (err)
  1156. goto out_fail;
  1157. err = btrfs_add_link(trans, dentry, inode);
  1158. if (err)
  1159. goto out_fail;
  1160. d_instantiate(dentry, inode);
  1161. drop_on_err = 0;
  1162. dir->i_sb->s_dirt = 1;
  1163. btrfs_update_inode_block_group(trans, inode);
  1164. btrfs_update_inode_block_group(trans, dir);
  1165. out_fail:
  1166. btrfs_end_transaction(trans, root);
  1167. out_unlock:
  1168. mutex_unlock(&root->fs_info->fs_mutex);
  1169. if (drop_on_err)
  1170. iput(inode);
  1171. btrfs_btree_balance_dirty(root);
  1172. return err;
  1173. }
  1174. struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
  1175. size_t page_offset, u64 start, u64 end,
  1176. int create)
  1177. {
  1178. int ret;
  1179. int err = 0;
  1180. u64 blocknr;
  1181. u64 extent_start = 0;
  1182. u64 extent_end = 0;
  1183. u64 objectid = inode->i_ino;
  1184. u32 found_type;
  1185. int failed_insert = 0;
  1186. struct btrfs_path *path;
  1187. struct btrfs_root *root = BTRFS_I(inode)->root;
  1188. struct btrfs_file_extent_item *item;
  1189. struct btrfs_leaf *leaf;
  1190. struct btrfs_disk_key *found_key;
  1191. struct extent_map *em = NULL;
  1192. struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
  1193. struct btrfs_trans_handle *trans = NULL;
  1194. path = btrfs_alloc_path();
  1195. BUG_ON(!path);
  1196. mutex_lock(&root->fs_info->fs_mutex);
  1197. again:
  1198. em = lookup_extent_mapping(em_tree, start, end);
  1199. if (em) {
  1200. goto out;
  1201. }
  1202. if (!em) {
  1203. em = alloc_extent_map(GFP_NOFS);
  1204. if (!em) {
  1205. err = -ENOMEM;
  1206. goto out;
  1207. }
  1208. em->start = 0;
  1209. em->end = 0;
  1210. }
  1211. em->bdev = inode->i_sb->s_bdev;
  1212. ret = btrfs_lookup_file_extent(NULL, root, path,
  1213. objectid, start, 0);
  1214. if (ret < 0) {
  1215. err = ret;
  1216. goto out;
  1217. }
  1218. if (ret != 0) {
  1219. if (path->slots[0] == 0)
  1220. goto not_found;
  1221. path->slots[0]--;
  1222. }
  1223. item = btrfs_item_ptr(btrfs_buffer_leaf(path->nodes[0]), path->slots[0],
  1224. struct btrfs_file_extent_item);
  1225. leaf = btrfs_buffer_leaf(path->nodes[0]);
  1226. blocknr = btrfs_file_extent_disk_blocknr(item);
  1227. blocknr += btrfs_file_extent_offset(item);
  1228. /* are we inside the extent that was found? */
  1229. found_key = &leaf->items[path->slots[0]].key;
  1230. found_type = btrfs_disk_key_type(found_key);
  1231. if (btrfs_disk_key_objectid(found_key) != objectid ||
  1232. found_type != BTRFS_EXTENT_DATA_KEY) {
  1233. goto not_found;
  1234. }
  1235. found_type = btrfs_file_extent_type(item);
  1236. extent_start = btrfs_disk_key_offset(&leaf->items[path->slots[0]].key);
  1237. if (found_type == BTRFS_FILE_EXTENT_REG) {
  1238. extent_end = extent_start +
  1239. (btrfs_file_extent_num_blocks(item) << inode->i_blkbits);
  1240. err = 0;
  1241. if (start < extent_start || start >= extent_end) {
  1242. em->start = start;
  1243. if (start < extent_start) {
  1244. if (end < extent_start)
  1245. goto not_found;
  1246. em->end = extent_end - 1;
  1247. } else {
  1248. em->end = end;
  1249. }
  1250. goto not_found_em;
  1251. }
  1252. if (btrfs_file_extent_disk_blocknr(item) == 0) {
  1253. em->start = extent_start;
  1254. em->end = extent_end - 1;
  1255. em->block_start = 0;
  1256. em->block_end = 0;
  1257. goto insert;
  1258. }
  1259. em->block_start = blocknr << inode->i_blkbits;
  1260. em->block_end = em->block_start +
  1261. (btrfs_file_extent_num_blocks(item) <<
  1262. inode->i_blkbits) - 1;
  1263. em->start = extent_start;
  1264. em->end = extent_end - 1;
  1265. goto insert;
  1266. } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
  1267. char *ptr;
  1268. char *map;
  1269. u32 size;
  1270. size = btrfs_file_extent_inline_len(leaf->items +
  1271. path->slots[0]);
  1272. extent_end = extent_start + size;
  1273. if (start < extent_start || start >= extent_end) {
  1274. em->start = start;
  1275. if (start < extent_start) {
  1276. if (end < extent_start)
  1277. goto not_found;
  1278. em->end = extent_end - 1;
  1279. } else {
  1280. em->end = end;
  1281. }
  1282. goto not_found_em;
  1283. }
  1284. em->block_start = EXTENT_MAP_INLINE;
  1285. em->block_end = EXTENT_MAP_INLINE;
  1286. em->start = extent_start;
  1287. em->end = extent_end - 1;
  1288. if (!page) {
  1289. goto insert;
  1290. }
  1291. ptr = btrfs_file_extent_inline_start(item);
  1292. map = kmap(page);
  1293. memcpy(map + page_offset, ptr, size);
  1294. flush_dcache_page(result->b_page);
  1295. kunmap(page);
  1296. set_extent_uptodate(em_tree, extent_start,
  1297. extent_end, GFP_NOFS);
  1298. goto insert;
  1299. } else {
  1300. printk("unkknown found_type %d\n", found_type);
  1301. WARN_ON(1);
  1302. }
  1303. not_found:
  1304. em->start = start;
  1305. em->end = end;
  1306. not_found_em:
  1307. em->block_start = 0;
  1308. em->block_end = 0;
  1309. insert:
  1310. btrfs_release_path(root, path);
  1311. if (em->start > start || em->end < start) {
  1312. printk("bad extent! em: [%Lu %Lu] passed [%Lu %Lu]\n", em->start, em->end, start, end);
  1313. err = -EIO;
  1314. goto out;
  1315. }
  1316. ret = add_extent_mapping(em_tree, em);
  1317. if (ret == -EEXIST) {
  1318. free_extent_map(em);
  1319. failed_insert++;
  1320. if (failed_insert > 5) {
  1321. printk("failing to insert %Lu %Lu\n", start, end);
  1322. err = -EIO;
  1323. goto out;
  1324. }
  1325. em = NULL;
  1326. goto again;
  1327. }
  1328. err = 0;
  1329. out:
  1330. btrfs_free_path(path);
  1331. if (trans) {
  1332. ret = btrfs_end_transaction(trans, root);
  1333. if (!err)
  1334. err = ret;
  1335. }
  1336. mutex_unlock(&root->fs_info->fs_mutex);
  1337. if (err) {
  1338. free_extent_map(em);
  1339. WARN_ON(1);
  1340. return ERR_PTR(err);
  1341. }
  1342. return em;
  1343. }
  1344. /*
  1345. * FIBMAP and others want to pass in a fake buffer head. They need to
  1346. * use BTRFS_GET_BLOCK_NO_DIRECT to make sure we don't try to memcpy
  1347. * any packed file data into the fake bh
  1348. */
  1349. #define BTRFS_GET_BLOCK_NO_CREATE 0
  1350. #define BTRFS_GET_BLOCK_CREATE 1
  1351. #define BTRFS_GET_BLOCK_NO_DIRECT 2
  1352. /*
  1353. * FIXME create==1 doe not work.
  1354. */
  1355. static int btrfs_get_block_lock(struct inode *inode, sector_t iblock,
  1356. struct buffer_head *result, int create)
  1357. {
  1358. int ret;
  1359. int err = 0;
  1360. u64 blocknr;
  1361. u64 extent_start = 0;
  1362. u64 extent_end = 0;
  1363. u64 objectid = inode->i_ino;
  1364. u32 found_type;
  1365. u64 alloc_hint = 0;
  1366. struct btrfs_path *path;
  1367. struct btrfs_root *root = BTRFS_I(inode)->root;
  1368. struct btrfs_file_extent_item *item;
  1369. struct btrfs_leaf *leaf;
  1370. struct btrfs_disk_key *found_key;
  1371. struct btrfs_trans_handle *trans = NULL;
  1372. path = btrfs_alloc_path();
  1373. BUG_ON(!path);
  1374. if (create & BTRFS_GET_BLOCK_CREATE) {
  1375. /*
  1376. * danger!, this only works if the page is properly up
  1377. * to date somehow
  1378. */
  1379. trans = btrfs_start_transaction(root, 1);
  1380. if (!trans) {
  1381. err = -ENOMEM;
  1382. goto out;
  1383. }
  1384. ret = btrfs_drop_extents(trans, root, inode,
  1385. iblock << inode->i_blkbits,
  1386. (iblock + 1) << inode->i_blkbits,
  1387. &alloc_hint);
  1388. BUG_ON(ret);
  1389. }
  1390. ret = btrfs_lookup_file_extent(NULL, root, path,
  1391. objectid,
  1392. iblock << inode->i_blkbits, 0);
  1393. if (ret < 0) {
  1394. err = ret;
  1395. goto out;
  1396. }
  1397. if (ret != 0) {
  1398. if (path->slots[0] == 0) {
  1399. btrfs_release_path(root, path);
  1400. goto not_found;
  1401. }
  1402. path->slots[0]--;
  1403. }
  1404. item = btrfs_item_ptr(btrfs_buffer_leaf(path->nodes[0]), path->slots[0],
  1405. struct btrfs_file_extent_item);
  1406. leaf = btrfs_buffer_leaf(path->nodes[0]);
  1407. blocknr = btrfs_file_extent_disk_blocknr(item);
  1408. blocknr += btrfs_file_extent_offset(item);
  1409. /* are we inside the extent that was found? */
  1410. found_key = &leaf->items[path->slots[0]].key;
  1411. found_type = btrfs_disk_key_type(found_key);
  1412. if (btrfs_disk_key_objectid(found_key) != objectid ||
  1413. found_type != BTRFS_EXTENT_DATA_KEY) {
  1414. extent_end = 0;
  1415. extent_start = 0;
  1416. goto not_found;
  1417. }
  1418. found_type = btrfs_file_extent_type(item);
  1419. extent_start = btrfs_disk_key_offset(&leaf->items[path->slots[0]].key);
  1420. if (found_type == BTRFS_FILE_EXTENT_REG) {
  1421. extent_start = extent_start >> inode->i_blkbits;
  1422. extent_end = extent_start + btrfs_file_extent_num_blocks(item);
  1423. err = 0;
  1424. if (btrfs_file_extent_disk_blocknr(item) == 0)
  1425. goto out;
  1426. if (iblock >= extent_start && iblock < extent_end) {
  1427. btrfs_map_bh_to_logical(root, result, blocknr +
  1428. iblock - extent_start);
  1429. goto out;
  1430. }
  1431. } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
  1432. char *ptr;
  1433. char *map;
  1434. u32 size;
  1435. if (create & BTRFS_GET_BLOCK_NO_DIRECT) {
  1436. err = -EINVAL;
  1437. goto out;
  1438. }
  1439. size = btrfs_file_extent_inline_len(leaf->items +
  1440. path->slots[0]);
  1441. extent_end = (extent_start + size) >> inode->i_blkbits;
  1442. extent_start >>= inode->i_blkbits;
  1443. if (iblock < extent_start || iblock > extent_end) {
  1444. goto not_found;
  1445. }
  1446. ptr = btrfs_file_extent_inline_start(item);
  1447. map = kmap(result->b_page);
  1448. memcpy(map, ptr, size);
  1449. memset(map + size, 0, PAGE_CACHE_SIZE - size);
  1450. flush_dcache_page(result->b_page);
  1451. kunmap(result->b_page);
  1452. set_buffer_uptodate(result);
  1453. SetPageChecked(result->b_page);
  1454. btrfs_map_bh_to_logical(root, result, 0);
  1455. }
  1456. not_found:
  1457. if (create & BTRFS_GET_BLOCK_CREATE) {
  1458. struct btrfs_key ins;
  1459. ret = btrfs_alloc_extent(trans, root, inode->i_ino,
  1460. 1, 0, alloc_hint, (u64)-1,
  1461. &ins, 1);
  1462. if (ret) {
  1463. err = ret;
  1464. goto out;
  1465. }
  1466. ret = btrfs_insert_file_extent(trans, root, inode->i_ino,
  1467. iblock << inode->i_blkbits,
  1468. ins.objectid, ins.offset,
  1469. ins.offset);
  1470. if (ret) {
  1471. err = ret;
  1472. goto out;
  1473. }
  1474. btrfs_map_bh_to_logical(root, result, ins.objectid);
  1475. }
  1476. out:
  1477. if (trans) {
  1478. ret = btrfs_end_transaction(trans, root);
  1479. if (!err)
  1480. err = ret;
  1481. }
  1482. btrfs_free_path(path);
  1483. return err;
  1484. }
  1485. int btrfs_get_block(struct inode *inode, sector_t iblock,
  1486. struct buffer_head *result, int create)
  1487. {
  1488. int err;
  1489. struct btrfs_root *root = BTRFS_I(inode)->root;
  1490. mutex_lock(&root->fs_info->fs_mutex);
  1491. err = btrfs_get_block_lock(inode, iblock, result, create);
  1492. mutex_unlock(&root->fs_info->fs_mutex);
  1493. return err;
  1494. }
  1495. static int btrfs_get_block_bmap(struct inode *inode, sector_t iblock,
  1496. struct buffer_head *result, int create)
  1497. {
  1498. struct btrfs_root *root = BTRFS_I(inode)->root;
  1499. u64 start = iblock << inode->i_blkbits;
  1500. u64 end = start + root->blocksize -1;
  1501. struct extent_map *em;
  1502. em = btrfs_get_extent(inode, NULL, 0, start, end, 0);
  1503. if (em && !IS_ERR(em) && em->block_start != EXTENT_MAP_INLINE &&
  1504. em->block_start != 0) {
  1505. u64 offset;
  1506. offset = start - em->start;
  1507. start = (em->block_start + offset) >> inode->i_blkbits;
  1508. btrfs_map_bh_to_logical(root, result, start);
  1509. }
  1510. return 0;
  1511. }
  1512. static sector_t btrfs_bmap(struct address_space *as, sector_t block)
  1513. {
  1514. return generic_block_bmap(as, block, btrfs_get_block_bmap);
  1515. }
  1516. static int btrfs_prepare_write(struct file *file, struct page *page,
  1517. unsigned from, unsigned to)
  1518. {
  1519. return extent_prepare_write(&BTRFS_I(page->mapping->host)->extent_tree,
  1520. page->mapping->host, page, from, to,
  1521. btrfs_get_extent);
  1522. }
  1523. int btrfs_readpage(struct file *file, struct page *page)
  1524. {
  1525. struct extent_map_tree *tree;
  1526. tree = &BTRFS_I(page->mapping->host)->extent_tree;
  1527. return extent_read_full_page(tree, page, btrfs_get_extent);
  1528. }
  1529. static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
  1530. {
  1531. struct extent_map_tree *tree;
  1532. if (current->flags & PF_MEMALLOC) {
  1533. redirty_page_for_writepage(wbc, page);
  1534. unlock_page(page);
  1535. return 0;
  1536. }
  1537. tree = &BTRFS_I(page->mapping->host)->extent_tree;
  1538. return extent_write_full_page(tree, page, btrfs_get_extent, wbc);
  1539. }
  1540. static int btrfs_releasepage(struct page *page, gfp_t unused_gfp_flags)
  1541. {
  1542. struct extent_map_tree *tree;
  1543. int ret;
  1544. if (page->private != 1) {
  1545. WARN_ON(1);
  1546. return try_to_free_buffers(page);
  1547. }
  1548. tree = &BTRFS_I(page->mapping->host)->extent_tree;
  1549. ret = try_release_extent_mapping(tree, page);
  1550. if (ret == 1) {
  1551. ClearPagePrivate(page);
  1552. set_page_private(page, 0);
  1553. page_cache_release(page);
  1554. }
  1555. return ret;
  1556. }
  1557. static void btrfs_invalidatepage(struct page *page, unsigned long offset)
  1558. {
  1559. struct extent_map_tree *tree;
  1560. tree = &BTRFS_I(page->mapping->host)->extent_tree;
  1561. extent_invalidatepage(tree, page, offset);
  1562. btrfs_releasepage(page, GFP_NOFS);
  1563. }
  1564. /*
  1565. * btrfs_page_mkwrite() is not allowed to change the file size as it gets
  1566. * called from a page fault handler when a page is first dirtied. Hence we must
  1567. * be careful to check for EOF conditions here. We set the page up correctly
  1568. * for a written page which means we get ENOSPC checking when writing into
  1569. * holes and correct delalloc and unwritten extent mapping on filesystems that
  1570. * support these features.
  1571. *
  1572. * We are not allowed to take the i_mutex here so we have to play games to
  1573. * protect against truncate races as the page could now be beyond EOF. Because
  1574. * vmtruncate() writes the inode size before removing pages, once we have the
  1575. * page lock we can determine safely if the page is beyond EOF. If it is not
  1576. * beyond EOF, then the page is guaranteed safe against truncation until we
  1577. * unlock the page.
  1578. */
  1579. int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page)
  1580. {
  1581. struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
  1582. unsigned long end;
  1583. loff_t size;
  1584. int ret = -EINVAL;
  1585. u64 page_start;
  1586. lock_page(page);
  1587. wait_on_page_writeback(page);
  1588. size = i_size_read(inode);
  1589. page_start = page->index << PAGE_CACHE_SHIFT;
  1590. if ((page->mapping != inode->i_mapping) ||
  1591. (page_start > size)) {
  1592. /* page got truncated out from underneath us */
  1593. goto out_unlock;
  1594. }
  1595. /* page is wholly or partially inside EOF */
  1596. if (page_start + PAGE_CACHE_SIZE > size)
  1597. end = size & ~PAGE_CACHE_MASK;
  1598. else
  1599. end = PAGE_CACHE_SIZE;
  1600. ret = btrfs_cow_one_page(inode, page, end);
  1601. out_unlock:
  1602. unlock_page(page);
  1603. return ret;
  1604. }
  1605. static void btrfs_truncate(struct inode *inode)
  1606. {
  1607. struct btrfs_root *root = BTRFS_I(inode)->root;
  1608. int ret;
  1609. struct btrfs_trans_handle *trans;
  1610. if (!S_ISREG(inode->i_mode))
  1611. return;
  1612. if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
  1613. return;
  1614. btrfs_truncate_page(inode->i_mapping, inode->i_size);
  1615. mutex_lock(&root->fs_info->fs_mutex);
  1616. trans = btrfs_start_transaction(root, 1);
  1617. btrfs_set_trans_block_group(trans, inode);
  1618. /* FIXME, add redo link to tree so we don't leak on crash */
  1619. ret = btrfs_truncate_in_trans(trans, root, inode);
  1620. btrfs_update_inode(trans, root, inode);
  1621. ret = btrfs_end_transaction(trans, root);
  1622. BUG_ON(ret);
  1623. mutex_unlock(&root->fs_info->fs_mutex);
  1624. btrfs_btree_balance_dirty(root);
  1625. }
  1626. int btrfs_commit_write(struct file *file, struct page *page,
  1627. unsigned from, unsigned to)
  1628. {
  1629. return extent_commit_write(&BTRFS_I(page->mapping->host)->extent_tree,
  1630. page->mapping->host, page, from, to);
  1631. }
  1632. static int create_subvol(struct btrfs_root *root, char *name, int namelen)
  1633. {
  1634. struct btrfs_trans_handle *trans;
  1635. struct btrfs_key key;
  1636. struct btrfs_root_item root_item;
  1637. struct btrfs_inode_item *inode_item;
  1638. struct buffer_head *subvol;
  1639. struct btrfs_leaf *leaf;
  1640. struct btrfs_root *new_root;
  1641. struct inode *inode;
  1642. struct inode *dir;
  1643. int ret;
  1644. int err;
  1645. u64 objectid;
  1646. u64 new_dirid = BTRFS_FIRST_FREE_OBJECTID;
  1647. mutex_lock(&root->fs_info->fs_mutex);
  1648. trans = btrfs_start_transaction(root, 1);
  1649. BUG_ON(!trans);
  1650. subvol = btrfs_alloc_free_block(trans, root, 0, 0);
  1651. if (IS_ERR(subvol))
  1652. return PTR_ERR(subvol);
  1653. leaf = btrfs_buffer_leaf(subvol);
  1654. btrfs_set_header_nritems(&leaf->header, 0);
  1655. btrfs_set_header_level(&leaf->header, 0);
  1656. btrfs_set_header_blocknr(&leaf->header, bh_blocknr(subvol));
  1657. btrfs_set_header_generation(&leaf->header, trans->transid);
  1658. btrfs_set_header_owner(&leaf->header, root->root_key.objectid);
  1659. memcpy(leaf->header.fsid, root->fs_info->disk_super->fsid,
  1660. sizeof(leaf->header.fsid));
  1661. btrfs_mark_buffer_dirty(subvol);
  1662. inode_item = &root_item.inode;
  1663. memset(inode_item, 0, sizeof(*inode_item));
  1664. btrfs_set_inode_generation(inode_item, 1);
  1665. btrfs_set_inode_size(inode_item, 3);
  1666. btrfs_set_inode_nlink(inode_item, 1);
  1667. btrfs_set_inode_nblocks(inode_item, 1);
  1668. btrfs_set_inode_mode(inode_item, S_IFDIR | 0755);
  1669. btrfs_set_root_blocknr(&root_item, bh_blocknr(subvol));
  1670. btrfs_set_root_refs(&root_item, 1);
  1671. btrfs_set_root_blocks_used(&root_item, 0);
  1672. memset(&root_item.drop_progress, 0, sizeof(root_item.drop_progress));
  1673. root_item.drop_level = 0;
  1674. brelse(subvol);
  1675. subvol = NULL;
  1676. ret = btrfs_find_free_objectid(trans, root->fs_info->tree_root,
  1677. 0, &objectid);
  1678. if (ret)
  1679. goto fail;
  1680. btrfs_set_root_dirid(&root_item, new_dirid);
  1681. key.objectid = objectid;
  1682. key.offset = 1;
  1683. key.flags = 0;
  1684. btrfs_set_key_type(&key, BTRFS_ROOT_ITEM_KEY);
  1685. ret = btrfs_insert_root(trans, root->fs_info->tree_root, &key,
  1686. &root_item);
  1687. if (ret)
  1688. goto fail;
  1689. /*
  1690. * insert the directory item
  1691. */
  1692. key.offset = (u64)-1;
  1693. dir = root->fs_info->sb->s_root->d_inode;
  1694. ret = btrfs_insert_dir_item(trans, root->fs_info->tree_root,
  1695. name, namelen, dir->i_ino, &key,
  1696. BTRFS_FT_DIR);
  1697. if (ret)
  1698. goto fail;
  1699. ret = btrfs_commit_transaction(trans, root);
  1700. if (ret)
  1701. goto fail_commit;
  1702. new_root = btrfs_read_fs_root(root->fs_info, &key, name, namelen);
  1703. BUG_ON(!new_root);
  1704. trans = btrfs_start_transaction(new_root, 1);
  1705. BUG_ON(!trans);
  1706. inode = btrfs_new_inode(trans, new_root, new_dirid,
  1707. BTRFS_I(dir)->block_group, S_IFDIR | 0700);
  1708. if (IS_ERR(inode))
  1709. goto fail;
  1710. inode->i_op = &btrfs_dir_inode_operations;
  1711. inode->i_fop = &btrfs_dir_file_operations;
  1712. new_root->inode = inode;
  1713. ret = btrfs_make_empty_dir(trans, new_root, new_dirid, new_dirid);
  1714. if (ret)
  1715. goto fail;
  1716. inode->i_nlink = 1;
  1717. inode->i_size = 6;
  1718. ret = btrfs_update_inode(trans, new_root, inode);
  1719. if (ret)
  1720. goto fail;
  1721. fail:
  1722. err = btrfs_commit_transaction(trans, root);
  1723. if (err && !ret)
  1724. ret = err;
  1725. fail_commit:
  1726. mutex_unlock(&root->fs_info->fs_mutex);
  1727. btrfs_btree_balance_dirty(root);
  1728. return ret;
  1729. }
  1730. static int create_snapshot(struct btrfs_root *root, char *name, int namelen)
  1731. {
  1732. struct btrfs_trans_handle *trans;
  1733. struct btrfs_key key;
  1734. struct btrfs_root_item new_root_item;
  1735. struct buffer_head *tmp;
  1736. int ret;
  1737. int err;
  1738. u64 objectid;
  1739. if (!root->ref_cows)
  1740. return -EINVAL;
  1741. mutex_lock(&root->fs_info->fs_mutex);
  1742. trans = btrfs_start_transaction(root, 1);
  1743. BUG_ON(!trans);
  1744. ret = btrfs_update_inode(trans, root, root->inode);
  1745. if (ret)
  1746. goto fail;
  1747. ret = btrfs_find_free_objectid(trans, root->fs_info->tree_root,
  1748. 0, &objectid);
  1749. if (ret)
  1750. goto fail;
  1751. memcpy(&new_root_item, &root->root_item,
  1752. sizeof(new_root_item));
  1753. key.objectid = objectid;
  1754. key.offset = 1;
  1755. key.flags = 0;
  1756. btrfs_set_key_type(&key, BTRFS_ROOT_ITEM_KEY);
  1757. btrfs_cow_block(trans, root, root->node, NULL, 0, &tmp);
  1758. btrfs_set_root_blocknr(&new_root_item, bh_blocknr(root->node));
  1759. ret = btrfs_insert_root(trans, root->fs_info->tree_root, &key,
  1760. &new_root_item);
  1761. if (ret)
  1762. goto fail;
  1763. /*
  1764. * insert the directory item
  1765. */
  1766. key.offset = (u64)-1;
  1767. ret = btrfs_insert_dir_item(trans, root->fs_info->tree_root,
  1768. name, namelen,
  1769. root->fs_info->sb->s_root->d_inode->i_ino,
  1770. &key, BTRFS_FT_DIR);
  1771. if (ret)
  1772. goto fail;
  1773. ret = btrfs_inc_root_ref(trans, root);
  1774. if (ret)
  1775. goto fail;
  1776. fail:
  1777. err = btrfs_commit_transaction(trans, root);
  1778. if (err && !ret)
  1779. ret = err;
  1780. mutex_unlock(&root->fs_info->fs_mutex);
  1781. btrfs_btree_balance_dirty(root);
  1782. return ret;
  1783. }
  1784. int btrfs_ioctl(struct inode *inode, struct file *filp, unsigned int
  1785. cmd, unsigned long arg)
  1786. {
  1787. struct btrfs_root *root = BTRFS_I(inode)->root;
  1788. struct btrfs_ioctl_vol_args vol_args;
  1789. int ret = 0;
  1790. struct btrfs_dir_item *di;
  1791. int namelen;
  1792. struct btrfs_path *path;
  1793. u64 root_dirid;
  1794. switch (cmd) {
  1795. case BTRFS_IOC_SNAP_CREATE:
  1796. if (copy_from_user(&vol_args,
  1797. (struct btrfs_ioctl_vol_args __user *)arg,
  1798. sizeof(vol_args)))
  1799. return -EFAULT;
  1800. namelen = strlen(vol_args.name);
  1801. if (namelen > BTRFS_VOL_NAME_MAX)
  1802. return -EINVAL;
  1803. if (strchr(vol_args.name, '/'))
  1804. return -EINVAL;
  1805. path = btrfs_alloc_path();
  1806. if (!path)
  1807. return -ENOMEM;
  1808. root_dirid = root->fs_info->sb->s_root->d_inode->i_ino,
  1809. mutex_lock(&root->fs_info->fs_mutex);
  1810. di = btrfs_lookup_dir_item(NULL, root->fs_info->tree_root,
  1811. path, root_dirid,
  1812. vol_args.name, namelen, 0);
  1813. mutex_unlock(&root->fs_info->fs_mutex);
  1814. btrfs_free_path(path);
  1815. if (di && !IS_ERR(di))
  1816. return -EEXIST;
  1817. if (IS_ERR(di))
  1818. return PTR_ERR(di);
  1819. if (root == root->fs_info->tree_root)
  1820. ret = create_subvol(root, vol_args.name, namelen);
  1821. else
  1822. ret = create_snapshot(root, vol_args.name, namelen);
  1823. break;
  1824. case BTRFS_IOC_DEFRAG:
  1825. mutex_lock(&root->fs_info->fs_mutex);
  1826. btrfs_defrag_root(root, 0);
  1827. btrfs_defrag_root(root->fs_info->extent_root, 0);
  1828. mutex_unlock(&root->fs_info->fs_mutex);
  1829. ret = 0;
  1830. break;
  1831. default:
  1832. return -ENOTTY;
  1833. }
  1834. return ret;
  1835. }
  1836. #ifdef CONFIG_COMPAT
  1837. long btrfs_compat_ioctl(struct file *file, unsigned int cmd,
  1838. unsigned long arg)
  1839. {
  1840. struct inode *inode = file->f_path.dentry->d_inode;
  1841. int ret;
  1842. lock_kernel();
  1843. ret = btrfs_ioctl(inode, file, cmd, (unsigned long) compat_ptr(arg));
  1844. unlock_kernel();
  1845. return ret;
  1846. }
  1847. #endif
  1848. /*
  1849. * Called inside transaction, so use GFP_NOFS
  1850. */
  1851. struct inode *btrfs_alloc_inode(struct super_block *sb)
  1852. {
  1853. struct btrfs_inode *ei;
  1854. ei = kmem_cache_alloc(btrfs_inode_cachep, GFP_NOFS);
  1855. if (!ei)
  1856. return NULL;
  1857. ei->last_trans = 0;
  1858. return &ei->vfs_inode;
  1859. }
  1860. void btrfs_destroy_inode(struct inode *inode)
  1861. {
  1862. WARN_ON(!list_empty(&inode->i_dentry));
  1863. WARN_ON(inode->i_data.nrpages);
  1864. kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode));
  1865. }
  1866. static void init_once(void * foo, struct kmem_cache * cachep,
  1867. unsigned long flags)
  1868. {
  1869. struct btrfs_inode *ei = (struct btrfs_inode *) foo;
  1870. inode_init_once(&ei->vfs_inode);
  1871. }
  1872. void btrfs_destroy_cachep(void)
  1873. {
  1874. if (btrfs_inode_cachep)
  1875. kmem_cache_destroy(btrfs_inode_cachep);
  1876. if (btrfs_trans_handle_cachep)
  1877. kmem_cache_destroy(btrfs_trans_handle_cachep);
  1878. if (btrfs_transaction_cachep)
  1879. kmem_cache_destroy(btrfs_transaction_cachep);
  1880. if (btrfs_bit_radix_cachep)
  1881. kmem_cache_destroy(btrfs_bit_radix_cachep);
  1882. if (btrfs_path_cachep)
  1883. kmem_cache_destroy(btrfs_path_cachep);
  1884. }
  1885. static struct kmem_cache *cache_create(const char *name, size_t size,
  1886. unsigned long extra_flags,
  1887. void (*ctor)(void *, struct kmem_cache *,
  1888. unsigned long))
  1889. {
  1890. return kmem_cache_create(name, size, 0, (SLAB_RECLAIM_ACCOUNT |
  1891. SLAB_MEM_SPREAD | extra_flags), ctor
  1892. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
  1893. ,NULL
  1894. #endif
  1895. );
  1896. }
  1897. int btrfs_init_cachep(void)
  1898. {
  1899. btrfs_inode_cachep = cache_create("btrfs_inode_cache",
  1900. sizeof(struct btrfs_inode),
  1901. 0, init_once);
  1902. if (!btrfs_inode_cachep)
  1903. goto fail;
  1904. btrfs_trans_handle_cachep = cache_create("btrfs_trans_handle_cache",
  1905. sizeof(struct btrfs_trans_handle),
  1906. 0, NULL);
  1907. if (!btrfs_trans_handle_cachep)
  1908. goto fail;
  1909. btrfs_transaction_cachep = cache_create("btrfs_transaction_cache",
  1910. sizeof(struct btrfs_transaction),
  1911. 0, NULL);
  1912. if (!btrfs_transaction_cachep)
  1913. goto fail;
  1914. btrfs_path_cachep = cache_create("btrfs_path_cache",
  1915. sizeof(struct btrfs_transaction),
  1916. 0, NULL);
  1917. if (!btrfs_path_cachep)
  1918. goto fail;
  1919. btrfs_bit_radix_cachep = cache_create("btrfs_radix", 256,
  1920. SLAB_DESTROY_BY_RCU, NULL);
  1921. if (!btrfs_bit_radix_cachep)
  1922. goto fail;
  1923. return 0;
  1924. fail:
  1925. btrfs_destroy_cachep();
  1926. return -ENOMEM;
  1927. }
  1928. static int btrfs_getattr(struct vfsmount *mnt,
  1929. struct dentry *dentry, struct kstat *stat)
  1930. {
  1931. struct inode *inode = dentry->d_inode;
  1932. generic_fillattr(inode, stat);
  1933. stat->blksize = 256 * 1024;
  1934. return 0;
  1935. }
  1936. static int btrfs_rename(struct inode * old_dir, struct dentry *old_dentry,
  1937. struct inode * new_dir,struct dentry *new_dentry)
  1938. {
  1939. struct btrfs_trans_handle *trans;
  1940. struct btrfs_root *root = BTRFS_I(old_dir)->root;
  1941. struct inode *new_inode = new_dentry->d_inode;
  1942. struct inode *old_inode = old_dentry->d_inode;
  1943. struct timespec ctime = CURRENT_TIME;
  1944. struct btrfs_path *path;
  1945. struct btrfs_dir_item *di;
  1946. int ret;
  1947. if (S_ISDIR(old_inode->i_mode) && new_inode &&
  1948. new_inode->i_size > BTRFS_EMPTY_DIR_SIZE) {
  1949. return -ENOTEMPTY;
  1950. }
  1951. mutex_lock(&root->fs_info->fs_mutex);
  1952. trans = btrfs_start_transaction(root, 1);
  1953. btrfs_set_trans_block_group(trans, new_dir);
  1954. path = btrfs_alloc_path();
  1955. if (!path) {
  1956. ret = -ENOMEM;
  1957. goto out_fail;
  1958. }
  1959. old_dentry->d_inode->i_nlink++;
  1960. old_dir->i_ctime = old_dir->i_mtime = ctime;
  1961. new_dir->i_ctime = new_dir->i_mtime = ctime;
  1962. old_inode->i_ctime = ctime;
  1963. if (S_ISDIR(old_inode->i_mode) && old_dir != new_dir) {
  1964. struct btrfs_key *location = &BTRFS_I(new_dir)->location;
  1965. u64 old_parent_oid;
  1966. di = btrfs_lookup_dir_item(trans, root, path, old_inode->i_ino,
  1967. "..", 2, -1);
  1968. if (IS_ERR(di)) {
  1969. ret = PTR_ERR(di);
  1970. goto out_fail;
  1971. }
  1972. if (!di) {
  1973. ret = -ENOENT;
  1974. goto out_fail;
  1975. }
  1976. old_parent_oid = btrfs_disk_key_objectid(&di->location);
  1977. ret = btrfs_del_item(trans, root, path);
  1978. if (ret) {
  1979. goto out_fail;
  1980. }
  1981. btrfs_release_path(root, path);
  1982. di = btrfs_lookup_dir_index_item(trans, root, path,
  1983. old_inode->i_ino,
  1984. old_parent_oid,
  1985. "..", 2, -1);
  1986. if (IS_ERR(di)) {
  1987. ret = PTR_ERR(di);
  1988. goto out_fail;
  1989. }
  1990. if (!di) {
  1991. ret = -ENOENT;
  1992. goto out_fail;
  1993. }
  1994. ret = btrfs_del_item(trans, root, path);
  1995. if (ret) {
  1996. goto out_fail;
  1997. }
  1998. btrfs_release_path(root, path);
  1999. ret = btrfs_insert_dir_item(trans, root, "..", 2,
  2000. old_inode->i_ino, location,
  2001. BTRFS_FT_DIR);
  2002. if (ret)
  2003. goto out_fail;
  2004. }
  2005. ret = btrfs_unlink_trans(trans, root, old_dir, old_dentry);
  2006. if (ret)
  2007. goto out_fail;
  2008. if (new_inode) {
  2009. new_inode->i_ctime = CURRENT_TIME;
  2010. ret = btrfs_unlink_trans(trans, root, new_dir, new_dentry);
  2011. if (ret)
  2012. goto out_fail;
  2013. if (S_ISDIR(new_inode->i_mode))
  2014. clear_nlink(new_inode);
  2015. else
  2016. drop_nlink(new_inode);
  2017. ret = btrfs_update_inode(trans, root, new_inode);
  2018. if (ret)
  2019. goto out_fail;
  2020. }
  2021. ret = btrfs_add_link(trans, new_dentry, old_inode);
  2022. if (ret)
  2023. goto out_fail;
  2024. out_fail:
  2025. btrfs_free_path(path);
  2026. btrfs_end_transaction(trans, root);
  2027. mutex_unlock(&root->fs_info->fs_mutex);
  2028. return ret;
  2029. }
  2030. static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
  2031. const char *symname)
  2032. {
  2033. struct btrfs_trans_handle *trans;
  2034. struct btrfs_root *root = BTRFS_I(dir)->root;
  2035. struct btrfs_path *path;
  2036. struct btrfs_key key;
  2037. struct inode *inode;
  2038. int err;
  2039. int drop_inode = 0;
  2040. u64 objectid;
  2041. int name_len;
  2042. int datasize;
  2043. char *ptr;
  2044. struct btrfs_file_extent_item *ei;
  2045. name_len = strlen(symname) + 1;
  2046. if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root))
  2047. return -ENAMETOOLONG;
  2048. mutex_lock(&root->fs_info->fs_mutex);
  2049. trans = btrfs_start_transaction(root, 1);
  2050. btrfs_set_trans_block_group(trans, dir);
  2051. err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
  2052. if (err) {
  2053. err = -ENOSPC;
  2054. goto out_unlock;
  2055. }
  2056. inode = btrfs_new_inode(trans, root, objectid,
  2057. BTRFS_I(dir)->block_group, S_IFLNK|S_IRWXUGO);
  2058. err = PTR_ERR(inode);
  2059. if (IS_ERR(inode))
  2060. goto out_unlock;
  2061. btrfs_set_trans_block_group(trans, inode);
  2062. err = btrfs_add_nondir(trans, dentry, inode);
  2063. if (err)
  2064. drop_inode = 1;
  2065. else {
  2066. inode->i_mapping->a_ops = &btrfs_aops;
  2067. inode->i_fop = &btrfs_file_operations;
  2068. inode->i_op = &btrfs_file_inode_operations;
  2069. extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
  2070. inode->i_mapping, GFP_NOFS);
  2071. BTRFS_I(inode)->extent_tree.fill_delalloc = run_delalloc_range;
  2072. }
  2073. dir->i_sb->s_dirt = 1;
  2074. btrfs_update_inode_block_group(trans, inode);
  2075. btrfs_update_inode_block_group(trans, dir);
  2076. if (drop_inode)
  2077. goto out_unlock;
  2078. path = btrfs_alloc_path();
  2079. BUG_ON(!path);
  2080. key.objectid = inode->i_ino;
  2081. key.offset = 0;
  2082. key.flags = 0;
  2083. btrfs_set_key_type(&key, BTRFS_EXTENT_DATA_KEY);
  2084. datasize = btrfs_file_extent_calc_inline_size(name_len);
  2085. err = btrfs_insert_empty_item(trans, root, path, &key,
  2086. datasize);
  2087. if (err) {
  2088. drop_inode = 1;
  2089. goto out_unlock;
  2090. }
  2091. ei = btrfs_item_ptr(btrfs_buffer_leaf(path->nodes[0]),
  2092. path->slots[0], struct btrfs_file_extent_item);
  2093. btrfs_set_file_extent_generation(ei, trans->transid);
  2094. btrfs_set_file_extent_type(ei,
  2095. BTRFS_FILE_EXTENT_INLINE);
  2096. ptr = btrfs_file_extent_inline_start(ei);
  2097. btrfs_memcpy(root, path->nodes[0]->b_data,
  2098. ptr, symname, name_len);
  2099. btrfs_mark_buffer_dirty(path->nodes[0]);
  2100. btrfs_free_path(path);
  2101. inode->i_op = &btrfs_symlink_inode_operations;
  2102. inode->i_mapping->a_ops = &btrfs_symlink_aops;
  2103. inode->i_size = name_len - 1;
  2104. err = btrfs_update_inode(trans, root, inode);
  2105. if (err)
  2106. drop_inode = 1;
  2107. out_unlock:
  2108. btrfs_end_transaction(trans, root);
  2109. mutex_unlock(&root->fs_info->fs_mutex);
  2110. if (drop_inode) {
  2111. inode_dec_link_count(inode);
  2112. iput(inode);
  2113. }
  2114. btrfs_btree_balance_dirty(root);
  2115. return err;
  2116. }
  2117. static struct inode_operations btrfs_dir_inode_operations = {
  2118. .lookup = btrfs_lookup,
  2119. .create = btrfs_create,
  2120. .unlink = btrfs_unlink,
  2121. .link = btrfs_link,
  2122. .mkdir = btrfs_mkdir,
  2123. .rmdir = btrfs_rmdir,
  2124. .rename = btrfs_rename,
  2125. .symlink = btrfs_symlink,
  2126. .setattr = btrfs_setattr,
  2127. .mknod = btrfs_mknod,
  2128. };
  2129. static struct inode_operations btrfs_dir_ro_inode_operations = {
  2130. .lookup = btrfs_lookup,
  2131. };
  2132. static struct file_operations btrfs_dir_file_operations = {
  2133. .llseek = generic_file_llseek,
  2134. .read = generic_read_dir,
  2135. .readdir = btrfs_readdir,
  2136. .ioctl = btrfs_ioctl,
  2137. #ifdef CONFIG_COMPAT
  2138. .compat_ioctl = btrfs_compat_ioctl,
  2139. #endif
  2140. };
  2141. static struct address_space_operations btrfs_aops = {
  2142. .readpage = btrfs_readpage,
  2143. .writepage = btrfs_writepage,
  2144. .sync_page = block_sync_page,
  2145. .prepare_write = btrfs_prepare_write,
  2146. .commit_write = btrfs_commit_write,
  2147. .bmap = btrfs_bmap,
  2148. .invalidatepage = btrfs_invalidatepage,
  2149. .releasepage = btrfs_releasepage,
  2150. .set_page_dirty = __set_page_dirty_nobuffers,
  2151. };
  2152. static struct address_space_operations btrfs_symlink_aops = {
  2153. .readpage = btrfs_readpage,
  2154. .writepage = btrfs_writepage,
  2155. };
  2156. static struct inode_operations btrfs_file_inode_operations = {
  2157. .truncate = btrfs_truncate,
  2158. .getattr = btrfs_getattr,
  2159. .setattr = btrfs_setattr,
  2160. };
  2161. static struct inode_operations btrfs_special_inode_operations = {
  2162. .getattr = btrfs_getattr,
  2163. .setattr = btrfs_setattr,
  2164. };
  2165. static struct inode_operations btrfs_symlink_inode_operations = {
  2166. .readlink = generic_readlink,
  2167. .follow_link = page_follow_link_light,
  2168. .put_link = page_put_link,
  2169. };