Skip to content

Commit 3b6492d

Browse files
committed
afs: Increase to 64-bit volume ID and 96-bit vnode ID for YFS
Increase the sizes of the volume ID to 64 bits and the vnode ID (inode number equivalent) to 96 bits to allow the support of YFS. This requires the iget comparator to check the vnode->fid rather than i_ino and i_generation as i_ino is not sufficiently capacious. It also requires this data to be placed into the vnode cache key for fscache. For the moment, just discard the top 32 bits of the vnode ID when returning it though stat. Signed-off-by: David Howells <[email protected]>
1 parent 2a0b4f6 commit 3b6492d

File tree

17 files changed

+86
-81
lines changed

17 files changed

+86
-81
lines changed

fs/afs/afs.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
#define AFSPATHMAX 1024 /* Maximum length of a pathname plus NUL */
2424
#define AFSOPAQUEMAX 1024 /* Maximum length of an opaque field */
2525

26-
typedef unsigned afs_volid_t;
27-
typedef unsigned afs_vnodeid_t;
28-
typedef unsigned long long afs_dataversion_t;
26+
typedef u64 afs_volid_t;
27+
typedef u64 afs_vnodeid_t;
28+
typedef u64 afs_dataversion_t;
2929

3030
typedef enum {
3131
AFSVL_RWVOL, /* read/write volume */
@@ -52,8 +52,9 @@ typedef enum {
5252
*/
5353
struct afs_fid {
5454
afs_volid_t vid; /* volume ID */
55-
afs_vnodeid_t vnode; /* file index within volume */
56-
unsigned unique; /* unique ID number (file index version) */
55+
afs_vnodeid_t vnode; /* Lower 64-bits of file index within volume */
56+
u32 vnode_hi; /* Upper 32-bits of file index */
57+
u32 unique; /* unique ID number (file index version) */
5758
};
5859

5960
/*

fs/afs/cache.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static enum fscache_checkaux afs_vnode_cache_check_aux(void *cookie_netfs_data,
4949
struct afs_vnode *vnode = cookie_netfs_data;
5050
struct afs_vnode_cache_aux aux;
5151

52-
_enter("{%x,%x,%llx},%p,%u",
52+
_enter("{%llx,%x,%llx},%p,%u",
5353
vnode->fid.vnode, vnode->fid.unique, vnode->status.data_version,
5454
buffer, buflen);
5555

fs/afs/callback.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ void afs_break_callbacks(struct afs_server *server, size_t count,
310310
/* TODO: Sort the callback break list by volume ID */
311311

312312
for (; count > 0; callbacks++, count--) {
313-
_debug("- Fid { vl=%08x n=%u u=%u } CB { v=%u x=%u t=%u }",
313+
_debug("- Fid { vl=%08llx n=%llu u=%u } CB { v=%u x=%u t=%u }",
314314
callbacks->fid.vid,
315315
callbacks->fid.vnode,
316316
callbacks->fid.unique,

fs/afs/dir.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ static int afs_do_lookup_one(struct inode *dir, struct dentry *dentry,
552552
}
553553

554554
*fid = cookie.fid;
555-
_leave(" = 0 { vn=%u u=%u }", fid->vnode, fid->unique);
555+
_leave(" = 0 { vn=%llu u=%u }", fid->vnode, fid->unique);
556556
return 0;
557557
}
558558

@@ -830,7 +830,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
830830
struct key *key;
831831
int ret;
832832

833-
_enter("{%x:%u},%p{%pd},",
833+
_enter("{%llx:%llu},%p{%pd},",
834834
dvnode->fid.vid, dvnode->fid.vnode, dentry, dentry);
835835

836836
ASSERTCMP(d_inode(dentry), ==, NULL);
@@ -900,7 +900,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
900900

901901
if (d_really_is_positive(dentry)) {
902902
vnode = AFS_FS_I(d_inode(dentry));
903-
_enter("{v={%x:%u} n=%pd fl=%lx},",
903+
_enter("{v={%llx:%llu} n=%pd fl=%lx},",
904904
vnode->fid.vid, vnode->fid.vnode, dentry,
905905
vnode->flags);
906906
} else {
@@ -969,7 +969,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
969969
/* if the vnode ID has changed, then the dirent points to a
970970
* different file */
971971
if (fid.vnode != vnode->fid.vnode) {
972-
_debug("%pd: dirent changed [%u != %u]",
972+
_debug("%pd: dirent changed [%llu != %llu]",
973973
dentry, fid.vnode,
974974
vnode->fid.vnode);
975975
goto not_found;
@@ -1108,7 +1108,7 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
11081108

11091109
mode |= S_IFDIR;
11101110

1111-
_enter("{%x:%u},{%pd},%ho",
1111+
_enter("{%llx:%llu},{%pd},%ho",
11121112
dvnode->fid.vid, dvnode->fid.vnode, dentry, mode);
11131113

11141114
key = afs_request_key(dvnode->volume->cell);
@@ -1178,7 +1178,7 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry)
11781178
u64 data_version = dvnode->status.data_version;
11791179
int ret;
11801180

1181-
_enter("{%x:%u},{%pd}",
1181+
_enter("{%llx:%llu},{%pd}",
11821182
dvnode->fid.vid, dvnode->fid.vnode, dentry);
11831183

11841184
key = afs_request_key(dvnode->volume->cell);
@@ -1270,7 +1270,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
12701270
u64 data_version = dvnode->status.data_version;
12711271
int ret;
12721272

1273-
_enter("{%x:%u},{%pd}",
1273+
_enter("{%llx:%llu},{%pd}",
12741274
dvnode->fid.vid, dvnode->fid.vnode, dentry);
12751275

12761276
if (dentry->d_name.len >= AFSNAMEMAX)
@@ -1334,7 +1334,7 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
13341334

13351335
mode |= S_IFREG;
13361336

1337-
_enter("{%x:%u},{%pd},%ho,",
1337+
_enter("{%llx:%llu},{%pd},%ho,",
13381338
dvnode->fid.vid, dvnode->fid.vnode, dentry, mode);
13391339

13401340
ret = -ENAMETOOLONG;
@@ -1397,7 +1397,7 @@ static int afs_link(struct dentry *from, struct inode *dir,
13971397
dvnode = AFS_FS_I(dir);
13981398
data_version = dvnode->status.data_version;
13991399

1400-
_enter("{%x:%u},{%x:%u},{%pd}",
1400+
_enter("{%llx:%llu},{%llx:%llu},{%pd}",
14011401
vnode->fid.vid, vnode->fid.vnode,
14021402
dvnode->fid.vid, dvnode->fid.vnode,
14031403
dentry);
@@ -1468,7 +1468,7 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry,
14681468
u64 data_version = dvnode->status.data_version;
14691469
int ret;
14701470

1471-
_enter("{%x:%u},{%pd},%s",
1471+
_enter("{%llx:%llu},{%pd},%s",
14721472
dvnode->fid.vid, dvnode->fid.vnode, dentry,
14731473
content);
14741474

@@ -1544,7 +1544,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
15441544
orig_data_version = orig_dvnode->status.data_version;
15451545
new_data_version = new_dvnode->status.data_version;
15461546

1547-
_enter("{%x:%u},{%x:%u},{%x:%u},{%pd}",
1547+
_enter("{%llx:%llu},{%llx:%llu},{%llx:%llu},{%pd}",
15481548
orig_dvnode->fid.vid, orig_dvnode->fid.vnode,
15491549
vnode->fid.vid, vnode->fid.vnode,
15501550
new_dvnode->fid.vid, new_dvnode->fid.vnode,
@@ -1611,7 +1611,7 @@ static int afs_dir_releasepage(struct page *page, gfp_t gfp_flags)
16111611
{
16121612
struct afs_vnode *dvnode = AFS_FS_I(page->mapping->host);
16131613

1614-
_enter("{{%x:%u}[%lu]}", dvnode->fid.vid, dvnode->fid.vnode, page->index);
1614+
_enter("{{%llx:%llu}[%lu]}", dvnode->fid.vid, dvnode->fid.vnode, page->index);
16151615

16161616
set_page_private(page, 0);
16171617
ClearPagePrivate(page);

fs/afs/dynroot.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ struct inode *afs_try_auto_mntpt(struct dentry *dentry, struct inode *dir)
6262
struct inode *inode;
6363
int ret = -ENOENT;
6464

65-
_enter("%p{%pd}, {%x:%u}",
65+
_enter("%p{%pd}, {%llx:%llu}",
6666
dentry, dentry, vnode->fid.vid, vnode->fid.vnode);
6767

6868
if (!test_bit(AFS_VNODE_AUTOCELL, &vnode->flags))

fs/afs/file.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ int afs_open(struct inode *inode, struct file *file)
121121
struct key *key;
122122
int ret;
123123

124-
_enter("{%x:%u},", vnode->fid.vid, vnode->fid.vnode);
124+
_enter("{%llx:%llu},", vnode->fid.vid, vnode->fid.vnode);
125125

126126
key = afs_request_key(vnode->volume->cell);
127127
if (IS_ERR(key)) {
@@ -170,7 +170,7 @@ int afs_release(struct inode *inode, struct file *file)
170170
struct afs_vnode *vnode = AFS_FS_I(inode);
171171
struct afs_file *af = file->private_data;
172172

173-
_enter("{%x:%u},", vnode->fid.vid, vnode->fid.vnode);
173+
_enter("{%llx:%llu},", vnode->fid.vid, vnode->fid.vnode);
174174

175175
if ((file->f_mode & FMODE_WRITE))
176176
return vfs_fsync(file, 0);
@@ -228,7 +228,7 @@ int afs_fetch_data(struct afs_vnode *vnode, struct key *key, struct afs_read *de
228228
struct afs_fs_cursor fc;
229229
int ret;
230230

231-
_enter("%s{%x:%u.%u},%x,,,",
231+
_enter("%s{%llx:%llu.%u},%x,,,",
232232
vnode->volume->name,
233233
vnode->fid.vid,
234234
vnode->fid.vnode,
@@ -634,7 +634,7 @@ static int afs_releasepage(struct page *page, gfp_t gfp_flags)
634634
struct afs_vnode *vnode = AFS_FS_I(page->mapping->host);
635635
unsigned long priv;
636636

637-
_enter("{{%x:%u}[%lu],%lx},%x",
637+
_enter("{{%llx:%llu}[%lu],%lx},%x",
638638
vnode->fid.vid, vnode->fid.vnode, page->index, page->flags,
639639
gfp_flags);
640640

fs/afs/flock.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static const struct file_lock_operations afs_lock_ops = {
2929
*/
3030
void afs_lock_may_be_available(struct afs_vnode *vnode)
3131
{
32-
_enter("{%x:%u}", vnode->fid.vid, vnode->fid.vnode);
32+
_enter("{%llx:%llu}", vnode->fid.vid, vnode->fid.vnode);
3333

3434
queue_delayed_work(afs_lock_manager, &vnode->lock_work, 0);
3535
}
@@ -76,7 +76,7 @@ static int afs_set_lock(struct afs_vnode *vnode, struct key *key,
7676
struct afs_fs_cursor fc;
7777
int ret;
7878

79-
_enter("%s{%x:%u.%u},%x,%u",
79+
_enter("%s{%llx:%llu.%u},%x,%u",
8080
vnode->volume->name,
8181
vnode->fid.vid,
8282
vnode->fid.vnode,
@@ -107,7 +107,7 @@ static int afs_extend_lock(struct afs_vnode *vnode, struct key *key)
107107
struct afs_fs_cursor fc;
108108
int ret;
109109

110-
_enter("%s{%x:%u.%u},%x",
110+
_enter("%s{%llx:%llu.%u},%x",
111111
vnode->volume->name,
112112
vnode->fid.vid,
113113
vnode->fid.vnode,
@@ -138,7 +138,7 @@ static int afs_release_lock(struct afs_vnode *vnode, struct key *key)
138138
struct afs_fs_cursor fc;
139139
int ret;
140140

141-
_enter("%s{%x:%u.%u},%x",
141+
_enter("%s{%llx:%llu.%u},%x",
142142
vnode->volume->name,
143143
vnode->fid.vid,
144144
vnode->fid.vnode,
@@ -175,7 +175,7 @@ void afs_lock_work(struct work_struct *work)
175175
struct key *key;
176176
int ret;
177177

178-
_enter("{%x:%u}", vnode->fid.vid, vnode->fid.vnode);
178+
_enter("{%llx:%llu}", vnode->fid.vid, vnode->fid.vnode);
179179

180180
spin_lock(&vnode->lock);
181181

@@ -192,7 +192,7 @@ void afs_lock_work(struct work_struct *work)
192192
ret = afs_release_lock(vnode, vnode->lock_key);
193193
if (ret < 0)
194194
printk(KERN_WARNING "AFS:"
195-
" Failed to release lock on {%x:%x} error %d\n",
195+
" Failed to release lock on {%llx:%llx} error %d\n",
196196
vnode->fid.vid, vnode->fid.vnode, ret);
197197

198198
spin_lock(&vnode->lock);
@@ -229,7 +229,7 @@ void afs_lock_work(struct work_struct *work)
229229
key_put(key);
230230

231231
if (ret < 0)
232-
pr_warning("AFS: Failed to extend lock on {%x:%x} error %d\n",
232+
pr_warning("AFS: Failed to extend lock on {%llx:%llx} error %d\n",
233233
vnode->fid.vid, vnode->fid.vnode, ret);
234234

235235
spin_lock(&vnode->lock);
@@ -430,7 +430,7 @@ static int afs_do_setlk(struct file *file, struct file_lock *fl)
430430
struct key *key = afs_file_key(file);
431431
int ret;
432432

433-
_enter("{%x:%u},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type);
433+
_enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type);
434434

435435
/* only whole-file locks are supported */
436436
if (fl->fl_start != 0 || fl->fl_end != OFFSET_MAX)
@@ -582,7 +582,7 @@ static int afs_do_unlk(struct file *file, struct file_lock *fl)
582582
struct afs_vnode *vnode = AFS_FS_I(locks_inode(file));
583583
int ret;
584584

585-
_enter("{%x:%u},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type);
585+
_enter("{%llx:%llu},%u", vnode->fid.vid, vnode->fid.vnode, fl->fl_type);
586586

587587
/* Flush all pending writes before doing anything with locks. */
588588
vfs_fsync(file, 0);
@@ -639,7 +639,7 @@ int afs_lock(struct file *file, int cmd, struct file_lock *fl)
639639
{
640640
struct afs_vnode *vnode = AFS_FS_I(locks_inode(file));
641641

642-
_enter("{%x:%u},%d,{t=%x,fl=%x,r=%Ld:%Ld}",
642+
_enter("{%llx:%llu},%d,{t=%x,fl=%x,r=%Ld:%Ld}",
643643
vnode->fid.vid, vnode->fid.vnode, cmd,
644644
fl->fl_type, fl->fl_flags,
645645
(long long) fl->fl_start, (long long) fl->fl_end);
@@ -662,7 +662,7 @@ int afs_flock(struct file *file, int cmd, struct file_lock *fl)
662662
{
663663
struct afs_vnode *vnode = AFS_FS_I(locks_inode(file));
664664

665-
_enter("{%x:%u},%d,{t=%x,fl=%x}",
665+
_enter("{%llx:%llu},%d,{t=%x,fl=%x}",
666666
vnode->fid.vid, vnode->fid.vnode, cmd,
667667
fl->fl_type, fl->fl_flags);
668668

0 commit comments

Comments
 (0)