diff for duplicates of <20120510203523.GD2061@localhost.localdomain> diff --git a/a/1.txt b/N1/1.txt index 3f8b5be..8925d94 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -2,80 +2,97 @@ On Fri, Apr 27, 2012 at 01:02:08PM +0200, Christian Brunner wrote: > Am 24. April 2012 18:26 schrieb Sage Weil <sage@newdream.net>: > > On Tue, 24 Apr 2012, Josef Bacik wrote: > >> On Fri, Apr 20, 2012 at 05:09:34PM +0200, Christian Brunner wrote: -> >> > After running ceph on XFS for some time, I decided to try btrfs again. -> >> > Performance with the current "for-linux-min" branch and big metadata -> >> > is much better. The only problem (?) I'm still seeing is a warning +> >> > After running ceph on XFS for some time, I decided to try btrfs = +again. +> >> > Performance with the current "for-linux-min" branch and big meta= +data +> >> > is much better. The only problem (?) I'm still seeing is a warni= +ng > >> > that seems to occur from time to time: > > > > Actually, before you do that... we have a new tool, -> > test_filestore_workloadgen, that generates a ceph-osd-like workload on the -> > local file system. It's a subset of what a full OSD might do, but if -> > we're lucky it will be sufficient to reproduce this issue. Something like +> > test_filestore_workloadgen, that generates a ceph-osd-like workload= + on the +> > local file system. =A0It's a subset of what a full OSD might do, bu= +t if +> > we're lucky it will be sufficient to reproduce this issue. =A0Somet= +hing like > > -> > test_filestore_workloadgen --osd-data /foo --osd-journal /bar +> > =A0test_filestore_workloadgen --osd-data /foo --osd-journal /bar > > > > will hopefully do the trick. > > -> > Christian, maybe you can see if that is able to trigger this warning? -> > You'll need to pull it from the current master branch; it wasn't in the +> > Christian, maybe you can see if that is able to trigger this warnin= +g? +> > You'll need to pull it from the current master branch; it wasn't in= + the > > last release. -> +>=20 > Trying to reproduce with test_filestore_workloadgen didn't work for > me. So here are some instructions on how to reproduce with a minimal > ceph setup. -> +>=20 > You will need a single system with two disks and a bit of memory. -> +>=20 > - Compile and install ceph (detailed instructions: > http://ceph.newdream.net/docs/master/ops/install/mkcephfs/) -> +>=20 > - For the test setup I've used two tmpfs files as journal devices. To > create these, do the following: -> +>=20 > # mkdir -p /ceph/temp > # mount -t tmpfs tmpfs /ceph/temp -> # dd if=/dev/zero of=/ceph/temp/journal0 count=500 bs=1024k -> # dd if=/dev/zero of=/ceph/temp/journal1 count=500 bs=1024k -> +> # dd if=3D/dev/zero of=3D/ceph/temp/journal0 count=3D500 bs=3D1024k +> # dd if=3D/dev/zero of=3D/ceph/temp/journal1 count=3D500 bs=3D1024k +>=20 > - Now you should create and mount btrfs. Here is what I did: -> +>=20 > # mkfs.btrfs -l 64k -n 64k /dev/sda > # mkfs.btrfs -l 64k -n 64k /dev/sdb > # mkdir /ceph/osd.000 > # mkdir /ceph/osd.001 -> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sda /ceph/osd.000 -> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sdb /ceph/osd.001 -> +> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sda /ceph/= +osd.000 +> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sdb /ceph/= +osd.001 +>=20 > - Create /etc/ceph/ceph.conf similar to the attached ceph.conf. You > will probably have to change the btrfs devices and the hostname > (os39). -> +>=20 > - Create the ceph filesystems: -> +>=20 > # mkdir /ceph/mon > # mkcephfs -a -c /etc/ceph/ceph.conf -> +>=20 > - Start ceph (e.g. "service ceph start") -> +>=20 > - Now you should be able to use ceph - "ceph -s" will tell you about > the state of the ceph cluster. -> -> - "rbd create -size 100 testimg" will create an rbd image on the ceph cluster. -> +>=20 +> - "rbd create -size 100 testimg" will create an rbd image on the ceph= + cluster. +>=20 > - Compile my test with "gcc -o rbdtest rbdtest.c -lrbd" and run it > with "./rbdtest testimg". -> +>=20 > I can see the first btrfs_orphan_commit_root warning after an hour or > so... I hope that I've described all necessary steps. If there is a > problem just send me a note. -> +>=20 -Well I feel like an idiot, I finally get it to reproduce, go look at where I -want to put my printks and theres the problem staring me right in the face. -I've looked seriously at this problem 2 or 3 times and have missed this every -single freaking time. Here is the patch I'm trying, please try it on yours to -make sure it fixes the problem. It takes like 2 hours for it to reproduce for -me so I won't be able to fully test it until tomorrow, but so far it hasn't +Well I feel like an idiot, I finally get it to reproduce, go look at wh= +ere I +want to put my printks and theres the problem staring me right in the f= +ace. +I've looked seriously at this problem 2 or 3 times and have missed this= + every +single freaking time. Here is the patch I'm trying, please try it on y= +ours to +make sure it fixes the problem. It takes like 2 hours for it to reprod= +uce for +me so I won't be able to fully test it until tomorrow, but so far it ha= +sn't broken anything so it should be good. Thanks, Josef @@ -88,11 +105,12 @@ index eefe573..4ad628d 100644 @@ -57,9 +57,6 @@ struct btrfs_inode { /* used to order data wrt metadata */ struct btrfs_ordered_inode_tree ordered_tree; - +=20 - /* for keeping track of orphaned inodes */ - struct list_head i_orphan; - - /* list of all the delalloc inodes in the FS. There are times we need + /* list of all the delalloc inodes in the FS. There are times we nee= +d * to write all the delalloc pages to disk, and this list is used * to walk them all. @@ -164,6 +161,7 @@ struct btrfs_inode { @@ -100,7 +118,7 @@ index eefe573..4ad628d 100644 unsigned in_defrag:1; unsigned delalloc_meta_reserved:1; + unsigned has_orphan_item:1; - +=20 /* * always compress this one file diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h @@ -109,7 +127,7 @@ index 8a89888..6dd20f3 100644 +++ b/fs/btrfs/ctree.h @@ -1375,7 +1375,7 @@ struct btrfs_root { struct list_head root_list; - +=20 spinlock_t orphan_lock; - struct list_head orphan_list; + atomic_t orphan_inodes; @@ -120,90 +138,98 @@ diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 7f849b3..8bbe8c4 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c -@@ -1148,7 +1148,6 @@ static void __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize, - root->orphan_block_rsv = NULL; - +@@ -1148,7 +1148,6 @@ static void __setup_root(u32 nodesize, u32 leafsi= +ze, u32 sectorsize, + root->orphan_block_rsv =3D NULL; +=20 INIT_LIST_HEAD(&root->dirty_list); - INIT_LIST_HEAD(&root->orphan_list); INIT_LIST_HEAD(&root->root_list); spin_lock_init(&root->orphan_lock); spin_lock_init(&root->inode_lock); -@@ -1161,6 +1160,7 @@ static void __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize, +@@ -1161,6 +1160,7 @@ static void __setup_root(u32 nodesize, u32 leafsi= +ze, u32 sectorsize, atomic_set(&root->log_commit[0], 0); atomic_set(&root->log_commit[1], 0); atomic_set(&root->log_writers, 0); + atomic_set(&root->orphan_inodes, 0); - root->log_batch = 0; - root->log_transid = 0; - root->last_log_commit = 0; + root->log_batch =3D 0; + root->log_transid =3D 0; + root->last_log_commit =3D 0; diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 0218a4e..0265d40 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c -@@ -2138,12 +2138,12 @@ void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, +@@ -2138,12 +2138,12 @@ void btrfs_orphan_commit_root(struct btrfs_tran= +s_handle *trans, struct btrfs_block_rsv *block_rsv; int ret; - +=20 - if (!list_empty(&root->orphan_list) || + if (atomic_read(&root->orphan_inodes) || - root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE) + root->orphan_cleanup_state !=3D ORPHAN_CLEANUP_DONE) return; - +=20 spin_lock(&root->orphan_lock); - if (!list_empty(&root->orphan_list)) { + if (atomic_read(&root->orphan_inodes)) { spin_unlock(&root->orphan_lock); return; } -@@ -2200,8 +2200,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) - block_rsv = NULL; +@@ -2200,8 +2200,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *t= +rans, struct inode *inode) + block_rsv =3D NULL; } - +=20 - if (list_empty(&BTRFS_I(inode)->i_orphan)) { - list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); + if (!BTRFS_I(inode)->has_orphan_item) { -+ BTRFS_I(inode)->has_orphan_item = 1; ++ BTRFS_I(inode)->has_orphan_item =3D 1; #if 0 /* * For proper ENOSPC handling, we should do orphan -@@ -2214,6 +2214,7 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) - insert = 1; +@@ -2214,6 +2214,7 @@ int btrfs_orphan_add(struct btrfs_trans_handle *t= +rans, struct inode *inode) + insert =3D 1; #endif - insert = 1; + insert =3D 1; + atomic_inc(&root->orphan_inodes); } - +=20 if (!BTRFS_I(inode)->orphan_meta_reserved) { -@@ -2261,9 +2262,8 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode) - int release_rsv = 0; - int ret = 0; - +@@ -2261,9 +2262,8 @@ int btrfs_orphan_del(struct btrfs_trans_handle *t= +rans, struct inode *inode) + int release_rsv =3D 0; + int ret =3D 0; +=20 - spin_lock(&root->orphan_lock); - if (!list_empty(&BTRFS_I(inode)->i_orphan)) { - list_del_init(&BTRFS_I(inode)->i_orphan); + if (BTRFS_I(inode)->has_orphan_item) { -+ BTRFS_I(inode)->has_orphan_item = 0; - delete_item = 1; ++ BTRFS_I(inode)->has_orphan_item =3D 0; + delete_item =3D 1; } - -@@ -2271,7 +2271,6 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode) - BTRFS_I(inode)->orphan_meta_reserved = 0; - release_rsv = 1; +=20 +@@ -2271,7 +2271,6 @@ int btrfs_orphan_del(struct btrfs_trans_handle *t= +rans, struct inode *inode) + BTRFS_I(inode)->orphan_meta_reserved =3D 0; + release_rsv =3D 1; } - spin_unlock(&root->orphan_lock); - +=20 if (trans && delete_item) { - ret = btrfs_del_orphan_item(trans, root, btrfs_ino(inode)); -@@ -2281,6 +2280,9 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode) + ret =3D btrfs_del_orphan_item(trans, root, btrfs_ino(inode)); +@@ -2281,6 +2280,9 @@ int btrfs_orphan_del(struct btrfs_trans_handle *t= +rans, struct inode *inode) if (release_rsv) btrfs_orphan_release_metadata(inode); - +=20 + if (trans && delete_item) + atomic_dec(&root->orphan_inodes); + return 0; } - +=20 @@ -2418,9 +2420,8 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) * add this inode to the orphan list so btrfs_orphan_del does * the proper thing when we hit it @@ -212,28 +238,30 @@ index 0218a4e..0265d40 100644 - list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); - spin_unlock(&root->orphan_lock); + atomic_inc(&root->orphan_inodes); -+ BTRFS_I(inode)->has_orphan_item = 1; - ++ BTRFS_I(inode)->has_orphan_item =3D 1; +=20 /* if we have links, this was a truncate, lets do that */ if (inode->i_nlink) { @@ -3741,7 +3742,7 @@ void btrfs_evict_inode(struct inode *inode) btrfs_wait_ordered_range(inode, 0, (u64)-1); - +=20 if (root->fs_info->log_root_recovering) { - BUG_ON(!list_empty(&BTRFS_I(inode)->i_orphan)); + BUG_ON(!BTRFS_I(inode)->has_orphan_item); goto no_delete; } - -@@ -6921,6 +6922,7 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) - ei->in_defrag = 0; - ei->delalloc_meta_reserved = 0; - ei->complete_ordered = 0; -+ ei->has_orphan_item = 0; - ei->force_compress = BTRFS_COMPRESS_NONE; - - ei->delayed_node = NULL; -@@ -6934,7 +6936,6 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) +=20 +@@ -6921,6 +6922,7 @@ struct inode *btrfs_alloc_inode(struct super_bloc= +k *sb) + ei->in_defrag =3D 0; + ei->delalloc_meta_reserved =3D 0; + ei->complete_ordered =3D 0; ++ ei->has_orphan_item =3D 0; + ei->force_compress =3D BTRFS_COMPRESS_NONE; +=20 + ei->delayed_node =3D NULL; +@@ -6934,7 +6936,6 @@ struct inode *btrfs_alloc_inode(struct super_bloc= +k *sb) mutex_init(&ei->log_mutex); mutex_init(&ei->delalloc_mutex); btrfs_ordered_inode_tree_init(&ei->ordered_tree); @@ -244,7 +272,7 @@ index 0218a4e..0265d40 100644 @@ -6980,13 +6981,11 @@ void btrfs_destroy_inode(struct inode *inode) spin_unlock(&root->fs_info->ordered_extent_lock); } - +=20 - spin_lock(&root->orphan_lock); - if (!list_empty(&BTRFS_I(inode)->i_orphan)) { + if (BTRFS_I(inode)->has_orphan_item) { @@ -254,10 +282,11 @@ index 0218a4e..0265d40 100644 + atomic_dec(&root->orphan_inodes); } - spin_unlock(&root->orphan_lock); - +=20 while (1) { - ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1); + ordered =3D btrfs_lookup_first_ordered_extent(inode, (u64)-1); -- -To unsubscribe from this list: send the line "unsubscribe ceph-devel" in +To unsubscribe from this list: send the line "unsubscribe ceph-devel" i= +n the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/a/content_digest b/N1/content_digest index 902cb20..67212f6 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -16,80 +16,97 @@ "> Am 24. April 2012 18:26 schrieb Sage Weil <sage@newdream.net>:\n" "> > On Tue, 24 Apr 2012, Josef Bacik wrote:\n" "> >> On Fri, Apr 20, 2012 at 05:09:34PM +0200, Christian Brunner wrote:\n" - "> >> > After running ceph on XFS for some time, I decided to try btrfs again.\n" - "> >> > Performance with the current \"for-linux-min\" branch and big metadata\n" - "> >> > is much better. The only problem (?) I'm still seeing is a warning\n" + "> >> > After running ceph on XFS for some time, I decided to try btrfs =\n" + "again.\n" + "> >> > Performance with the current \"for-linux-min\" branch and big meta=\n" + "data\n" + "> >> > is much better. The only problem (?) I'm still seeing is a warni=\n" + "ng\n" "> >> > that seems to occur from time to time:\n" "> >\n" "> > Actually, before you do that... we have a new tool,\n" - "> > test_filestore_workloadgen, that generates a ceph-osd-like workload on the\n" - "> > local file system. \302\240It's a subset of what a full OSD might do, but if\n" - "> > we're lucky it will be sufficient to reproduce this issue. \302\240Something like\n" + "> > test_filestore_workloadgen, that generates a ceph-osd-like workload=\n" + " on the\n" + "> > local file system. =A0It's a subset of what a full OSD might do, bu=\n" + "t if\n" + "> > we're lucky it will be sufficient to reproduce this issue. =A0Somet=\n" + "hing like\n" "> >\n" - "> > \302\240test_filestore_workloadgen --osd-data /foo --osd-journal /bar\n" + "> > =A0test_filestore_workloadgen --osd-data /foo --osd-journal /bar\n" "> >\n" "> > will hopefully do the trick.\n" "> >\n" - "> > Christian, maybe you can see if that is able to trigger this warning?\n" - "> > You'll need to pull it from the current master branch; it wasn't in the\n" + "> > Christian, maybe you can see if that is able to trigger this warnin=\n" + "g?\n" + "> > You'll need to pull it from the current master branch; it wasn't in=\n" + " the\n" "> > last release.\n" - "> \n" + ">=20\n" "> Trying to reproduce with test_filestore_workloadgen didn't work for\n" "> me. So here are some instructions on how to reproduce with a minimal\n" "> ceph setup.\n" - "> \n" + ">=20\n" "> You will need a single system with two disks and a bit of memory.\n" - "> \n" + ">=20\n" "> - Compile and install ceph (detailed instructions:\n" "> http://ceph.newdream.net/docs/master/ops/install/mkcephfs/)\n" - "> \n" + ">=20\n" "> - For the test setup I've used two tmpfs files as journal devices. To\n" "> create these, do the following:\n" - "> \n" + ">=20\n" "> # mkdir -p /ceph/temp\n" "> # mount -t tmpfs tmpfs /ceph/temp\n" - "> # dd if=/dev/zero of=/ceph/temp/journal0 count=500 bs=1024k\n" - "> # dd if=/dev/zero of=/ceph/temp/journal1 count=500 bs=1024k\n" - "> \n" + "> # dd if=3D/dev/zero of=3D/ceph/temp/journal0 count=3D500 bs=3D1024k\n" + "> # dd if=3D/dev/zero of=3D/ceph/temp/journal1 count=3D500 bs=3D1024k\n" + ">=20\n" "> - Now you should create and mount btrfs. Here is what I did:\n" - "> \n" + ">=20\n" "> # mkfs.btrfs -l 64k -n 64k /dev/sda\n" "> # mkfs.btrfs -l 64k -n 64k /dev/sdb\n" "> # mkdir /ceph/osd.000\n" "> # mkdir /ceph/osd.001\n" - "> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sda /ceph/osd.000\n" - "> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sdb /ceph/osd.001\n" - "> \n" + "> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sda /ceph/=\n" + "osd.000\n" + "> # mount -o noatime,space_cache,inode_cache,autodefrag /dev/sdb /ceph/=\n" + "osd.001\n" + ">=20\n" "> - Create /etc/ceph/ceph.conf similar to the attached ceph.conf. You\n" "> will probably have to change the btrfs devices and the hostname\n" "> (os39).\n" - "> \n" + ">=20\n" "> - Create the ceph filesystems:\n" - "> \n" + ">=20\n" "> # mkdir /ceph/mon\n" "> # mkcephfs -a -c /etc/ceph/ceph.conf\n" - "> \n" + ">=20\n" "> - Start ceph (e.g. \"service ceph start\")\n" - "> \n" + ">=20\n" "> - Now you should be able to use ceph - \"ceph -s\" will tell you about\n" "> the state of the ceph cluster.\n" - "> \n" - "> - \"rbd create -size 100 testimg\" will create an rbd image on the ceph cluster.\n" - "> \n" + ">=20\n" + "> - \"rbd create -size 100 testimg\" will create an rbd image on the ceph=\n" + " cluster.\n" + ">=20\n" "> - Compile my test with \"gcc -o rbdtest rbdtest.c -lrbd\" and run it\n" "> with \"./rbdtest testimg\".\n" - "> \n" + ">=20\n" "> I can see the first btrfs_orphan_commit_root warning after an hour or\n" "> so... I hope that I've described all necessary steps. If there is a\n" "> problem just send me a note.\n" - "> \n" + ">=20\n" "\n" - "Well I feel like an idiot, I finally get it to reproduce, go look at where I\n" - "want to put my printks and theres the problem staring me right in the face.\n" - "I've looked seriously at this problem 2 or 3 times and have missed this every\n" - "single freaking time. Here is the patch I'm trying, please try it on yours to\n" - "make sure it fixes the problem. It takes like 2 hours for it to reproduce for\n" - "me so I won't be able to fully test it until tomorrow, but so far it hasn't\n" + "Well I feel like an idiot, I finally get it to reproduce, go look at wh=\n" + "ere I\n" + "want to put my printks and theres the problem staring me right in the f=\n" + "ace.\n" + "I've looked seriously at this problem 2 or 3 times and have missed this=\n" + " every\n" + "single freaking time. Here is the patch I'm trying, please try it on y=\n" + "ours to\n" + "make sure it fixes the problem. It takes like 2 hours for it to reprod=\n" + "uce for\n" + "me so I won't be able to fully test it until tomorrow, but so far it ha=\n" + "sn't\n" "broken anything so it should be good. Thanks,\n" "\n" "Josef\n" @@ -102,11 +119,12 @@ "@@ -57,9 +57,6 @@ struct btrfs_inode {\n" " \t/* used to order data wrt metadata */\n" " \tstruct btrfs_ordered_inode_tree ordered_tree;\n" - " \n" + "=20\n" "-\t/* for keeping track of orphaned inodes */\n" "-\tstruct list_head i_orphan;\n" "-\n" - " \t/* list of all the delalloc inodes in the FS. There are times we need\n" + " \t/* list of all the delalloc inodes in the FS. There are times we nee=\n" + "d\n" " \t * to write all the delalloc pages to disk, and this list is used\n" " \t * to walk them all.\n" "@@ -164,6 +161,7 @@ struct btrfs_inode {\n" @@ -114,7 +132,7 @@ " \tunsigned in_defrag:1;\n" " \tunsigned delalloc_meta_reserved:1;\n" "+\tunsigned has_orphan_item:1;\n" - " \n" + "=20\n" " \t/*\n" " \t * always compress this one file\n" "diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h\n" @@ -123,7 +141,7 @@ "+++ b/fs/btrfs/ctree.h\n" "@@ -1375,7 +1375,7 @@ struct btrfs_root {\n" " \tstruct list_head root_list;\n" - " \n" + "=20\n" " \tspinlock_t orphan_lock;\n" "-\tstruct list_head orphan_list;\n" "+\tatomic_t orphan_inodes;\n" @@ -134,90 +152,98 @@ "index 7f849b3..8bbe8c4 100644\n" "--- a/fs/btrfs/disk-io.c\n" "+++ b/fs/btrfs/disk-io.c\n" - "@@ -1148,7 +1148,6 @@ static void __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,\n" - " \troot->orphan_block_rsv = NULL;\n" - " \n" + "@@ -1148,7 +1148,6 @@ static void __setup_root(u32 nodesize, u32 leafsi=\n" + "ze, u32 sectorsize,\n" + " \troot->orphan_block_rsv =3D NULL;\n" + "=20\n" " \tINIT_LIST_HEAD(&root->dirty_list);\n" "-\tINIT_LIST_HEAD(&root->orphan_list);\n" " \tINIT_LIST_HEAD(&root->root_list);\n" " \tspin_lock_init(&root->orphan_lock);\n" " \tspin_lock_init(&root->inode_lock);\n" - "@@ -1161,6 +1160,7 @@ static void __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,\n" + "@@ -1161,6 +1160,7 @@ static void __setup_root(u32 nodesize, u32 leafsi=\n" + "ze, u32 sectorsize,\n" " \tatomic_set(&root->log_commit[0], 0);\n" " \tatomic_set(&root->log_commit[1], 0);\n" " \tatomic_set(&root->log_writers, 0);\n" "+\tatomic_set(&root->orphan_inodes, 0);\n" - " \troot->log_batch = 0;\n" - " \troot->log_transid = 0;\n" - " \troot->last_log_commit = 0;\n" + " \troot->log_batch =3D 0;\n" + " \troot->log_transid =3D 0;\n" + " \troot->last_log_commit =3D 0;\n" "diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c\n" "index 0218a4e..0265d40 100644\n" "--- a/fs/btrfs/inode.c\n" "+++ b/fs/btrfs/inode.c\n" - "@@ -2138,12 +2138,12 @@ void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,\n" + "@@ -2138,12 +2138,12 @@ void btrfs_orphan_commit_root(struct btrfs_tran=\n" + "s_handle *trans,\n" " \tstruct btrfs_block_rsv *block_rsv;\n" " \tint ret;\n" - " \n" + "=20\n" "-\tif (!list_empty(&root->orphan_list) ||\n" "+\tif (atomic_read(&root->orphan_inodes) ||\n" - " \t root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE)\n" + " \t root->orphan_cleanup_state !=3D ORPHAN_CLEANUP_DONE)\n" " \t\treturn;\n" - " \n" + "=20\n" " \tspin_lock(&root->orphan_lock);\n" "-\tif (!list_empty(&root->orphan_list)) {\n" "+\tif (atomic_read(&root->orphan_inodes)) {\n" " \t\tspin_unlock(&root->orphan_lock);\n" " \t\treturn;\n" " \t}\n" - "@@ -2200,8 +2200,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)\n" - " \t\tblock_rsv = NULL;\n" + "@@ -2200,8 +2200,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *t=\n" + "rans, struct inode *inode)\n" + " \t\tblock_rsv =3D NULL;\n" " \t}\n" - " \n" + "=20\n" "-\tif (list_empty(&BTRFS_I(inode)->i_orphan)) {\n" "-\t\tlist_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list);\n" "+\tif (!BTRFS_I(inode)->has_orphan_item) {\n" - "+\t\tBTRFS_I(inode)->has_orphan_item = 1;\n" + "+\t\tBTRFS_I(inode)->has_orphan_item =3D 1;\n" " #if 0\n" " \t\t/*\n" " \t\t * For proper ENOSPC handling, we should do orphan\n" - "@@ -2214,6 +2214,7 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)\n" - " \t\t\tinsert = 1;\n" + "@@ -2214,6 +2214,7 @@ int btrfs_orphan_add(struct btrfs_trans_handle *t=\n" + "rans, struct inode *inode)\n" + " \t\t\tinsert =3D 1;\n" " #endif\n" - " \t\tinsert = 1;\n" + " \t\tinsert =3D 1;\n" "+\t\tatomic_inc(&root->orphan_inodes);\n" " \t}\n" - " \n" + "=20\n" " \tif (!BTRFS_I(inode)->orphan_meta_reserved) {\n" - "@@ -2261,9 +2262,8 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)\n" - " \tint release_rsv = 0;\n" - " \tint ret = 0;\n" - " \n" + "@@ -2261,9 +2262,8 @@ int btrfs_orphan_del(struct btrfs_trans_handle *t=\n" + "rans, struct inode *inode)\n" + " \tint release_rsv =3D 0;\n" + " \tint ret =3D 0;\n" + "=20\n" "-\tspin_lock(&root->orphan_lock);\n" "-\tif (!list_empty(&BTRFS_I(inode)->i_orphan)) {\n" "-\t\tlist_del_init(&BTRFS_I(inode)->i_orphan);\n" "+\tif (BTRFS_I(inode)->has_orphan_item) {\n" - "+\t\tBTRFS_I(inode)->has_orphan_item = 0;\n" - " \t\tdelete_item = 1;\n" + "+\t\tBTRFS_I(inode)->has_orphan_item =3D 0;\n" + " \t\tdelete_item =3D 1;\n" " \t}\n" - " \n" - "@@ -2271,7 +2271,6 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)\n" - " \t\tBTRFS_I(inode)->orphan_meta_reserved = 0;\n" - " \t\trelease_rsv = 1;\n" + "=20\n" + "@@ -2271,7 +2271,6 @@ int btrfs_orphan_del(struct btrfs_trans_handle *t=\n" + "rans, struct inode *inode)\n" + " \t\tBTRFS_I(inode)->orphan_meta_reserved =3D 0;\n" + " \t\trelease_rsv =3D 1;\n" " \t}\n" "-\tspin_unlock(&root->orphan_lock);\n" - " \n" + "=20\n" " \tif (trans && delete_item) {\n" - " \t\tret = btrfs_del_orphan_item(trans, root, btrfs_ino(inode));\n" - "@@ -2281,6 +2280,9 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)\n" + " \t\tret =3D btrfs_del_orphan_item(trans, root, btrfs_ino(inode));\n" + "@@ -2281,6 +2280,9 @@ int btrfs_orphan_del(struct btrfs_trans_handle *t=\n" + "rans, struct inode *inode)\n" " \tif (release_rsv)\n" " \t\tbtrfs_orphan_release_metadata(inode);\n" - " \n" + "=20\n" "+\tif (trans && delete_item)\n" "+\t\tatomic_dec(&root->orphan_inodes);\n" "+\n" " \treturn 0;\n" " }\n" - " \n" + "=20\n" "@@ -2418,9 +2420,8 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)\n" " \t\t * add this inode to the orphan list so btrfs_orphan_del does\n" " \t\t * the proper thing when we hit it\n" @@ -226,28 +252,30 @@ "-\t\tlist_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list);\n" "-\t\tspin_unlock(&root->orphan_lock);\n" "+\t\tatomic_inc(&root->orphan_inodes);\n" - "+\t\tBTRFS_I(inode)->has_orphan_item = 1;\n" - " \n" + "+\t\tBTRFS_I(inode)->has_orphan_item =3D 1;\n" + "=20\n" " \t\t/* if we have links, this was a truncate, lets do that */\n" " \t\tif (inode->i_nlink) {\n" "@@ -3741,7 +3742,7 @@ void btrfs_evict_inode(struct inode *inode)\n" " \tbtrfs_wait_ordered_range(inode, 0, (u64)-1);\n" - " \n" + "=20\n" " \tif (root->fs_info->log_root_recovering) {\n" "-\t\tBUG_ON(!list_empty(&BTRFS_I(inode)->i_orphan));\n" "+\t\tBUG_ON(!BTRFS_I(inode)->has_orphan_item);\n" " \t\tgoto no_delete;\n" " \t}\n" - " \n" - "@@ -6921,6 +6922,7 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)\n" - " \tei->in_defrag = 0;\n" - " \tei->delalloc_meta_reserved = 0;\n" - " \tei->complete_ordered = 0;\n" - "+\tei->has_orphan_item = 0;\n" - " \tei->force_compress = BTRFS_COMPRESS_NONE;\n" - " \n" - " \tei->delayed_node = NULL;\n" - "@@ -6934,7 +6936,6 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)\n" + "=20\n" + "@@ -6921,6 +6922,7 @@ struct inode *btrfs_alloc_inode(struct super_bloc=\n" + "k *sb)\n" + " \tei->in_defrag =3D 0;\n" + " \tei->delalloc_meta_reserved =3D 0;\n" + " \tei->complete_ordered =3D 0;\n" + "+\tei->has_orphan_item =3D 0;\n" + " \tei->force_compress =3D BTRFS_COMPRESS_NONE;\n" + "=20\n" + " \tei->delayed_node =3D NULL;\n" + "@@ -6934,7 +6936,6 @@ struct inode *btrfs_alloc_inode(struct super_bloc=\n" + "k *sb)\n" " \tmutex_init(&ei->log_mutex);\n" " \tmutex_init(&ei->delalloc_mutex);\n" " \tbtrfs_ordered_inode_tree_init(&ei->ordered_tree);\n" @@ -258,7 +286,7 @@ "@@ -6980,13 +6981,11 @@ void btrfs_destroy_inode(struct inode *inode)\n" " \t\tspin_unlock(&root->fs_info->ordered_extent_lock);\n" " \t}\n" - " \n" + "=20\n" "-\tspin_lock(&root->orphan_lock);\n" "-\tif (!list_empty(&BTRFS_I(inode)->i_orphan)) {\n" "+\tif (BTRFS_I(inode)->has_orphan_item) {\n" @@ -268,12 +296,13 @@ "+\t\tatomic_dec(&root->orphan_inodes);\n" " \t}\n" "-\tspin_unlock(&root->orphan_lock);\n" - " \n" + "=20\n" " \twhile (1) {\n" - " \t\tordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1);\n" + " \t\tordered =3D btrfs_lookup_first_ordered_extent(inode, (u64)-1);\n" "--\n" - "To unsubscribe from this list: send the line \"unsubscribe ceph-devel\" in\n" + "To unsubscribe from this list: send the line \"unsubscribe ceph-devel\" i=\n" + "n\n" "the body of a message to majordomo@vger.kernel.org\n" More majordomo info at http://vger.kernel.org/majordomo-info.html -16422cec5f99bf43753b95fdd68ca8f399478a43aba1313cce121f364e15d086 +fa135eaf0d79b5ab2fe11b66131ee8ac26a25a247ee8cb6e5a1ad889767e8818
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.