aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-10-15 21:13:53 -0400
committerSage Weil <sage@newdream.net>2009-10-15 21:14:44 -0400
commit76e3b390d41db9d69e254a09dd1aedd3e6aac25f (patch)
tree2a2b6586fd36dcef430d1c13e07aa42ceaa51c84
parent8f3bc053c610826a657714649ea596f07875db2e (diff)
ceph: move dirty caps code around
Cleanup only. Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r--fs/ceph/caps.c70
1 files changed, 37 insertions, 33 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 40b8d347124..7d166182e98 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -1270,6 +1270,41 @@ static void ceph_flush_snaps(struct ceph_inode_info *ci)
1270} 1270}
1271 1271
1272/* 1272/*
1273 * Mark caps dirty. If inode is newly dirty, add to the global dirty
1274 * list.
1275 */
1276void __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask)
1277{
1278 struct ceph_mds_client *mdsc = &ceph_client(ci->vfs_inode.i_sb)->mdsc;
1279 struct inode *inode = &ci->vfs_inode;
1280 int was = ci->i_dirty_caps;
1281 int dirty = 0;
1282
1283 dout("__mark_dirty_caps %p %s dirty %s -> %s\n", &ci->vfs_inode,
1284 ceph_cap_string(mask), ceph_cap_string(was),
1285 ceph_cap_string(was | mask));
1286 ci->i_dirty_caps |= mask;
1287 if (was == 0) {
1288 dout(" inode %p now dirty\n", &ci->vfs_inode);
1289 BUG_ON(!list_empty(&ci->i_dirty_item));
1290 spin_lock(&mdsc->cap_dirty_lock);
1291 list_add(&ci->i_dirty_item, &mdsc->cap_dirty);
1292 spin_unlock(&mdsc->cap_dirty_lock);
1293 if (ci->i_flushing_caps == 0) {
1294 igrab(inode);
1295 dirty |= I_DIRTY_SYNC;
1296 }
1297 }
1298 BUG_ON(list_empty(&ci->i_dirty_item));
1299 if (((was | ci->i_flushing_caps) & CEPH_CAP_FILE_BUFFER) &&
1300 (mask & CEPH_CAP_FILE_BUFFER))
1301 dirty |= I_DIRTY_DATASYNC;
1302 if (dirty)
1303 __mark_inode_dirty(inode, dirty);
1304 __cap_delay_requeue(mdsc, ci);
1305}
1306
1307/*
1273 * Add dirty inode to the flushing list. Assigned a seq number so we 1308 * Add dirty inode to the flushing list. Assigned a seq number so we
1274 * can wait for caps to flush without starving. 1309 * can wait for caps to flush without starving.
1275 * 1310 *
@@ -1558,39 +1593,6 @@ ack:
1558} 1593}
1559 1594
1560/* 1595/*
1561 * Mark caps dirty. If inode is newly dirty, add to the global dirty
1562 * list.
1563 */
1564void __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask)
1565{
1566 struct ceph_mds_client *mdsc = &ceph_client(ci->vfs_inode.i_sb)->mdsc;
1567 struct inode *inode = &ci->vfs_inode;
1568 int was_dirty = ci->i_dirty_caps;
1569 int dirty = 0;
1570
1571 dout("__mark_dirty_caps %p %s dirty %s -> %s\n", &ci->vfs_inode,
1572 ceph_cap_string(mask), ceph_cap_string(ci->i_dirty_caps),
1573 ceph_cap_string(ci->i_dirty_caps | mask));
1574 ci->i_dirty_caps |= mask;
1575 if (!was_dirty) {
1576 dout(" inode %p now dirty\n", &ci->vfs_inode);
1577 spin_lock(&mdsc->cap_dirty_lock);
1578 list_add(&ci->i_dirty_item, &mdsc->cap_dirty);
1579 spin_unlock(&mdsc->cap_dirty_lock);
1580 if (ci->i_flushing_caps == 0) {
1581 igrab(inode);
1582 dirty |= I_DIRTY_SYNC;
1583 }
1584 }
1585 if (((was_dirty | ci->i_flushing_caps) & CEPH_CAP_FILE_BUFFER) &&
1586 (mask & CEPH_CAP_FILE_BUFFER))
1587 dirty |= I_DIRTY_DATASYNC;
1588 if (dirty)
1589 __mark_inode_dirty(inode, dirty);
1590 __cap_delay_requeue(mdsc, ci);
1591}
1592
1593/*
1594 * Try to flush dirty caps back to the auth mds. 1596 * Try to flush dirty caps back to the auth mds.
1595 */ 1597 */
1596static int try_flush_caps(struct inode *inode, struct ceph_mds_session *session, 1598static int try_flush_caps(struct inode *inode, struct ceph_mds_session *session,
@@ -2370,6 +2372,8 @@ static void handle_cap_flush_ack(struct inode *inode,
2370 dout(" inode %p now clean\n", inode); 2372 dout(" inode %p now clean\n", inode);
2371 BUG_ON(!list_empty(&ci->i_dirty_item)); 2373 BUG_ON(!list_empty(&ci->i_dirty_item));
2372 drop = 1; 2374 drop = 1;
2375 } else {
2376 BUG_ON(list_empty(&ci->i_dirty_item));
2373 } 2377 }
2374 } 2378 }
2375 spin_unlock(&mdsc->cap_dirty_lock); 2379 spin_unlock(&mdsc->cap_dirty_lock);