Skip to content

Commit a95aef6

Browse files
amir73iljankara
authored andcommitted
fanotify: support reporting non-decodeable file handles
fanotify users do not always need to decode the file handles reported with FAN_REPORT_FID. Relax the restriction that filesystem needs to support NFS export and allow reporting file handles from filesystems that only support ecoding unique file handles. Even filesystems that do not have export_operations at all can fallback to use the default FILEID_INO32_GEN encoding, but we use the existence of export_operations as an indication that the encoded file handles will be sufficiently unique and that user will be able to compare them to filesystem objects using AT_HANDLE_FID flag to name_to_handle_at(2). For filesystems that do not support NFS export, users will have to use the AT_HANDLE_FID of name_to_handle_at(2) if they want to compare the object in path to the object fid reported in an event. Signed-off-by: Amir Goldstein <[email protected]> Signed-off-by: Jan Kara <[email protected]> Message-Id: <[email protected]>
1 parent 96b2b07 commit a95aef6

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

fs/notify/fanotify/fanotify.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ static int fanotify_encode_fh_len(struct inode *inode)
380380
if (!inode)
381381
return 0;
382382

383-
exportfs_encode_inode_fh(inode, NULL, &dwords, NULL, 0);
383+
exportfs_encode_fid(inode, NULL, &dwords);
384384
fh_len = dwords << 2;
385385

386386
/*
@@ -443,7 +443,7 @@ static int fanotify_encode_fh(struct fanotify_fh *fh, struct inode *inode,
443443
}
444444

445445
dwords = fh_len >> 2;
446-
type = exportfs_encode_inode_fh(inode, buf, &dwords, NULL, 0);
446+
type = exportfs_encode_fid(inode, buf, &dwords);
447447
err = -EINVAL;
448448
if (!type || type == FILEID_INVALID || fh_len != dwords << 2)
449449
goto out_err;

fs/notify/fanotify/fanotify_user.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,11 +1591,10 @@ static int fanotify_test_fid(struct dentry *dentry)
15911591
* We need to make sure that the file system supports at least
15921592
* encoding a file handle so user can use name_to_handle_at() to
15931593
* compare fid returned with event to the file handle of watched
1594-
* objects. However, name_to_handle_at() requires that the
1595-
* filesystem also supports decoding file handles.
1594+
* objects. However, even the relaxed AT_HANDLE_FID flag requires
1595+
* at least empty export_operations for ecoding unique file ids.
15961596
*/
1597-
if (!dentry->d_sb->s_export_op ||
1598-
!dentry->d_sb->s_export_op->fh_to_dentry)
1597+
if (!dentry->d_sb->s_export_op)
15991598
return -EOPNOTSUPP;
16001599

16011600
return 0;

0 commit comments

Comments
 (0)